Beim erzeugen einer Datei erscheint immer ein Filedialog

Bild Microsoft Dynamics NAV 2018

Beim erzeugen einer Datei erscheint immer ein Filedialog

Beitragvon HerbertGross » 6. Juni 2018 07:26

Guten Morgen zusammen,

wenn ich ganz einfach eine Datei erzeugen möchte, z.B.:
File -> file
file.CREATE('d:\test.txt');
file.CLOSE;

dann öffnet sich beim "file.Create" immer noch ein Filedialog, wo ich Pfad und Dateinamen ändern könnte.

Kann man diesen FileDialog unterdrücken, da bei uns etwas automatisiert läuft und wir diesen nicht brauchen, ganz im Gegenteil?
Von der 2009er Version kenne ich dieses Verhalten auch nicht so.

Vielen Dank im Voraus und allen einen schönen Tag,
HerbertGross
HerbertGross
 
Beiträge: 15
Registriert: 6. Juni 2018 07:11

Re: Beim erzeugen einer Datei erscheint immer ein Filedialog

Beitragvon Markus Merkl » 6. Juni 2018 08:03

Bei Wechsel auf 3-Tier hat sich auch das file-mgt/handling geändert. Dazu gips auch eine Mgt-Codeunit. Sie da mal nach uns nutz die. d:\xyz ist nicht immer da wo Du es erwartest :-D
Markus

“Perl is the only language that looks the same before and after RSA encryption.” (Keith Bostic)
Benutzeravatar
Markus Merkl
 
Beiträge: 487
Registriert: 24. April 2007 10:10
Wohnort: ZH
Arbeitsort: CH-ZH
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: [alle]

Re: Beim erzeugen einer Datei erscheint immer ein Filedialog

Beitragvon HerbertGross » 6. Juni 2018 10:13

Danke erstmal, supi, ich gucke es mir mal an.
HerbertGross
HerbertGross
 
Beiträge: 15
Registriert: 6. Juni 2018 07:11

Re: Beim erzeugen einer Datei erscheint immer ein Filedialog

Beitragvon JRenz » 6. Juni 2018 13:02

Hallo Herbert,

wie Markus schon geschrieben hat, gibt es dazu die Codeunit 419 "File Management".
Für den Umstieg von NAV2009 (vermutlich Classic-Version) auf NAV2018 würde ich dir empfehlen, dass in deinem Programmcode zuerst eine temporäre Datei auf dem NAV-Server erstellst (Funktion "ServerTempFile") und dann in deiner Verarbeitung in diese Datei schreibst.
Am Ende der Verarbeitung kannst du die temporäre Datei dann mit der Funktion "DownloadTempFile" oder der Funktion "DownloadToFile" (ein Beispiel findest du im Report 91) auf dem Client speichern.
GruĂź
Jörg
JRenz
Microsoft Partner
Microsoft Partner
 
Beiträge: 479
Registriert: 27. April 2007 09:22
Arbeitsort: Neu-Ulm
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2.x bis BC 365

Re: Beim erzeugen einer Datei erscheint immer ein Filedialog

Beitragvon HerbertGross » 7. Juni 2018 07:39

Guten Morgen,

ja, das ist die Classic-Version. Wir versuchen das mal.
Danke fĂĽr die hilfreichen Antworten.

HerbertGross
HerbertGross
 
Beiträge: 15
Registriert: 6. Juni 2018 07:11

Re: Beim erzeugen einer Datei erscheint immer ein Filedialog

Beitragvon mfabian » 7. Juni 2018 17:55

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'
mfabian
 
Beiträge: 7
Registriert: 20. April 2006 10:16

Re: Beim erzeugen einer Datei erscheint immer ein Filedialog

Beitragvon Kowa » 24. August 2023 15:11

mfabian hat geschrieben:ein langes "C:\User\<schlagmichtot>\

Code: Alles auswählen
FileManagement.MoveFile(OutputClientFile, 'C:\Temp\Blabla.xml');

Mit BC 14 klappt das Verlegen von der temporären Clientdatei mit MoveFile zumindest bei meiner aktuellen Client-Server-Konstellation (Kundensystem) merkwürdigerweise nicht.
Code: Alles auswählen
FileMgt.MoveFile(OutputClientFile,ParentPath + LocalFileName);
erzeugt weder eine Fehlermeldung noch eine Datei (bzw. nicht da, wo sie hin soll :-) )
Code: Alles auswählen
FileMgt.MoveAndRenameClientFile(OutputClientFile,LocalFileName,ParentPath);
generiert die Zieldatei dagegen problemlos im gewĂĽnschten Verzeichnis.
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7854
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01

Re: Beim erzeugen einer Datei erscheint immer ein Filedialog

Beitragvon fiddi » 24. August 2023 15:49

Hallo,

