Dateien aus Verzeichnis auslesen

Bild Microsoft Dynamics NAV 2009 (aka "NAV 6")
Forumsregeln
Impressum • Community-Knigge • Nutzungsbedingungen • Datenschutzrichtlinie

Bitte unbedingt angeben, ob sich eure Frage auf den RoleTailored-Client (RTC) oder den Classic-Client (CC) bezieht!

Dateien aus Verzeichnis auslesen

Beitragvon Chris_BSS » 2. Juni 2010 16:51

Hallo Zusammen.

Folgendes Thema möchte ich gerne lösen:

In einem vorab definierten Verzeichnis (Bspl.: C:\Import\) möchte ich mehrere Textdateien ablegen und diese dann über Navision auflisten lassen.

Ich habe also eine Form, die bei 'OnOpen 'auf das hinterlegte Verzeichnis zugreifen soll und dann eine Tabelle temporär mit den Namen der einzelnen Dateien füllen soll.

Mein Versuch das Ganze zu lösen sieht so aus, dass ich eine Automatisierung über Microsoft Scripting Runtime erstellt habe.
Mit den 'Classes' habe ich mir schon den Pfad herangeholt und kann auch die Anzahl der Dateien in diesem Verzeichnis zählen lassen. Jetzt benötige ich einen Schleifenlauf der mir auf die einzelnen Dateien läuft.

Hat da jmd eine Idee oder evtl. einen anderen Lösungsansatz?
Zuletzt geändert von Chris_BSS am 9. Juni 2010 15:04, insgesamt 1-mal geändert.
Chris_BSS
 
Beiträge: 12
Registriert: 24. September 2008 15:35
Realer Name: Christopher Knopp
Arbeitsort: MĂĽlheim an der Ruhr
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 5.0

Re: Dateien aus Verzeichnis auslesen

Beitragvon Natalie » 2. Juni 2010 17:18

Hast du dich schon im Forum umgesehen?
Beipiel: viewtopic.php?f=8&t=4403
Demnach kannst du so ein Verzeichnis per Quelltext auslesen:

Code: Alles auswählen
File.RESET;
File.SETRANGE(Path,SaleSetup."Dateiverzeichnis Import"); // hier Ordnerpfad
File.SETRANGE("Is a file",TRUE); // muss
File.SETFILTER(Name,'*.txt');  // kann
IF File.FINDSET THEN
  REPEAT
    // v
  UNTIL File.NEXT = 0;

File ist hier ein Record auf die Tabelle File.

Wenn dies Dateien einfach nur angezeigt werden sollen:
Erstelle also eine Form mit SourceTable = File und setze passende Filter im OnOpenForm-Trigger (nur die Filter), blende das Feld "Name" ein - und schon hast du deine aufgezählten Dateien.
GruĂź, Natalie

Frage beantwortet oder Problem von allein gelöst? 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.
Benutzeravatar
Natalie
Moderator
Moderator
 
Beiträge: 9257
Registriert: 31. Oktober 2006 19:51
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: Dateien aus Verzeichnis auslesen

Beitragvon Chris_BSS » 9. Juni 2010 15:03

Ich habe im Forum nach einer Lösung gesucht gehabt, allerdings wohl nicht ordentlich genug.

Vielen Dank fĂĽr deine Hilfe, das ist genau das, was ich brauchte :-).
Chris_BSS
 
Beiträge: 12
Registriert: 24. September 2008 15:35
Realer Name: Christopher Knopp
Arbeitsort: MĂĽlheim an der Ruhr
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 5.0

Re: Dateien aus Verzeichnis auslesen

Beitragvon Kowa » 16. Juni 2010 14:09

Mit dem RTC scheint die Filetabelle nicht wie bisher versorgt zu werden. Anscheinend sind die Einträge auch teilweise doppelt.
Bei UNC Netzwerkpfaden ( \\Server\Ordner\) steht aber gar nichts in der Tabelle.
Ich habe heute wie hier bei Mibuso beschrieben eine andere Methode mit FileSystemObject und ScriptControl versucht, um die Dateien abzuarbeiten, aber momentan hagelt es da noch bildschirmfüllende Fehlermeldungen beim Aufruf im RTC, im CC läuft der Code einwandfrei.
Assembly2.jpg
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: 7849
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: Dateien aus Verzeichnis auslesen

Beitragvon Kowa » 11. August 2010 11:49

Kowa hat geschrieben:Bei UNC Netzwerkpfaden ( \\Server\Ordner\) steht aber gar nichts in der Tabelle.

Das ist jetzt ein bestätigter Bug.
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: 7849
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: Dateien aus Verzeichnis auslesen

Beitragvon Walter Albiker » 25. August 2010 16:33

Sorry Kai, habe die Nachricht erst heute geöffnet...

Ich will heute (entgegen allen guten Vorsätzen :wink:)doch mal meine Lösung (zu der ich teilweise sicher auch inspiriert wurde) posten. Sie funktioniert jedenfalls.

Die File-Tabelle arbeitet in Verbindung mit dem RTC zurzeit auch mit den neuesten Builds nicht zuverlässig. Zudem ist sie auch einfach unpraktisch wegen der Begrenzung von ca. 100 Zeichen für Ordner- oder Dateinamenslänge.

