XML - Export mit Filter

29. Mai 2007 13:01

Hallo,

ich habe ein XMLPort erstellt der auch einwandfrei etc funktioniert.

Nur jetzt meine Frage ich möchte nur Danten exportieren die mit einem bestimmten Vorgangscode gekennzeichnet sind.

Den der Benutzer aber variable einstellen kann.

wie kann ich das realisieren?

[hr]

Und gleichzeitig noch eine Frage, wenn ich Standardmäßig eine XML-File erstelle wird bei mir das alte automatisch überschrieben. Kann ich die Detei mit Datum Uhrzeit im File benennen? Wenn ja, wie?

Danke für eure Hilfe.

MfG

Mk

29. Mai 2007 13:21

Um den Filter Variabel zu machen, musst du in der Codeunit (oder wo auch immer du den Port aufrufst) einen Dialog öffnen, in dem der Nutzer den Filter angeben kann. im XML-Port musst du eine Funktion erstellen, die den Filter entgegennimmt, den XML-Port als Variable anlegen und dann erst clear, dann die Funktion mit Filter aufrufen und dann erst den Export aufrufen.
ZU deiner Frage mit Datum:
Bevor du den Filenamen an den Stream übergibst, kannst du mit

filename:= filename + format(Today) + format(time)

Datum und Uhrzeit anhängen. Wenn Filename bereits die Extension enthält, musst du diese vorher abschneiden und hinterher wieder anhängen, oder du packst Datum und Uhrzeit nach vorne.

also z.B. so:
Code:
FileExt:=copystr(filename,strlen(filename)-4);
Filename:=copystr(filename,1,strlen(filename)-4);
Filename:=Filename + Format(Today) + Format(Time) + FileExt;
Zuletzt geändert von Michael Schumacher am 29. Mai 2007 14:03, insgesamt 1-mal geändert.

29. Mai 2007 13:29

Danke Micha du Experte, ist echt gut jemanden wie dich hier im forum zu haben! hast du vielleicht ein wenig lektüre zu xml ports im petto?

29. Mai 2007 13:49

nee, nur das, was in den Foren steht, die Online-Hilfe und das ADG auf der Produkt-CD.

29. Mai 2007 13:50

ja gut adg ist auch nicht so sehr hilfreich... wie ich finde so wenig informationen... weil das mit dem filter scheint wohl schwieriger zu sein...

