[gelöst] DataPort Ausgabe

23. September 2009 14:20

Ich habe zu einem DataPort 2 Fragen (mal wieder...).

Wie kann ich eine Datei nicht als txt sondern als csv ausgeben?

Meine Ausgabe des DataPorts sieht wie folgt aus:
Artikel 1: Wert1,Wert2,Wert3 usw.
Artikel 2: Wert1,Wert2,Wert3 usw.

Jetzt die Frage:
Ich würde gerne in die ersten 3 Zeilen einen festen Text schreiben und erst danach sollen die ganzen Infos in die Spalten eingetragen werden.

Ich habe mal als Beispiel meine Zieldatei angehängt als Muster. (sollte eine csv sein!)
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von misterelektro1981 am 24. September 2009 08:07, insgesamt 1-mal geändert.

Re: DataPort Ausgabe

23. September 2009 14:43

Als csv?
Im Feld FieldSeparator einfach das ';' (Semikolon) angeben.

Fester Text wie eine Überschrift?
1. Ein neues DataItem einfügen (über dem Vorhandenen), Tabelle Integer
2. Dataportfields mit den Text füllen (den Text in Hochkommas!)
3. Eine neue Variable vom Typ Integer, z.B. Zähler
4. Code im Trigger "Integer - OnAfterExportRecord" einfügen, das
a. "Zähler" immer um eins hochgezählt wird, und
b. Wenn Zähler >= der Anzahl Zeilen ist, ein Currdataport.BREAK machen (sonst gibt es eine Endlosschleife!)

** Edit by Mikka 1. **
Da du 3 Zeilen ausgeben willst, gehe ich davon aus, das es unteschiedlicher Text sein soll. Daher die DataPortFields mit Variablen belegen und diese Dynamsich im Code zuweisen (je nach dem welche Zählernummer gerade aktuell ist).

** Edit by Mikka 2. **
Ergänzend hierzu möchte ich dich auch diesen Beitrag von Marc Teuber (Navision24) aufmerksam machen:
Spaltenüberschriften exportieren
Im Ansatz ist dieses Ähnlich, jedoch statt wie bei mir unter Punkt 4. angegeben mit einem BREAK zu arbeiten, benutzt er das Propertie "DataItemTableView" und grenzt die Tabelle Ganzzahl (integer) auf den Wert 1 ein. (Somit wird nach einer Iteration die Verarbeitung auf dem DataItem abgebrochen)

Re: DataPort Ausgabe

23. September 2009 15:08

Ein ; steht bereits im Feld Field Separator, es kommt aber eine txt Datei heraus.

Das ist mein Code:
Code:
Zähler := Zähler + 1;
RecCount := 0;
if Zähler > RecCount then
currdataport.break;


Momentan geht es, jedoch kommen die 3 Texte in einer Zeile durch ein Semikolon getrennt heraus.

Re: DataPort Ausgabe

23. September 2009 15:39

misterelektro1981 hat geschrieben:Ein ; steht bereits im Feld Field Separator, es kommt aber eine txt Datei heraus.
Das ist mein Code:
Code:
Zähler := Zähler + 1;
RecCount := 0;
if Zähler > RecCount then
currdataport.break;

Momentan geht es, jedoch kommen die 3 Texte in einer Zeile durch ein Semikolon getrennt heraus.


txt-Datei?
Meinst du vom Aufbau, oder von der Dateiendung?
Der Inhalt muß ein ; enthalten, wenn du dieses in den Properties drin hast. (Sind die Field...Delemiter = <None>?)

Wenn du die Dateiendung meinst, müsstest du das Propertie Filename mit einem String füllen, z.B.
C:\Dokumente und Einstellungen\Mikka\Desktop\DP_Test.csv
(Soll das ganze mit Dateidialog sein, müsste die Requestform angepasst werden und Filename per Variable gefüllt werden. (Aber bitte nicht in diesem Beitrag -->Evtl. mal im Forum suchen, oder Hier: Navision24))
(Wenn ich oder die meisten anderen von csv sprechen, meinen wir den Dateiaufbau, nie die Dateiendung!)

Sorry, ich habe mich etwas Missverständlich ausgedrückt:
Code:
Zähler := Zähler + 1;
RecCount := 0;                 // Kanste machen, muß aber nicht
// if Zähler > RecCount then
IF  Zähler > 3 THEN          // Hier die Anzahl Kopfzeilen direkt eintragen
  CurrDataport.BREAK;


Bitte beachte auch in meinem vorherigen Beitrag meine nacheditierten Zeilen!

Re: DataPort Ausgabe

23. September 2009 15:53

Ja, ich meien die Ausgabe in eine csv Datei.

Sekunde versuche gerade noch ein kleines Problem zu lösen....

Re: DataPort Ausgabe

24. September 2009 06:56

Wollte gestern noch schrieben, aber der Rechner wollte nicht (Serverabsturz).

Mit diesem Code:
Code:
Zähler := Zähler + 1;
IF Zähler > 3 THEN
CurrDataport.BREAK;

IF Zähler = 1 THEN
Text1 := 'class;shortname;longname';

IF Zähler = 2 THEN
Text2 := 'Header';

IF Zähler = 3 THEN
Text3 := '# 2 von 3 automatisch erzeugten Zeilen für den';


Text1/2/3 sind gl. Textvariablen.

Ergebnis:
;;
Text1;;
Text1;Text2;
Text1;Text2;Text3

Es soll ja so aussehen:
Text1
Text2
Text3

Was muss ich denn hier jetzt ändern?

Re: DataPort Ausgabe

24. September 2009 08:01

misterelektro1981 hat geschrieben:Was muss ich denn hier jetzt ändern?


Zunächst den Code auf den "Integer - OnBeforeExportRecord" Export Trigger verschieben.
(Es soll ja eine "Vorverarbeitung" stattfinden befor der DS exportiert wird, habe ich gestern falsch angegeben. *Sorry*)

Das Ergebnis ist Erwartungsgemäß, wie im Code geschrieben (DataItem - Integer):
In der ersten Iterartion wird Text1 zugewiesen, bei der zweiten Text2 usw.
Du hast drei Felder angegeben "Text1", "Text2" und "Text3".
:greenarrow: Beachte: Die Datatportfields sind der Zeilenaufbau!

Was du benötigst ist eine Variable "Text1", die pro Iteration neu zugewiesen wird.
Also, wenn 1 dann Text1 = ... usw.

Re: DataPort Ausgabe

24. September 2009 08:06

Danke, ich habe es jetzt auch vesrstanden was hier gemacht wurde.