[gelöst] Ext. Programm über Aufgabenwarteschlagen ausführen

30. Juli 2018 12:14

Hallo,
wir haben vor kurzem auf NAV 2016 gewechselt. Ich suche gerade ein Möglichkeit, ein externes Programm (Zip Programm mit Kennwortverschlüsselung) auszuführen.
Folgende Rahmenbedingungen:
- Übergabe von Parametern bei Programmaufruf
- Programm soll durch eine Aufgabenwarteschlage ausgeführt werden
- Verarbeitung des externen Programms soll abgewartet werden, bevor weiterer NAV Code ausgeführt wird
- Programm sollte grundsätzlich auf dem Server laufen (damit man den Aufgabenwarteschlangenposten auch manuell nachstarten kann, keine Installation des Programms auf allen Clients)

Ich habe es bisher mit dem DotNet Typ System.Diagnostics.Process.System versucht, aber bei Ausführung auf der Aufgabenwarteschlage kommt es zur Fehlermeldung, dass ein Clientrückruf der Funktion nicht unterstützt wird (ProcessShell := ProcessShell.Process;).
Und bei einem 'Windows Script Host Object Model'.WshShell scheint das Programm nur auf dem Client Rechner ausgeführt zu werden.

Vielleicht hat jemand noch einen Idee, wie man so etwas unter der 3-Tier-Architektur am besten umsetzten kann. Ich bin für jeden Tipp dankbar.
Zuletzt geändert von luninaut am 30. Juli 2018 15:52, insgesamt 2-mal geändert.

Re: Externes Programm über Aufgabenwarteschlagen ausführen

30. Juli 2018 13:57

Der Ansatz über .NET ist schon korrekt. In Summe sollte das so oder so ähnlich aussehen.

Im folgenden Code würde dieser Command an die Eingabeaufforderung geschickt werden, wobei %1 und %2 durch Parameter in der NAV Funktion definiert werden: "C:\Temp\Program.exe" output="%1" input=%2

Code:
Program_l := 'C:\Temp\Program.exe';
Parameter_l := STRSUBSTNO('output="%1" input=%2', Output_p, Input_p);

SystemDiagnosticsProcessStartInfo_l := SystemDiagnosticsProcessStartInfo_l.ProcessStartInfo(STRSUBSTNO('"%1"', Program_l ), Parameter_l );
SystemDiagnosticsProcessStartInfo_l.WindowStyle(SystemDiagnosticsProcessWindowsStyle_l.Hidden);
SystemDiagnosticsProcess_l := SystemDiagnosticsProcess_l.Process;
SystemDiagnosticsProcess_l.Start(SystemDiagnosticsProcessStartInfo_l);


Code:
Name   DataType   Subtype   Length
SystemDiagnosticsProcess_l   DotNet   System.Diagnostics.Process.'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
SystemDiagnosticsProcessStartInfo_l   DotNet   System.Diagnostics.ProcessStartInfo.'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
SystemDiagnosticsProcessWindowsStyle_l   DotNet   System.Diagnostics.ProcessWindowStyle.'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'


Wenn der Code auf der Service Tier per Aufgabenwarteschlange ausgeführt werden soll, so achte auf das "RunOnClient" bei allen beteiligten .NET Variablen auf No steht (siehe Anhang). Dann werden diese auch auf dem Server und mit dem NAS ausgeführt.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: [gelöst] Ext. Programm über Aufgabenwarteschlagen ausfüh

30. Juli 2018 15:53

Die Änderung der Eigenschaft RunOnClient=No war der entscheidende Hinweis. Danke. :-P