[Gelöst] Repeat until EOF?

12. September 2007 16:00

Und schon wieder stehe ich vor einem Problem *seufz*

Und zwar würde ich gerne eine ID hochzählen lassen, bis der Export durch den XMLPort abgeschlossen ist. Ich dachte da an sowas wie "End of File" oder so in der Richtung. Habe aber weder in meinen Unterlagen nocht hier im Forum etwas passendes gefunden. Mein Code sieht zur Zeit so aus:

Code:
id := 0;
REPEAT
"<cat1id>" := 'Id_' +  FORMAT(id);
id := id + 1;
UNTIL EOF; // EOF funktioniert natürlich nicht ist zur Zeit nur ein Platzhalter


Gibt es sowas in der Art in Navision überhaupt?`
Über eine Antwort würde ich mich natürlich sehr freuen.

Liebe Grüße
Heike
Zuletzt geändert von Heike Bennerscheid am 14. September 2007 08:31, insgesamt 1-mal geändert.

12. September 2007 16:06

Hallo Heike,

würde ganz spontan sagen, das EOF hier ungeeignet, da diese Funktion lediglich das ende einer Datei markiert! Da du aber beim schreiben einer Datei bist, kann das ende dieser ja noch nicht bekannt sein!

Im Prinziep müßtest du prüfen, ob das ende der zu exportierenden Datenmenge erreicht ist (z.B. wurde letzter datensatz verarbeitet).

12. September 2007 16:13

Ja richtig.

Das Problem ist nur das aus mehreren Tabellen gelesen wird. Da ist schwer zu sagen welches der letze Datensatz ist. Gibt es nicht die Möglichkeit zu sagen das er die Schleife so lange durchlaufen soll bis der Export zu Ende ist?

14. September 2007 02:50

Ich gehe mal davon aus, dass du eine Tabelle hast, die sozusagen als Mutter für den Export dient, also z.B.

Code:
<Items>    //Oberbegriff für die Art der Daten im File
  <Item>   //SourceType=Table  DataSource=Item
...

im Item - Export::OnPreXMLItem Trigger initialisierst Du deine Variable:

Code:
id:=0;

und im Item - Export::OnAfterGetRecord Trigger kommt Zuweisung und Hochzählen:

Code:
"<cat1id>" := 'Id_' +  FORMAT(id);
id := id + 1;

Für jeden Datensatz wird also einer hochgezählt, bis das kein Datensatz mehr kommt, weil dann ja auch kein OnAfterGetRecord mehr kommt.
Wenn Du nach dem </Item> noch weitere Tabellen ausgeben und weiterzählen willst, packst du in deren OnAfterGetRecord den gleichen Code, aber ohne im OnPreXMLItem wieder auf Null zu setzen.

Du brauchs also nicht extra eine Schleife zu programmieren, das macht Navision für dich....

14. September 2007 08:31

Oh danke.

Das ja mal total interessant. Da wär ich im Leben nicht drauf gekommen :)