[Gelöst] XML-Port Fehler abfangen

21. Juli 2009 10:49

Hallo Forum!

ich hab da ein kleines Problem:
In einem bestimmten Verzeichnis kommen immer mal XML-Dateien rein. In bestimmten Zeitabständen werden diese vom Benutzer eingelesen. Nach dem Einlesen kommen die Daten in eine Puffertabelle. Nach jedem erfolgreichen Einlesen einer XML-Datei, wird diese umbenannt und in ein Archiv-Verzeichnis kopiert. Jetzt kann es aber sein, dass beispielsweise 10 Dateien da sind, Navision liest die ersten 5 Dateien ein und in der 6. Datei ist irgendein Fehler. Die restlichen 4 Dateien bleiben stehen. Ich möchte jetzt gerne, die restlichen 4 trotzdem einlesen und das nur die fehlerhafte stehenbleibt. Wie kann ich die Import-Fehlermeldung in der 6. Datei übergehen?
Für Hilfe bin ich sehr dankbar.
Hier ist mien bisheriger Code dazu:
Code:
File.RESET;
File.SETRANGE(Path,'');
IF File.ISEMPTY THEN;
File.SETRANGE(Path,PurchaseOrderImportPath);
File.SETRANGE("Is a file",TRUE);
File.SETFILTER(Name,'*.xml');
IF File.FIND('-') THEN BEGIN
  REPEAT
    IF FileNotInUse(PurchaseOrderImportPath+File.Name) THEN BEGIN                   //Prüfen ob Datei in Benutzung
      InFile.OPEN(PurchaseOrderImportPath+File.Name);
      InFile.CREATEINSTREAM(InStream);
      XMLPORT.IMPORT(50001,InStream);
      InFile.CLOSE;
      RenameAndCopyFiletoArchive(PurchaseOrderImportPath+File.Name);        //Datei umbenennen und ins Archiv kopieren
      COMMIT;                                                      //
    END;
  UNTIL File.NEXT = 0;
END;
Zuletzt geändert von svr am 22. Juli 2009 10:22, insgesamt 1-mal geändert.

Re: XML-Port Fehler abfangen

21. Juli 2009 11:54

Eine Möglichkeit wäre es, den mittleren Teil
Code:
      InFile.OPEN(PurchaseOrderImportPath+File.Name);
      InFile.CREATEINSTREAM(InStream);
      XMLPORT.IMPORT(50001,InStream);
      InFile.CLOSE;

in eine Codeunit in den OnRun-Trigger auszulagern.
Wenn du statt des Quelltextes dann die Codeunit mit einem IF-Statement startest, dann wird der Ablauf nicht unterbrochen und du hast die Möglichkeit, im Falle eines Fehlers sogar etwas auszuführen (z.B. die fehlerhafte Datei in einen Extra-Ordner schieben oder umbenennen etc.).

Beispiel:
Code:
REPEAT
...
DeineCodeunit.SetzeEvtlParameter;
IF DeineCodeunit.RUN THEN BEGIN
  RenameAndCopyFiletoArchive(PurchaseOrderImportPath+File.Name);
END ELSE BEGIN
  RenameAndCopyFiletoErrorFolder;
END;
...
UNTIL


Jeder NAS-Prozess arbeitet so, damit eine Fehler nicht die Verarbeitung anderer Punkte behindert.

Re: [Gelöst] XML-Port Fehler abfangen

22. Juli 2009 10:23

Super, Danke! Genau das habe ich gesucht! :-D