[Gelöst] XML-Port per Codeunit aufrufen

26. Juni 2013 09:05

Guten Morgen liebe Community,

ich habe ein Problem bei dem Aufruf eines XML-Ports per Codeunit.
Und zwar bekomme ich beim Download der temporären Datei einen Error ("E/A-Ausnahme während des Vorgangs") mit dem ich leider gar nix anfangen kann.
Also habe ich mal den Debugger angeschmissen und herausgefunden, dass der Fehler bei der Funktion DownloadTempFile der Codeunit 419 File Management auftritt.

Kann mir jemand hierbei weiterhelfen bzw. Hilfestellung zur Datei-Logik von NAV 2013 geben?
Ich bin für jede Antwort dankbar.

Mfg Sipa

Code:
ExportGenJnlLines(VAR DestinationFolder : Text)

FileName := COPYSTR(FORMAT(TODAY),7,2);
FileName += COPYSTR(FORMAT(TODAY),4,2);
FileName += COPYSTR(FORMAT(TODAY),1,2);
FileName += '-GenJnlLines.xml';

TempXMLFile.CREATE(TEMPORARYPATH + FileName);
TempXMLFile.CREATEOUTSTREAM(Outstream);

ImportExportGenJnlLines.SETDESTINATION(Outstream);
ImportExportGenJnlLines.EXPORT;

IF COPYSTR(DestinationFolder, STRLEN(DestinationFolder), 1) <> '\' THEN
  FileManagement.DownloadToFile(TempXMLFile.NAME,DestinationFolder + '\' + FileName)         //ERROR
ELSE
  FileManagement.DownloadToFile(TempXMLFile.NAME,DestinationFolder + FileName);              //ERROR

TempXMLFile.CLOSE;
Zuletzt geändert von Sipa am 26. Juni 2013 11:42, insgesamt 1-mal geändert.

Re: XML-Port per Codeunit aufrufen

26. Juni 2013 09:26

Wenn ich mir zum Vergleich die Funktion BLOBExport der Codeunit 419 ansehe - müsste es dann nicht bei dir
Code:
TempXMLFile.CREATEINSTREAM(Instream);
heißen?

PS:
So könnte es auch gehen, hab ich woanders gefunden (TempBlob ist Tabelle 99008535):

Code:
TempBlob.Blob.CREATEOUTSTREAM(OutStr);
MyXMLport.SETDESTINATION(OutStr);
MyXMLport.SETTABLEVIEW(MyRec);
IF MyXMLport.EXPORT THEN BEGIN
  ServerFileName := FileMgt.ServerTempFileName(...);
  TempBlob.Blob.EXPORT(ServerFileName);
  FileMgt.DownloadToFile(ServerFileName,ClientFileName);
END;


Hier wird also der XMLport-Output in ein Blob-Feld geladen und von dort weiter verarbeitet.

Re: XML-Port per Codeunit aufrufen

26. Juni 2013 09:45

Hallo Natalie,

Natalie hat geschrieben:Wenn ich mir zum Vergleich die Funktion BLOBExport der Codeunit 419 ansehe - müsste es dann nicht bei dir
Code:
TempXMLFile.CREATEINSTREAM(Instream);
heißen?

PS:
So könnte es auch gehen, hab ich woanders gefunden (TempBlob ist Tabelle 99008535):


Hier mag vielleicht sogar der Fehler liegen, ich erstelle ja eine Datei und einen Outstream der die Datei füllt - vielleicht brauche ich erst einen Instream bevor ich die Datei vom Server ziehen kann (?)
Kommando zurück, ich will die Datei ja nur vom Server lokal auf dem Client-PC abspeichern und nicht nach Navision importieren.
Code:
TempBlob.Blob.CREATEOUTSTREAM(OutStr);
MyXMLport.SETDESTINATION(OutStr);
MyXMLport.SETTABLEVIEW(MyRec);
IF MyXMLport.EXPORT THEN BEGIN
  ServerFileName := FileMgt.ServerTempFileName(...);
  TempBlob.Blob.EXPORT(ServerFileName);
  FileMgt.DownloadToFile(ServerFileName,ClientFileName);
END;


Hier wird also der XMLport-Output in ein Blob-Feld geladen und von dort weiter verarbeitet.


Bei diesem Snipplet muss ich zugeben es nicht ganz zu verstehen: Wofür der TempBlob.Blob.Export? Danach wird ja dennoch ein DownloadToFile ausgeführt wo mein Export nunmal in die Knie geht.

MfG
Sipa

Re: XML-Port per Codeunit aufrufen

26. Juni 2013 10:04

Sipa hat geschrieben:Bei diesem Snipplet muss ich zugeben es nicht ganz zu verstehen: Wofür der TempBlob.Blob.Export? Danach wird ja dennoch ein DownloadToFile ausgeführt wo mein Export nunmal in die Knie geht.

Ja, aber noch wissen wir nicht, warum dein DownloadToFile nicht funktioniert hat. Vielleicht hast du Client- und Serverpfad miteinander verwechselt, vielleicht hat EXPORT etwas an falscher Stelle hineingeschrieben ...
Ich weiß nur, dass der von mir zitierte Code funktioniert ;-)

Re: XML-Port per Codeunit aufrufen

26. Juni 2013 11:42

Natalie: Gab ja jetzt schon manchmal echt ein paar Tage wo ich nicht wusste wie ich die Ausbildung wohl ohne dich überstehen soll! :wink:
Danke die Methode hat wunderbar funktioniert!