Lange Textbausteine in XML

27. April 2020 15:31

Hallo zusammen,

ich stehe gerade ein wenig auf dem Schlauch und vielleicht kann mir ja das geballte Schwarmwissen hier weiterhelfen.

Schreibe aktuell elektronische Produktkataloge direkt über das XMLDom von NAV in eine XML-Datei (BMECat1.2), was auch sehr gut funktioniert.
Manko ist, dass ich auch Textbausteine mit ausleite ... bis 1024 Zeichen ist dies kein Problem.
Ist der Textbaustein länger als 1024 Zeichen, fällt das natürlich auf die Nase und es käme zum Error in der Erstellung der XML. Daher habe ich größere Textbausteine bisher immer übersprungen.

Jetzt sind aber leider die meisten Artikel so detailliert gepflegt worden, dass die Mehrheit mehr als 1024 Zeichen hat.

Habe es jetzt mit BIGTEXT probiert, mittels var.Addtext(Textbausteinzeile.text), aber wie bekomme ich dies jetzt an das XMLDom übergeben

Bisher läuft dies mittels

IF AddElement(CurrNode, 'DESCRIPTION_LONG', "Extended Text", '', NewChild) > 0 THEN EXIT;

Aber anstelle der Var "Extended Text" (Str:1024) kann ich keine BIGTEXT-Variable übergeben.

Vielen Dank für Anregungen.

Re: Lange Textbausteine in XML

28. April 2020 10:07

ggf. hilft dir das weiter
https://forum.mibuso.com/discussion/18062/xml-export-large-strings

Re: Lange Textbausteine in XML

7. Mai 2020 16:52

Ich hatte so ein Problem noch nicht, aber speichere lange Texte (das kann z.B. eine E-Mail Vorlage sein) in einer Tabelle in einem Blob Feld.

Dazu benötigt es auch nur 2 Funktionen in der Tabelle:

Text aus dem Blob holen:
Variablen.
Code:
Name   DataType   Subtype   Length
myText   Text      
StreamIn   InStream      
StreamReader   DotNet   System.IO.StreamReader.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
Encoding   DotNet   System.Text.Encoding.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   

Code:
Blob2Text() : Text
CALCFIELDS(BlobField);
IF NOT BlobField.HASVALUE THEN
  EXIT('')
ELSE BEGIN
  BlobField.CREATEINSTREAM(StreamIn);
  StreamReader := StreamReader.StreamReader(StreamIn,Encoding.UTF8,TRUE);
  myText := StreamReader.ReadToEnd;
  StreamReader.Close;
  EXIT(myText)
END;


Text in das Blob speichern:
Variablen:
Code:
Name   DataType   Subtype   Length
StreamOut   OutStream      
StreamWriter   DotNet   System.IO.StreamWriter.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
Encoding   DotNet   System.Text.Encoding.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   

Code:
Text2Blob(myText : Text)
CLEAR(BlobField);
IF myText <> '' THEN BEGIN
  BlobField.CREATEOUTSTREAM(StreamOut);
  StreamWriter := StreamWriter.StreamWriter(StreamOut,Encoding.UTF8);
  StreamWriter.Write(myText);
  StreamWriter.Flush;
  StreamWriter.Close;
END;



VG