[Gelöst] XML-Export flexibel gestalten mit ofile.CREATE()

17. November 2009 16:12

Der Export der Daten mittels XML und Codeunit funktioniert einwandfrei. Wir möchten jedoch, dass der User den Pfad und Dateinamen der zu exportierenden Daten selbst bestimmen kann, wie dies beim Export mittels Dataports auch möglich ist. Bisher haben wir also im C/AL Editor und dort im OnRun Trigger den Pfad im ofile.CREATE('H:\usw.XML') festgelegt.
Vielen Dank
Manfred
Zuletzt geändert von MJonas am 19. Januar 2010 16:04, insgesamt 1-mal geändert.

Re: XML-Export flexibel gestalten mit ofile.CREATE()

29. Dezember 2009 15:53

Hallo Manfred,

wieso benutzt Ihr nicht die Funktion OpenFile der CU 412 um den Dateinamen auszuwählen?

Gruß
42

Re: XML-Export flexibel gestalten mit ofile.CREATE()

30. Dezember 2009 04:52

Hallo 42,

vielen Dank für den Tip. Musste mit deinem Tip noch etwas recherchieren. Meine Codeunit sieht nun folgendermaßen aus:

Code:
Root := USERID;
ofile.CREATE(FileDialog.OpenFile('Dateipfad....',Root,4,'.xml' + '|*' + '.xml',2));
ofile.CREATEOUTSTREAM(ostream);
XMLPORT.EXPORT(123456780,ostream);
ofile.CLOSE;
MESSAGE('XML-Port erfolgreich');


Funktioniert wunderbar. Vielen Dank.

Hab jetzt aber noch ein weiteres Problem. Ich möchte nur einen bestimmten Datensatz aus der Tabelle exportieren. Exportiert werden soll nur der Datensatz, dessen ID mit dem Anmeldenamen übereinstimmt. Die systemweite Variable dafür ist die USERID. Ich kann die USERID auch in einem Trigger des XMLPORT aufrufen und testweise über eine Messagebox ausgeben. Funktioniert einwandfrei. Nur jeglicher Versuch einen Filter zu setzten auf diese USERID funktioniert nicht. Nicht im Trigger, nicht in den Properties (SourceTableView). In den Proberties funktioniert es nur, wenn ich z.B. folgenden Code dort von Hand eingebe:

Code:
WHERE(User ID=CONST(SUPER))


Super ist eine definierte Rolle / User ID. Wenn ich SUPER durch die Variable USERID ersetze, wird kein Datensatz ausgelesen.

Wie kann man denn nun in einem XMLPort (Export) einen vernünftigen Filter setzten, den ich nicht von Hand jedesmal eingeben muss, sondern davon abhängt, welcher User sich jeweils am Client anmeldet?

Gibt es da eine Möglichkeit? Wäre schön, wenn du mir da auch helfen könntest.

Vielen Dank
Manfred

Re: XML-Export flexibel gestalten mit ofile.CREATE()

5. Januar 2010 12:37

Hallo Manfred,

hast Du schon mal eine Entwicklerschulung besucht bzw. Dich mit den entsprechenden Handbüchern beschäftigt? Mir scheint, dass Dir die grundsätzliche Vorgehensweise rund um das Filtern bzw. das Berechtigungskonzept nicht klar/bekannt ist.
Eine Benutzerrolle und eine UserID haben grundsätzlich solange nichts miteinander zu tun, bis einem Benutzer eine gewisse Rolle zugewiesen wurde.
Benutzer A kann also die Rollen Super, Test, Verkauf usw. besitzen. Rollenname und BenutzerID können zwar übereinstimmen, haben aber keine automatische Verbindung untereinander. Eine Rolle kann ja auch mehreren Benutzern zugewiesen werden. (z.B. Benutzer A, B und C können die Rolle Super haben)

Nun zum Export:
Nehmen wir mal an das Tabellenfeld mit der Benutzerkennung heißt Benutzer, dann sieht die Filterung so aus:

Code:
Tabellenname.setrange(Benutzer, userid);


Gruß

42

Re: XML-Export flexibel gestalten mit ofile.CREATE()

11. Januar 2010 17:23

Hallo 42,

das ist mir alles klar. Hab mich aber leider vertan mit den Begrifflichkeiten. Die User ID Super hat auch die Rolle Super zugewiesen bekommen.

In einer Tabelle XY haben wir das Attribut "ID-Teilnehmer" mit den weiteren Attributen wie Name, Adresse, usw. Der User bekommt seinen Anmeldenamen mitgeteilt, mit dem er sich nun anmeldet. Über ein Formular werden ihm nun über den Filter Setrange usw. nur seine Daten angezeigt. Der User gibt nun über das Formular weitere Daten in die Tabelle XY ein, die wir über den XML - Export auslesen und in einer Datei Max Mutermann speichern möchten. Setrange funktioniert aber nicht in der Codeunit und auch nicht in einem Trigger des XMLport.

Gelöst: http://www.msdynamics.de/viewtopic.php?f=7&t=9239

Gruß und Danke Manfred