alles echt nen bisschen schwer zu lernen :(

29. Mai 2007 13:57

wenn ich die codeunit jetzt mit dem eingefügten code von dir aufrufe bekomme ich folgende Fehlermeldung.

Code:
---------------------------
Microsoft Business Solutions-Navision
---------------------------
Der Wert COPYSTR des Parameters 3 ist außerhalb des zulässigen Bereichs.

Der aktuelle Wert ist -4.
Der gültige Bereich ist: von 0 bis 2147483647.

---------------------------
OK   
---------------------------

29. Mai 2007 14:00

Ich habe mir das anders gelöst, vielleicht auch für Dich einfacher.
Ich habe in den Tabellen, die ich mit dem XML-Port übertragen will (z.B. Statusänderung eines Auftrags an den Webshop, hier also die Tabelle Sales Header) ein Feld eingebaut, dass ich "unsent" (nicht gesendet) genannt habe. Der XML-Port exportiert nur die Sätze, wo das Feld True ist, weil ich das dort in den Properties als TableView eingestellt habe.
Ich muss also nur dafür sorgen, dass in allen Sätzen die Übertragen werden sollen, das Feld gesetzt wird, bevor ich den Export aufrufe.
Das kannst du ja über eine Lookupform machen und über den Setselectionfilter dann mit Modifyall das Feld setzen.
Im OnPostXMLPort-Trigger musst du dann das Feld wieder zurücksetzen.

29. Mai 2007 14:00

Offenbar ist filename leer ...

29. Mai 2007 14:02

mk-gfx hat geschrieben:Der aktuelle Wert ist -4.

Dann ist Filename leer, achso, du musst die Zuweisungen für Filename und FileExt umdrehen, also erst FileExt, sonst ist die Extension ja schon abgeschnitten.
Ich habe das im Code oben auch schon geändert.

29. Mai 2007 14:07

mein code

Code:
fileExt:=COPYSTR(filename,STRLEN(filename)-4);
filename:=COPYSTR(filename,1,STRLEN(filename)-4);
filename:=filename + FORMAT(TODAY) + FORMAT(TIME) + fileExt;

XmlFile.CREATE('c:\' + filename);
XmlFile.CREATEOUTSTREAM(ostream);

XMLPORT.EXPORT(50012,ostream);
//xmlPort.EXPORT;

XmlFile.CLOSE;

MESSAGE ('XML-File wurde erfolgreich exportiert!')

29. Mai 2007 14:08

Ja und wo wird Filename selber festgelegt?

29. Mai 2007 14:09

Michael Schumacher hat geschrieben:Ja und wo wird Filename selber festgelegt?


??

29. Mai 2007 14:11

DU musst doch erst mal einen Dateinamen haben, bei dem die Extension abgeschnitten, Datum und Uhrzeit angehangen und dann die Extension wieder zugefügt wird.
Solange Du vor meinen Zeilen den Filename noch nicht zugewiesen hast, MUSS das knallen....

29. Mai 2007 14:14

sprich filename:= 'daten.xml';

29. Mai 2007 14:18

Genau, wenn du ihn hartcodierst, kannst du dir auch den Copystr sparen:

filename:= 'c:\daten' + format(today) + format(time) + '.xml';

29. Mai 2007 14:20

mein fehler...

jetzt aber das...

Code:
---------------------------
Microsoft Business Solutions-Navision
---------------------------
Das Betriebssystem hat die Fehlermeldung (87) ausgegeben:

Falscher Parameter.

29. Mai 2007 14:24

ja, der Doppelpunkt muss weg.

Versuch es mal mit
filename:= 'c:\daten' + format(today,0,9) + format(time,0,9) + '.xml'

29. Mai 2007 14:28

immer noch fehler 87...

mein code...
Code:
filename:= 'c:\daten' + FORMAT(TODAY,0,9) + FORMAT(TIME,0,9) + '.xml';

XmlFile.CREATE(filename);
XmlFile.CREATEOUTSTREAM(ostream);

XMLPORT.EXPORT(50012,ostream);
//xmlPort.EXPORT;

XmlFile.CLOSE;

MESSAGE ('XML-File wurde erfolgreich exportiert!')

29. Mai 2007 14:32

wo passiert der Fehler?
gib doch mal mit message(filename) vor der ersten XMLFile Zeile den zusammengebauten Dateinamen aus, vielleicht hab ich was übersehen, ich baue die Zeilen schließlich im Kopf zusammen ;-)

29. Mai 2007 14:34

ausgabe: ---------------------------
Microsoft Business Solutions-Navision
---------------------------
c:
daten2007-05-2912:32:58.546Z.xml
---------------------------
OK
---------------------------

29. Mai 2007 14:38

\ = Zeilenumbruch oder?

29. Mai 2007 14:38

ok, der Backslash wird im Message als Zeilenumbruch gewertet, sollte aber nicht das problem sein.
Die Doppelpunkte sind das Problem, ok, dann so:

filename:= 'c:\daten' + FORMAT(TODAY,0,9) + DELCHR(FORMAT(TIME,0,9),'=',':') + '.xml';

29. Mai 2007 14:43

das klappt... jetzt nur noch das minus raus habe ich so versucht...

DELCHR(FORMAT(TODAY,0,9),'-')

folgender Fehler

---------------------------
Microsoft Business Solutions-Navision
---------------------------
Der Inhalt '-' von DELCHR Parameter Nr. 2 ist ungültig.


So jetzt stellt sich nur die Frage mit dem Filter...

29. Mai 2007 14:49

Das Minus kann eigentlich drinbleiben, um es zu entfernen, muss vor dem ,'-' noch ein ,'=' eingefügt werden. also :

filename:= 'c:\daten' + DELCHR(FORMAT(TODAY,0,9),'=','-') + DELCHR(FORMAT(TIME,0,9),'=',':') + '.xml'

siehe dazu auch die Onlinehilfe des DELCHR-Befehls

29. Mai 2007 14:53

wenn ich auf meine Tabelle im XMLPort einen TableView Filter setze...

WHERE(Vorgangscode=FILTER(LOCAL))

... dann schreibt er die Datei mit keinem Inhalt... obwohl definitiv Daten vorhanden sind.