[GELÖST] Vewendung von SHELL um FreePDF aufzurufen

24. Juli 2010 10:22

Hallo,

Ich rufe FreePDFmit der Shell-Funktion auf. Das funktioniert grundsätzlich ganz gut.

Auszug aus dem Programmcode:
***********
SHELL('c:\programme\freepdf_xp\freepdf.exe','c:\NAV\pdf\navreport.ps','/a /x')
SLEEP(5000);

// Dateiname navreport.pdf wird in einen sprechenderen Namen umbenannt
IF FILE.RENAME('c:\NAV\pdf\navreport.pdf',vPDFName) THEN;

***********

Nur manchmal gibt es ein Problem:
FreePDF 4.02 gibt dann als Fehlermeldung aus:
Unable to open the initial device, quitting.
GhostScript Error 1
Fehler, kein PDF erzeugt.

Wenn ich mir das o.g. Verzeichnis anschaue sehe ich dort
navreport.ps mit z.B. 151 kb
bereits umbeanannte PDF-Datei mit 0 kb

Ich vermute mal, dass die PDF-Konvertierung noch nicht abgeschlossen war, die bereits angelegte, aber noch mit 0 kb gefüllte PDF-Datei umbenannt wurde und deshalb diese Fehlermeldung ausgegeben wurde.

Bislang habe ich hier eine Wartezeit von 5 Sekunden verwendet, überlege jetzt aber, ob es eine bessere Variante gibt z.B. über einen ReturnCode. Ich kann die Shell-Funktion mit einem ReturnCode verwenden

Returncode := Shell()
Ich vermute mal, dass der nächste Befehl danach erst ausgeführt wird, wenn der Returncode angekommen ist und damit die Befehlsausführung abgeschlossen wurde. Jetzt wäre es gut zu wissen, welche Returncodes von FreePDF denn zurückgegeben werden und hierzu habe ich leider keine Info gefunden.

Kennt jemand diese Returncodes?
Ist mein Gedankenansatz grundsätzlich ok oder gibt es Verbesserungsbedarf?

Gruß
Winfried
Zuletzt geändert von WinfriedBarz am 26. Juli 2010 11:21, insgesamt 1-mal geändert.

Re: Vewendung von SHELL um FreePDF aufzurufen

26. Juli 2010 09:12

Das dürfte alles erklären, oder? :-)
C/SIDE Reference Guide hat geschrieben:Use this function to execute external programs and operating system commands from C/AL programs. You can run this function modally or non-modally, depending on whether or not you include the return value from the external program in your code.

Re: Vewendung von SHELL um FreePDF aufzurufen

26. Juli 2010 09:30

Hallo Sebastian,
das habe ich auch gelesen aber es bleiben für mich 2 Fragen
- wird die nächste Codezeile in C/AL erst ausgeführt, wenn das externe Programm beendet ist
- welche Returncodes gibt es von FreePDF, denn die zu kennen wäre ja wichtig um dann ggf. zu entscheiden wie es weitergeht

Gruß
Winfried Barz

Re: Vewendung von SHELL um FreePDF aufzurufen

26. Juli 2010 10:30

WinfriedBarz hat geschrieben:Hallo Sebastian,
das habe ich auch gelesen aber es bleiben für mich 2 Fragen
- wird die nächste Codezeile in C/AL erst ausgeführt, wenn das externe Programm beendet ist


Ja, wenn du den Returncode abfragst läuft SHELL runmodal.

WinfriedBarz hat geschrieben:- welche Returncodes gibt es von FreePDF, denn die zu kennen wäre ja wichtig um dann ggf. zu entscheiden wie es weitergeht

Gruß
Winfried Barz


Ich kenne nicht die Rueckgabewerte von Freepdf, aber in der Regel ist der Rückgabewert=0 wenn alles ok ist und <>0 wenn es Fehler gab.

mfg,
winfy

Re: Vewendung von SHELL um FreePDF aufzurufen

26. Juli 2010 10:34

Hallo,

wenn der Returncode abgefragt wird, läuft der C/AL-Code erst weiter, nachdem der Returncode zugewiesen wurde, da die weitere Verarbeitung diesen Returncode benötigen könnte.

In der Regel liefern die Programme den Wert 0 (fehlerfreie Ausführung) und <>0 (üblicherweise -1 bzw. 1; Fehler in Ausführung).
Manche Programme liefern bei <>0 verschiedene Werte, um mitzuteilen, was die Ursache für den Fehler war.

Re: [GELÖST] Vewendung von SHELL um FreePDF aufzurufen

26. Juli 2010 11:22

Vielen Dank für die guten Hinweise

Gruß
Winfried