Mit BC 14 klappt das Verlegen von der temporären Clientdatei mit MoveFile zumindest bei meiner aktuellen Client-Server-Konstellation (Kundensystem) merkwürdigerweise nicht.


Lass mich mal vermuten: Du arbeitest lokal mit einem System bei dem Server und Client auf einem Rechner laufen, beim Kunden sind das getrennte Rechner?

GruĂź Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7096
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: Beim erzeugen einer Datei erscheint immer ein Filedialog

Beitragvon Kowa » 24. August 2023 23:45

Lokal mache ich gar nichts, ich arbeite via Citrix Virtual Desktop beim Kunden, damit komme ich auf den ersten Server, von da geht es mit Remote Desktop auf den nächsten virtuellen Server mit dem BC 14 System, welches die fertigen Dateien auf einem Netzlaufwerk ablegen soll. Dort habe ich nur ab einer bestimmten Unterverzeichnisebene Schreibberechtigung, auf dem BC 14 Server bin ich lokaler Admin und nutze den dort installierten Windowsclient zur Erzeugung.

Ich habe eher einen fehlenden Backslash hinten beim ParentPath im Verdacht, das Automation FileSystemObject mit GetParentFolderName löse ich an vielen Stellen durch GetDirectoryName aus Codeunit 419 ab.
Ich prüfe das nächste Woche noch mal genauer, bin morgen nicht im Büro. Für heute hat es auch erstmal genug Fehlermeldungen gehagelt :mrgreen: .
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7854
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01

Re: Beim erzeugen einer Datei erscheint immer ein Filedialog

Beitragvon fiddi » 25. August 2023 07:43

Hallo,

Die Move- Funktion (suboptimaler Name) ist eine Client- Funktion. D.h. Sie wird auf dem Client ausgefĂĽhrt. Wenn der Client EDIT:also nicht exakt die gleiche Laufwerksstruktur und Berechtigungen wie der Server hat Der Client nicht auf die exakt gleiche Laufwerksstruktur und Berechtigungen wie der Server zugreift, hast du ein Problem.

Aber wenn du sicher gehen willst, das etwas funktioniert, würde ich mir immer genau anschauen wo welche Funktion ausgeführt wird. Wenn die Datei vom Server erzeugt wird, kann er die sofern er unter einem Domänen- Account läuft direkt in ein Verzeichnis schreiben auf das der Account zugriff hat.
Hat er das nicht, ist der Weg immer ServerTemp-Datei erzeugen, Download auf den Client, Client verschiebt die Datei, wenn nötig.
Lässt du den Schritt mit dem Download weg, funktioniert das ganze nur, wenn Client auf dem Rechner des Servicetiers läuft, dann hat Client u.U. Zugriff auf den Pfad des Serverdateinamens und der Move funktioniert auch mit dem Client.

GruĂź Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7096
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: Beim erzeugen einer Datei erscheint immer ein Filedialog

Beitragvon Kowa » 28. August 2023 11:07

Danke fĂĽr die Hinweise, Fiddi, ich werde wohl noch viel "SpaĂź" mit diesem Netzwerk haben :-) .
Kowa hat geschrieben:
Ich habe eher einen fehlenden Backslash hinten beim ParentPath im Verdacht, das Automation FileSystemObject mit GetParentFolderName löse ich an vielen Stellen durch GetDirectoryName aus Codeunit 419 ab.

Die Vermutung war schon richtig, böse Falle: GetParentFolderName und GetDirectoryName verhalten sich gleich oder unterschiedlich, je nachdem, ob im Pfad hinten ein Backslash steht oder nicht. Beim Kundensystem sind die Pfade in einem Tabellenfeld hinterlegt (inkl. Backslash, meistens jedenfalls :wink: ), und der Name der zu erzeugenden Datei in einem anderen Feld.

COM: GetParentFolderName mit C:\MyDir\MySubDir\ oder C:\MyDir\MySubDir liefert jeweils C:\MyDir
.NET: GetDirectoryName mit C:\MyDir\MySubDir\ liefert dagegen C:\MyDir\MySubDir, nur C:\MyDir\MySubDir liefert C:\MyDir

Nachtrag: MoveFile hat in diesem Fall also die Zieldatei mit einem aus Order- und Dateinamen zusammengesetzten neuen falschen Dateinamen eine Ebene höher als im Zielordner abgelegt.
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7854
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01

Re: Beim erzeugen einer Datei erscheint immer ein Filedialog

Beitragvon fiddi » 28. August 2023 12:00

Hallo,
ich meine Timo hat mal ein schönes Code- Schnipselchen hier veröffentlicht.
Code: Alles auswählen
FileNamePath := DELCHR(DestPath,'>','\')+'\'+filename;


GruĂź Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7096
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell


ZurĂĽck zu NAV 2018

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron