Hier mal ein konkretes Beispiel.
User Story: Gegeben sei ein Zahlungsjournal (T81) aus dem heraus ein XMLPort ein File fĂĽr die Bank (z.B. ISO20022, SEPA) erstellen soll.
Dabei möchte ich den Filenamen fix vorgeben. Es soll also kein "Save As" Dialog gestartet werden.
- Code: Alles auswählen
VAR
TempBlob : Record 99008535;
FileManagement : Codeunit 419;
OutputClientFile : Text;
OutStr@1000 : OutStream;
NVInStream : InStream;
XMLPortID : Integer;
BEGIN
XMLPort := 50000;
TempBlob.INIT;
TempBlob.Blob.CREATEOUTSTREAM(OutStr);
// Hier wird nun der XMLPort aufgerufen. GenJnlLine (T81) ist gefiltert auf die Datensätze, die generiert werden sollen.
// Output ist TempBlob aus dem wir dann einen Instream erzeugen:
XMLPORT.EXPORT(XMLPortID,OutStr,GenJnlLine);
TempBlob.Blob.CREATEINSTREAM(NVInStream);
Nun geht es "nur" noch darum, diesen NVInStream als Datei z.B. als "C:\Temp\blabla.xml" zu speichern.
Theoretisch mĂĽsste das wie folgt funktionieren. Aber aufgepasst! Die rote Zeile funktioniert nicht wie gewĂĽnscht!
IF DOWNLOADFROMSTREAM(NVInStream,'Export', 'C:\Temp\','','Blabla.xml') THEN ....Die Crux liegt beim dritten Parameter, der den Ziel-Pfad enthält: Wenn dort ein echter Pfad drinsteht (wie bei mir "C:\Temp\"), dann erscheint der unerwünschte "Save As" dialog.
Den Dialog können wir nur unterdrücken, wenn wir als Ziel-Pfac "<TEMP>" oder sauberer den Magicpath aus dem Filemanagement verwenden.
Das ist allerdings nur die halbe Miete, denn nun liegt meine Datei im Temp-Verzeichnis. und muss noch verschoben werden.
Also:
- Code: Alles auswählen
OutputClientFile := 'Blabla.xml';
IF DOWNLOADFROMSTREAM(NVInStream,'Export', FileManagement.Magicpath,'',OutputClientFile) THEN BEGIN
FileManagement.MoveFile(OutputClientFile, 'C:\Temp\Blabla.xml');
END;
Zu beachten ist auch noch, dass die Funktion DOWNLOADFROMSTREAM meine Variable "OutputClientFile" mit dem effektiven Namen ĂĽberschreibt.
Somit wird aus 'Blabla.xml' ein langes "C:\User\<schlagmichtot>\Temp\Blabla.xml'