Nachteil der Lösung sind eine Menge Automation-Variablen, die verwendet werden. Man könnte da auch sparen, wenn der Umweg über Visual Basic nicht notwendig wäre, weil die Methoden z. B. in 'Microsoft Scripting Runtime'.Dictionary unvollständig implementiert sind (daher möglicherweise auch die Fehlermeldung im Beitrag oben).

Vorläufig wird man spezielle Dinge wohl leider nicht ohne bestimmte Automation-Variablen lösen können, wie z. B. bestimmte Workarounds über Send Keys in Main-/Subform-Konstrukten.

Hier also die Lösung:

Die Variablen:

FileSystemObject -> Automation: 'Windows Script Host Object Model'.FileSystemObject
FilesDict -> Automation: 'Microsoft Scripting Runtime'.Dictionary
ScriptControl -> Automation: 'Microsoft Script Control 1.0'.ScriptControl
FileSystemObject -> Automation: 'Windows Script Host Object Model'.FileSystemObject
WSHFolder -> Automation: 'Windows Script Host Object Model'.Folder
WSHFile -> Automation: 'Windows Script Host Object Model'.File
WSHFiles -> Automation: 'Windows Script Host Object Model'.Files
ImportFolder -> Text, 1024
txtCR -> Text, 1
txtCode -> Text, 1024


Der Code:

Code: Alles auswählen
IF ISSERVICETIER THEN BEGIN
  ImportFolder := <Import-Ordner>;

  IF ISCLEAR(FileSystemObject) THEN
    CREATE(FileSystemObject,FALSE,TRUE);

  IF NOT FileSystemObject.FolderExists(ImportFolder) THEN BEGIN
    MESSAGE(<Text:Isnixda>,ImportFolder);
    CLEAR(FileSystemObject);
    EXIT;
  END;

  IF ISCLEAR(FilesDict) THEN
    CREATE(FilesDict,FALSE,TRUE);
  IF ISCLEAR(ScriptControl) THEN
    CREATE(ScriptControl,FALSE,TRUE);
 
  WSHFolder := FileSystemObject.GetFolder(ImportFolder);
  WSHFiles := WSHFolder.Files;

  ScriptControl.Language := 'VBScript';
  ScriptControl.AddObject('FilesByName',WSHFiles);
  ScriptControl.AddObject('FilesById',FilesDict);

  txtCR := '';
  txtCR[1] := 13;
  txtCode :=
     'dim f1' + txtCR +
     ' For Each f1 in FilesByName' + txtCR +
     ' FilesById.Add (FilesById.Count+1), f1' + txtCR +
     ' Next' + txtCR;
  ScriptControl.AddCode(txtCode);
  txtCode :=
  'function GetItem(i)' + txtCR +
  ' GetItem = FilesById(i)' + txtCR +
  'end function' + txtCR;
  ScriptControl.AddCode(txtCode);
  ScriptControl.ExecuteStatement(txtCode);

  FOR i := 1 TO WSHFiles.Count DO BEGIN
    ImportFileName := ScriptControl.Eval('GetItem(' + FORMAT(i) + ')');
    ImportFileName := UPPERCASE(ImportFileName);
    FileName := DELCHR(ImportFileName,'<');
    WHILE STRPOS(FileName,'\') <> 0 DO
      FileName := COPYSTR(FileName,STRPOS(FileName,'\') + 1);

       
      <Datei vielleicht noch abfiltern (z. B. anhand der Endung), ob sie bearbeitet werden soll oder nicht>
      <Irgendwas mit der Datei machen>
      …
    END;
    …
  END;
  CLEAR(FilesDict);
  CLEAR(FileSystemObject);
  CLEAR(ScriptControl);
END ELSE BEGIN
  ...


Das Importverzeichnis muss lokal oder als Netzwerkfreigabe für den ausführenden Client zugänglich sein.

FĂĽr alle Interessierten viel SpaĂź beim Nachbasteln!

GrĂĽĂźe
Walter
Benutzeravatar
Walter Albiker
 
Beiträge: 12
Registriert: 10. Februar 2005 11:28
Wohnort: Freiburg
Arbeitsort: Freiburg
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2009 SP1

Re: Dateien aus Verzeichnis auslesen

Beitragvon Kowa » 21. Februar 2012 10:44

Zu der Problematik mit der File Tabelle beim RTC hier im MSDN eine Alternative.
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: 7849
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: Dateien aus Verzeichnis auslesen

Beitragvon SilverX » 21. Februar 2012 12:39

Oder auch hier :-D
Cheers
Carsten


This post is my own opinion and does not necessarily reflect the opinion or view of my employer.
SilverX
Microsoft Partner
Microsoft Partner
 
Beiträge: 1252
Registriert: 16. September 2006 14:07
Realer Name: Carsten Scholling
Arbeitsort: GĂĽtersloh
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2013+


ZurĂĽck zu NAV 2009

Wer ist online?

Mitglieder in diesem Forum: Unbekannter Bot und 1 Gast