"XML DOM Management" Text länger als 1024 Zeichen [gelöst]

2. Februar 2009 19:54

Zur Zeit bin ich einen XML Export mit Hilfe der Code Unit "XML DOM Management" am schreiben. Leider habe ich das Problem das ich den einzelnen Knoten kein Text zuweisen kann, der länger als 1024 Zeichen ist. XMLPorts möchte ich umgehen da ich dynamisch leere Knoten ausschalten möchte. Gibt es eine Möglichkeit dem Knoten Textinhalte zu übergeben die länger sind als 1024 Zeichen?

Gruß Dominik
Zuletzt geändert von Beagle am 9. Februar 2009 17:18, insgesamt 1-mal geändert.

Re: "XML DOM Management" Textinhalt länger als 1024 Zeichen

2. Februar 2009 20:46

Hallo Beagle,

wenn du die AddElement-Routine der genannten Codeunit arbeitest, wirst du bereits bei mehr als 250 Zeichen scheitern und ohne einen Eingriff in diese Codeunit wird sich daran nichts ändern.

Wenn du stattdessen ein paar Automation-Variablen verwendest (DOMDocument, IXMLDOMElement, IXMLDOMAttribute), dann wird die Barriere sehr viel höher liegen.

Beste Grüße
Falk

EDIT:
Hab übersehen, dass dein Thread bei NAV2009 steht, da kann die Grenze natürlich höher liegen, als 250. Weiß ich grad nicht, hab grad keine 2009-DB zur Hand.

Re: "XML DOM Management" Textinhalt länger als 1024 Zeichen

7. Februar 2009 18:58

Hallo Beagle,
habe dein Problem mit 4.0 SP2 getestet. Mit 2009 habe noch nicht gearbeitet. Ich habe CodeUnit 6224 „XML DOM Management“ in 4.0 SP2 und in 5.0 SP1 verglichen. Die sind identisch. In 2009 sollte die Funktionalität mindestens nicht reduziert werden. In dieser CodeUnit steht eigentlich nicht viel zur Verfügung. Sicherlich benutzt du die Funktion AddElement. Dem Knoten wird der Text durch den Parameter NodeText übergeben. Dieser konnte bis 1024 angepasst werden.
Für den Funktionsaufruf müssen die weiteren Parameter außer der Funktion definiert werden, davon auch CreatedXMLNode. Direkt nach dem Funktionsaufruf steht der neu angelegte Knoten zur Verfügung. Dann kann der Text direkt zugewiesen werden:
IF XMLDOMDocument.AddElement(CurrNode,'Knotenname','Kuku',’’,NewChild) > 0 THEN
EXIT;
NewChild.text := ‘111111111111111111111111111111111111111111111111111111111111’ +
‘111111111111111111111111111111111111111111111111111111111111111111111111111' +
‘111111111111111111111111111111111111111111111111111111111111111111111111111' +
‘111111111111111111111111111111111111111111111111111111111111111111111111111' +
… USW … ;

Die Grenze 1024 wurde spielend überschritten. Als ich über 2000 Zeichen testen wollte, habe ich die Fehlermeldung bekommen, dass nicht genügend Platz in C/AL-Stackspeicher zur Verfügung steht.

Ich hoffe, dass es dir hilft.

Viele Grüße
Michael

Re: "XML DOM Management" Textinhalt länger als 1024 Zeichen

9. Februar 2009 17:17

Hi,

das Problem habe ich nun mit dem folgenden Code gelöst:
Code:


      AddElement(CurrNode,'TempBeschreibung','','',NewChild);

      IF Beschreibung.FINDFIRST THEN
      BEGIN
       REPEAT

           CurrNode :=XmlDomDoc.createTextNode(Beschreibung.Text);
           NewChild.appendChild(CurrNode);

       UNTIL Beschreibung.NEXT=0;
      END;


mit diesem Code kann ich langen Text einem Element anfügen. Nachdem ich das Xml Dokument erstellt habe ändere ich mit Hilfe einer .Net dll das Element TempBeschreibung in ein Attribute und füge es dem entsprechenden Element an. TempBeschreibung wird dann gelöscht und das gewünschte Resultat ist erzielt.

Gruß Dominik