REPEAT UNTIL Schleife "blockiert" NAV

2. Dezember 2016 16:36

Hallo Liebe Community,

ich stehe gerade vor einer Programmierherausforderung. Und zwar möchte ich ein externen Prozess aus NAV heraus aufrufen, wenn dieser Prozess beendet wird soll eine Rückmeldung an NAV erfolgen, dass dieser beendet wurde.
Dies habe ich nun zuerst mit einer REPEAT UNTIL Schleife gelöst, diese "blockiert" aber NAV, da es die ganze Zeit wartet bis die Schleife durchgelaufen ist. Meine erste Idee war eine Single Instance Codeunit, wo aber das gleiche Problem auftritt.

Hat vielleicht noch jemand eine andere Idee, wie das umzusetzen wäre?

Re: REPEAT UNTIL Schleife "blockiert" NAV

2. Dezember 2016 16:44

Was genau meint du denn mit dem externen Prozess?

Re: REPEAT UNTIL Schleife "blockiert" NAV

2. Dezember 2016 16:46

Hallo,

hast du das schon einmal über einen Timer probiert?

Gruß

Michael

Re: REPEAT UNTIL Schleife "blockiert" NAV

2. Dezember 2016 17:23

Natalie hat geschrieben:Was genau meint du denn mit dem externen Prozess?


z.B.: im Grunde eine einfache *.exe

MichaelK hat geschrieben:hast du das schon einmal über einen Timer probiert?


der Timer in NAV blockiert doch genauso

Meine Überlegung wäre, einfach über .Net zu prüfen, ob der Prozess noch läuft und wenn nicht, dann an NAV eine Rückmeldung schicken

Re: REPEAT UNTIL Schleife "blockiert" NAV

5. Dezember 2016 08:41

Also wenn ich das ganze richtig verstanden habe willst du den Prozess von dem externen Programm/*.exe Asynchron verarbeiten.
Mir stellt sich noch die Frage, ob die Rückmeldung nur an den Ausführenden-Benutzer gehen soll?

Wenn ja würde ich es mit folgendem probieren.

Ich würde mir ein Event schreiben und dieses dann Triggern und in einer anderen CodeUnit würde ich es dieses Event fangen.
Anschließend würde ich es in dieser CodeUnit das Programm startet und dort so lange warten bis das Programm beendet ist.

Wenn Nein

würde ich eine Datei ablegen und mit einem Schedule-Job überwachen ob die Datei abgelegt wurde und wenn diese vorhanden ist die *.exe ausführen.

Re: REPEAT UNTIL Schleife "blockiert" NAV

5. Dezember 2016 09:03

Hallo,

die erste Frage, die ich mir stellen würden, ist ob das Programm auf die Beendigung warten soll, das scheint hier nicht der Fall zu sein, denn dann wäre es kein Problem, wenn NAV blockiert.
Die zweite Frage ist, was mit "Rückmeldung" gemeint ist. Denn eine Rückmeldung kann eine Message auf dem Bildschirm sein, eine Mail, ein Eintrag in einer Tabelle, oder evtl. auch das Ergebnis eines geplanten Reports.

Wenn diese Fragen geklärt sind, dann kann man nach Lösungen suchen. Das könnte eine Hintergrundsession sein (STARTSESSION), ein geplanter Report, ein Event, oder die Kombination aus mehreren.

Gruß Fiddi

Re: REPEAT UNTIL Schleife "blockiert" NAV

5. Dezember 2016 11:36

fiddi hat geschrieben:Wenn diese Fragen geklärt sind, dann kann man nach Lösungen suchen. Das könnte eine Hintergrundsession sein (STARTSESSION), ein geplanter Report, ein Event, oder die Kombination aus mehreren.


Um das ganze mal etwas verständlicher zu machen, hier ein kleiner Ablauf den ich mir vorgestellt habe:

- Benutzer 1 soll aus NAV heraus ein externen Prozess starten, sobald dieser gestartet wurde, wird in NAV eine Sperre gesetzt, dass kein anderer Benutzer diesen Prozess ein zweites mal ausführen kann
- Benutzer 1 will aber in NAV weiterhin arbeiten, auch wenn er den externen Prozess gestartet hat und dieser im Hintergrund weiterhin läuft
- Wenn Benutzer 1 diesen Prozess beendet soll die Sperre in NAV logischerweise wieder rausgenommen werden, damit alle anderen Benutzer den Prozess wieder ausführen können

Mit Rückmeldung meine ich hier in diesem Fall, wenn Benutzer 1 den externen Prozess beendet hat, dass eine Funktion prüft ob dieser beendet wurde und eine Rückmeldung an NAV macht, damt NAV die Sperre wieder entfernen kann.

pjung hat geschrieben:Ich würde mir ein Event schreiben und dieses dann Triggern und in einer anderen CodeUnit würde ich es dieses Event fangen.
Anschließend würde ich es in dieser CodeUnit das Programm startet und dort so lange warten bis das Programm beendet ist.


Das mache ich aktuell genau so wie du es beschrieben hast, und genau das blockiert mir NAV in der Zeit in der ich warte, bis das Programm beendet wurde.
Aber die zweite Variante klingt auch Interessant, ich glaube ich komme um eine externe .NET dll einfach nicht herum.

Re: REPEAT UNTIL Schleife "blockiert" NAV

5. Dezember 2016 11:50

Hallo,

ich kenne das Problem jetzt noch nicht ganz genau, aber ich würde da mal von Seite ran gehen, den Prozess Benutzer-unabhängig per JobQueue zu starten, und dann die Ergebnisse für die Benutzer bereitstellen.

Gruß Fiddi

Re: REPEAT UNTIL Schleife "blockiert" NAV

7. Dezember 2016 12:52

fiddi hat geschrieben:ich kenne das Problem jetzt noch nicht ganz genau, aber ich würde da mal von Seite ran gehen, den Prozess Benutzer-unabhängig per JobQueue zu starten, und dann die Ergebnisse für die Benutzer bereitstellen.


Also ich habe es jetzt erstmal über eine Codeunit gelöst die nach einem bestimmten Intervall prüft, ob der Prozess noch läuft. Diese Codeunit wird über eine Projektwarteschlange angestoßen. Mal sehen wie weit ich damit komme...

Danke trotzdem für eure Ideen.