XML Daten an einen Webservice senden

20. Februar 2012 00:12

Hallo zusammen!

Ich habe einen Webservice(NAV-Server(2009)) auf dem eine Codeunit mit einer Funktion "ImportOrder" ( Parameter "inText"( XML-Port) ) bereitgestellt ist.

Diese Funktion soll von einem NAV-Client eine XML-Datei erhalten und mit dem XML-Port übernehmen....

Wenn ich den u.s. Code aufrufe erhalte ich die Meldung :
Imported XML cannot validate with the schema: Das Element 'Root' in Namespace 'urn:microsoft-dynamics-nav/xmlports/x90500' hat ein ungültiges untergeordnetes Element 'Bestellung' in Namespace 'urn:microsoft-dynamics-schemas/codeunit/Capitalize'. Erwartet wurde die Liste möglicher Elemente: 'Bestellung' in Namespace 'urn:microsoft-dynamics-nav/xmlports/x90500'

beispiel.png

Code:
CREATE(xmldoc,TRUE,TRUE);

xmlstring :=
  '<Soap:Envelope xmlns:Soap="http://schemas.xmlsoap.org/soap/envelope/">' +
    '<Soap:Body>' +
      '<ImportOrder xmlns="urn:microsoft-dynamics-schemas/codeunit/ReadOrder">' +
         '<inText>' +
            '<Root>' +
              '<Bestellung>' +
                '<Nr> 2 </Nr>' +
              '</Bestellung>' +
            '</Root>' +
         '</inText>' +
      '</ImportOrder>' +
    '</Soap:Body>' +
  '</Soap:Envelope>';

xmldoc.loadXML(xmlstring);

CREATE(xmlhttp, TRUE, TRUE);
xmlhttp.open('POST',URL,FALSE);
xmlhttp.setRequestHeader('Content-type','text/xml; charset=utf-8');
xmlhttp.setRequestHeader('SOAPAction','ImportOrder');
xmlhttp.send(xmldoc);


Könnt Ihr mir da einen Tipp geben voran das liegen kann oder wie man XML-Dateien an einen Webservice sendet?

Vielen Danke für eure Hilfe!
Gruß
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von KAMKAMS am 20. Februar 2012 18:09, insgesamt 1-mal geändert.

Re: XML Daten an einen Webservice senden

20. Februar 2012 14:07

Hallo,

versuche doch einmal, den xml port so aufzubauen, dass Root die Table ID (also Element Table) bekommt und dann Bestellung ein Objekt der zuvor festgelegten Table ID ist.

Bsp

Root --> ElementTable Test
Bestellung --> ElementField von Table Test (also Test::Bestellung)

vielleicht hilft dir das ja, außer ich habe Dein Problem falsch verstanden.

Re: XML Daten an einen Webservice senden

20. Februar 2012 14:12

Hallo,

prüfe auch nochmals alle Einrückungen

Re: XML Daten an einen Webservice senden

20. Februar 2012 17:47

Hallo Stefan,

als erstes vielen dank für deine Unterstützung.

- habe das erste Element in "Tabelle" geändert. Es kommt immer noch die selbe Fehlermeldung.
- Einrückungen passen soweit

oder muss ich dass anstatt einer Codeunit über eine Page machen?

Ich bin langsam am verzweifeln :cry:

Gruß

Re: XML Daten an einen Webservice senden

21. Februar 2012 14:56

Hallo,

meiner Meinung nach brauchst Du keine Page.

Ich habe übersehen, dass Du die Table ja bei Bestellung zuweist. Das müsste auch passen. Allerdings weiß ich nicht wie sich das ganze mit Webservice verhält. Ich hatte einen XML - Port auch über Codeunit aufgerufen und ausgeführt. Wie gesagt, vielleicht liegt das Problem ja am Webservice.

Mit folgendem Tool kanns Du Dir xml ports generieren lassen, wenn du eine xml definition hast: NAVXmlPortGen1.2.0.1

Dann weißt du, dass zumindest der xml port in NAV passt.

Re: XML Daten an einen Webservice senden

24. Februar 2012 07:52

XmlPorts für WebService ist Performance-technisch ein Graus. Wenn Du planst viele Daten zu übermitteln ist eine String-Übergabe performanter.

Re: XML Daten an einen Webservice senden

29. Januar 2013 18:33

@Jan
was ist denn daran so schlimm? Wo liegt der Flaschenhals? Und was meinst Du mit String-Übergabe?

Volker

Re: XML Daten an einen Webservice senden

30. Januar 2013 15:22

vsnase hat geschrieben:@Jan
was ist denn daran so schlimm? Wo liegt der Flaschenhals? Und was meinst Du mit String-Übergabe?
Volker


Ich glaub er meint mittels BigVarText

Re: XML Daten an einen Webservice senden

30. Januar 2013 15:54

Na ja, das einzige, das dort zu Performance drin steht ist das übliche, dass es auf die Keys ankommt. Aber das ist doch jetzt nichts spezielles in Bezug auf XMLPorts in Webservices.

Volker

Re: XML Daten an einen Webservice senden

30. Januar 2013 16:05

Wir hatten auch angedacht statt eigener Verarbeitung einen XMLport zu nehmen.
Das Ganze hatte sich relativ schnell erledigt.
Der XMLport brauchte ein Vielfaches an Zeit im Vergleich zur komplizierteren eigenen Verarbeitung.

Re: XML Daten an einen Webservice senden

30. Januar 2013 16:09

Darf ich mal fragen was Ihr da verarbeitet? Artikel, Aufträge, ...?

Volker

Re: XML Daten an einen Webservice senden

30. Januar 2013 16:37

Artikelstammdaten.
Das ist ohne xmlport gelöst.

Die Lösung ist aber generisch und lässt sich auch entsprechend auf Aufträge ausweiten. (ohne zusätzlichen xmlport pro Übermittlungsart)