XMLPort Webservice

24. September 2015 14:37

Ich habe mir einen kleinen Webservice gebaut, der eine XMLDatei ins Nav importieren soll.

Das XML sieht wie folgt aus
Code:
<?xml version="1.0" encoding="ISO-8859-2"?>
<Auftraege>
<Auftrag Auftragsnummer="123" KostenstelleAuftrag="1700">
    <Arbeitsplatz Arbeitsplatznummer="1" KostenstelleArbeitsplatz="1700" Fertigstellungsmenge="0.00">
          <Mitarbeiter Mitarbeiternummer="021801" Mitarbeitername="ABC" Nettozeit="3:31" BuchungAnfang="2015061507:12" BuchungEnde="2015061511:13" />
    </Arbeitsplatz>
</Auftrag>
<Auftrag Auftragsnummer="456" KostenstelleAuftrag="1700">
    <Arbeitsplatz Arbeitsplatznummer="2" KostenstelleArbeitsplatz="1700" Fertigstellungsmenge="0.00">
          <Mitarbeiter Mitarbeiternummer="000757" Mitarbeitername="GDEF" Nettozeit="0:39" BuchungAnfang="2015062510:11" BuchungEnde="2015062510:50" />
    </Arbeitsplatz>
</Auftrag>
</Auftraege>


In der Zieltabelle ist 'Auftraege' nicht enthalten, dehalb schaut der XMLPort so aus:
2015-09-24_142614.jpg


Das ganze funktioniert aus der NAV Entwicklungsumgebung heraus auch ohne Probleme, so lange ich UseDefaultNameSpace auf 'No' lasse.
Stelle ich auf Yes, kommt beim Import die Meldung
'Das Element <Auftraege> kann in der Objektbeschreibung nicht gefunden werden.'

Will ich das ganze aber aus einem externen Programm (C#, .net) aufrufen, muss ich UseDefaultNameSpace auf Yes setzen, denn sonst seh ich meine WSDL nicht und kann den Webservice nicht in mein Programm einbinden.
Versuche ich es trotzdem mit 'No', kommt beim Import folgendes:
"{"Imported XML cannot validate with the schema: The element 'Auftraege' in namespace '<urn:microsoft-dynamics-nav/xmlports/PSPImport>' has incomplete content. List of possible elements expected: 'Auftrag' in namespace '<urn:microsoft-dynamics-nav/xmlports/PSPImport>'."}"

Ich bin doch nicht der erste, der sowas bauen will
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: XMLPort Webservice

24. September 2015 14:45

Wie sieht den ein EXPORT über die Entwicklungsumgebung aus, wenn UseDefaultNameSpace auf 'Yes' steht?

Re: XMLPort Webservice

24. September 2015 14:58

Der funktioniert.

Vielleicht liegts am Aufruf selbst... ich such mal noch ein wenig

Ich habe noch einen anderen Aufruf für den Import ausprobiert, da bekomme ich einen Error400, Ungültige Anforderung zurück

Re: XMLPort Webservice

24. September 2015 15:15

Dass er funktioniert habe ich erwartet. Aber wie sieht das XML dazu dann aus, wenn Namespaces verwendet werden? Eventuell must du deine Ausgangsdatei anpassen.

Re: XMLPort Webservice

24. September 2015 15:35

Wie komme ich denn da wieder an das XML? Ich bekomme nur eine Datenstruktur 'Auftraege' zurückgeliefert, in der alle Daten vorhanden scheinen.

Re: XMLPort Webservice

25. September 2015 07:06

Du startest einfach den XMLport im Modus Export und speicherst die Datei ab. Dann siehst du ja den Unterschied zwischen mit und ohne Namespaces.

Ein XML mit Namespaces ist für einen Parser grundsätzlich unterschiedlich zu einem XML ohne Namespaces. Dein DE Import funktioniert mit UseDefaultNameSpace 'No', da dein Test-XML keine Namespace-Definition enthält.

Wenn du für dein externes Programm für die Generierung des WSDL Namespaces einschaltest (UseDefaultNameSpace 'Yes'), dann ist das erwartete Dokument unterschiedlich zu deiner Testdatei.

Deshalb benutze den Export mit UseDefaultNameSpace 'Yes', schau dir das erzeugte Dokument an und benutze für den Test per externem Programm dieses Format mit Namespaces.

Re: XMLPort Webservice

25. September 2015 08:45

Ach so, direkt aus dem Navision heraus.

Der einzige Unterschied ist
Fertigstellungsmenge="0,00" mit UseDefaultNameSpace:Yes
Fertigstellungsmenge="0.00" mit UseDefaultNameSpace:No

Ich bau mal schnell das xml um

Re: XMLPort Webservice

25. September 2015 09:05

Also in meinen XMLports führt diese Änderung dazu, dass mindestens in der Root Node eine Namespace-Definition vorhanden ist (xmlns). Ich kann mir nicht vorstellen, dass das bei dir anders ist.

Re: XMLPort Webservice

25. September 2015 09:14

Die ist da, aber bei beiden gleich:
<Auftraege xmlns="&lt;urn:microsoft-dynamics-nav/xmlports/PSPImport&gt;">

Re: XMLPort Webservice

29. September 2015 15:12

Mittlweile hab ich es ans Laufen bekommen.
Ich rufe nicht mehr direkt den XMLPort auf, sondern schicke eine BigText-Varible an die CodeUnit und bastel dort mit TempBlob einen Instream.
Schön und gut, die Daten landen auch in der Tabelle, aber die Umlaute und Sonderzeichen gehen unterwegs verloren.

Im XML Port habe ich ISO-8859-2 als Encoding eingestellt, bei UTF-8 bekomme ich eine Fehlermeldung, sobald der XMLPort auf ein Sonderzeichen stößt.
Wie bekomme ich die Umlaute in meine Tabelle?