12. Oktober 2015 14:20
ERP EXTERN YYYYMMDDHHMMSS
12. Oktober 2015 15:12
12. Oktober 2015 15:20
MSNAVLerner hat geschrieben: Ist die feste Positionsdefinierung im XML-Port überhaupt möglich?
12. Oktober 2015 15:34
13. Oktober 2015 13:48
9. Februar 2016 10:57
9. Februar 2016 11:35
9. Februar 2016 12:08
Der XMLPort im TextFile-Modus würde wohl auch gehen.
10. Februar 2016 09:35
fiddi hat geschrieben:Der XMLPort im TextFile-Modus würde wohl auch gehen.
wenn ich mich nicht irre aber nicht in NAV 4
Gruß Fiddi
10. Februar 2016 11:40
FDestination.CREATE(FileNameDestination);
FDestination.TEXTMODE(TRUE);
FSource.OPEN(FileNameSource);
//OS004s os.jgl
FSource.TEXTMODE(FALSE);
FSource.CREATEINSTREAM(FInStream);
//OS004e os.jgl
OldContent := '';
D.OPEN(TEXT001);
L_StartTime:=TIME;
FSource.SEEK(0);
REPEAT
//OS004s os.jgl
//handle the file transfer with instream/outstream. More complicated, but so we can get around the 1024C limit and varying text
//delimiters.
L_StartPos := FSource.POS;
FInStream.READTEXT(Content);
L_EndPos := FSource.POS;
L_ContentLen := STRLEN(Content);
L_HasUnprintablechars := L_EndPos-L_StartPos > L_ContentLen;
IF L_HasUnprintablechars THEN BEGIN
FSource.SEEK(L_StartPos+L_ContentLen);
FOR k:=1 TO L_EndPos-L_StartPos-L_ContentLen DO
FSource.READ(L_UnprintableChars[k]);
END;
OriginContent := Content;
//Test for the RDLDATA section. Pass through the following lines (which can easily exceed the 1024C limit) until we find
//closing parantheses.
IF STRPOS(Content,SectionRDLDATA)=1 THEN BEGIN
FDestination.WRITE(Content);
FDestination.SEEK(FDestination.POS-2);
IF L_HasUnprintablechars THEN BEGIN
FDestination.TEXTMODE(FALSE);
FOR k:=1 TO L_EndPos-L_StartPos-L_ContentLen DO
FDestination.WRITE(L_UnprintableChars[k]);
FDestination.TEXTMODE(TRUE);
END;
REPEAT
CLEAR(Content);
L_StartPos := FSource.POS;
FInStream.READTEXT(Content);
L_EndPos := FSource.POS;
L_ContentLen := STRLEN(Content);
L_HasUnprintablechars := L_EndPos-L_StartPos > L_ContentLen;
IF L_HasUnprintablechars THEN BEGIN
FSource.SEEK(L_StartPos+L_ContentLen);
FOR k:=1 TO L_EndPos-L_StartPos-L_ContentLen DO
FSource.READ(L_UnprintableChars[k]);
END;
FDestination.WRITE(Content);
FDestination.SEEK(FDestination.POS-2);
IF L_HasUnprintablechars THEN BEGIN
FDestination.TEXTMODE(FALSE);
FOR k:=1 TO L_EndPos-L_StartPos-L_ContentLen DO
FDestination.WRITE(L_UnprintableChars[k]);
FDestination.TEXTMODE(TRUE);
END;
UNTIL STRPOS(Content,SectionRDLCLOSE)=1;
10. Februar 2016 12:39
10. Februar 2016 13:09
10. Februar 2016 13:49
fiddi hat geschrieben:[…]NAV4 in DE intern mit Codepage 450 arbeitet
10. Februar 2016 13:52
Bislang habe ich immer in Codepage 850 konvertiert
10. Februar 2016 14:12
fiddi hat geschrieben:Also, wenn ich mir das so anschaue, würde ich dir raten, das ganze in NAV 4 mit einem Dataport zu lösen.
Den Dataport später auf NAV 2013+ in einen Report zu konvertieren ist kein Hexenwerk, erfordert etwa 100 bis 150 Zeilen Code, den man größtenteils für andere Dataports recyceln kann, und es funktioniert dann auch noch wie im CC gewohnt mit der Abfrage des Dateinamens in der Requestpage.
Der große Vorteil der späteren NAV- Versionen ist der Umgang mit max. 2GB großen Textvariablen, die dort keine Probleme bereiten, und Problemlos aufgeteilt werden können.
READTEXT ignoriert so viel ich weiß auch in NAV4 keine Sonderzeichen (außer CRLF vielleicht, habe jetzt mit TEXTMODE noch nicht experimentiert). Ebenso wäre ein Versuch mit READ interessant, mit dem man binär in eine Textvariable einlesen kann, auch mit Sonderzeichen.
Was man bei der ganzen Sache allerdings auch berücksichtigen muss, ist das NAV4 in DE intern mit Codepage 450 arbeitet, und die eingelesene Datei evtl. Ansi oder etwas anderes ist, und konvertiert werden muss.
10. Februar 2016 14:22
10. Februar 2016 15:28
jglathe hat geschrieben:Und wenn Du das von einem NAS auch machen willst... Dataport *sollte* gehen,
You cannot use C/AL variables of type DATAPORT when running the Microsoft Business Solutions-Navision Application Server.
10. Februar 2016 15:39
10. Februar 2016 15:40
Wie wird das bei Dataport ohne Separatoren gehen?
Die Importfunktion soll nämlich noch von einem NAS gesteuert werden.
10. Februar 2016 16:00
jglathe hat geschrieben:Hallo MSNAVLerner,
da eine Textvariable maximal 1024 Zeichen haben kann, und wenn ich mich nicht irre ein Array auch, fällt bei 3000 Zeichen Satzlänge ein ReadText() des ganzen Satzes aus. Wie wärs mit binary, anfahren der Dateiposition mit pos, byteweise lesen in Textvariable (mache ich im Beispielcode ja auch)? Damit kannst Du jedes Feld einzeln betrachten.
Und wenn Du das von einem NAS auch machen willst... Dataport *sollte* gehen, aber wäre wahrscheinlich nicht meine erste Wahl. Codeunit oder ProcessingOnly-Report.
ERP EXTERN YYYYMMDDHHMMSS A123456789
ERP EXTERN YYYYMMDDHHMMSS A123456789 15
10. Februar 2016 16:01
fiddi hat geschrieben:Wie wird das bei Dataport ohne Separatoren gehen?
Der Dataport kennt das FileFormat "Fixed"Die Importfunktion soll nämlich noch von einem NAS gesteuert werden.
Was den Dataport wiederum ausschließt
Was benutzt Ihr denn für eine technische NAV- Umgebung?
Gruß Fiddi
10. Februar 2016 16:04
Unseres leider nicht. V 4.00 SP2
10. Februar 2016 16:15
fiddi hat geschrieben:Unseres leider nicht. V 4.00 SP2
Ich meinte die Dataport- Properties, nicht die des Records
(Properties des letzten leeren Zeile unter den Records)
10. Februar 2016 16:42
10. Februar 2016 16:47
MSNAVLerner hat geschrieben:
Ich bin bei deinem Code einfach noch nicht ganz durchgestiegen. Wie würde beispielsweise die READ in Binärversion aussehen bei folgendem Beispiel?
Bezeichnung: Quelle
Länge: 10
Bezeichnung: Ziel
Länge: 10
Bezeichnung: Anlegezeit
Länge: 15
Bezeichnung: Auftragsnr.
Länge: 11
Bezeichnung: Auftragsposnr.
Länge: 3
- Code:
ERP EXTERN YYYYMMDDHHMMSS A123456789
ERP EXTERN YYYYMMDDHHMMSS A123456789 15