SOAP Webservice - Problem beim Hinzufügen von SalesLines

2. März 2021 14:29

Hallo zusammen,

ich bin gerade dabei eine Webanwendung (PHP / SOAP) an NAV 2018 anzubinden. Dafür wurde mir die Page (42) SalesOrder als Webservice zur Verfügung gestellt.
Das Auslesen der Verkaufsaufträge (Read/Read Multiple) stellt kein Problem dar. Auch das Anlegen eines Verkaufsauftrages (Create) funktioniert teilweise.

Folgender "Basiscode" per SOAP übermittelt erzeugt eine neue SalesOrder und füllt auch die restlichen Header Felder richtig aus.
Code:
'SalesOrder' => array(
                'Sell_to_Customer_No' => '102425'
            )


Folgende Anpassung wenn direkt eine Zeile mit eingetragen werden soll:
Code:
'SalesOrder' => array(
                'Sell_to_Customer_No' => '102425',
                'SalesLines' => array(
                    'Sales_Order_Line' => array(
                        array(
                            'Type' => 'Item',
                            'No' => 12345,
                            'Unit_of_Measure_Code' => 'TSD',
                            'Unit_Price' => 1,
                            'Quantity' => 10,
                            'Location_Code' => 'LAGERORT'
                        )
                    )
                )
            )


Übermittle ich direkt eine SalesLine beim Create erhalte ich folgende Exception:
Code:
Fatal error: Uncaught SoapFault exception: [a:Microsoft.Dynamics.Nav.Types.Exceptions.NavCSideException] A transaction must be started before changes can be made to the database.


Das Merkwürdige ist: Die Exception bleibt beim folgenden Read der SalesOrder erhalten, verschwindet dann nach ein paar Minuten aber wie von allein. In NAV wird die SalesOrder inkl. SalesLine angelegt und kann auch direkt aufgerufen werden.

Generell bereitet das Ändern / Anlegen der SalesLines Schwierigkeiten:

Ich habe normalerweise mit NAV nicht viel zu tun und versuche mich gerade durch die Dokumentationen und Foren zu hangeln. Vielleicht habe ich hier aber auch auf Grund der mangelnden NAV Erfahrung einen Denkfehler.

Zum Hinzufügen der SalesLines nutze ich die UPDATE Funktion des Webservice SalesOrder und sende folgende Daten:

Code:
'SalesOrder' => array(
                'Key' => KEY_DER_SALES_ORDER,
                'SalesLines' => array(
                    'Sales_Order_Line' => array(
                        array(
                            'Document_No' => 'AB123456',
                            'Document_Type' => 'Order',
                            'Line_No' => 110000,
                            'Type' => 'Item',
                            'No' => 99999,
                            'Unit_of_Measure_Code' => 'TSD',
                            'Unit_Price' => 1,
                            'Quantity' => 10,
                            'Location_Code' => 'LAGERPLATZ123'
                        )
                    )
                )
            )


Im Auftrag sind bereits mehrere SalesLines enthalten, die höchste Line_No ist die 100.000.

Übergebe ich die Line_No 110.000 erhalte ich folgende Exception:
Code:
Uncaught SoapFault exception: [a:Microsoft.Dynamics.Nav.Service.WebMetadata.ServiceBrokerException] Field Line No. is readonly!


Übergebe ich keine Line_No ändert sich die Exception in:
Code:
Uncaught SoapFault exception: [a:Microsoft.Dynamics.Nav.Types.Exceptions.NavCSideDuplicateKeyException] The Sales Line already exists. Identification fields and values: Document Type='Order',Document No.='AB123456',Line No.='10000'


Es macht auch keinerlei Unterschied ob ich alle bisherigen SalesLines mit übergebe, oder nur die Neue, die hinzugefügt werden soll. Ich bin wirklich für jeden Tipp dankbar!

Re: SOAP Webservice - Problem beim Hinzufügen von SalesLines

2. März 2021 15:08

Gehst du über die Standard Page 46?
Dahingehend macht die Fehlermeldung, dass Line No read only ist sogar Sinn.

Die Daten über Pages zu schreiben finde ich ohne dies jemals via php gemacht zu haben allerdings ein wenig abenteuerlich.

Würde jetzt entweder die Pages angepasst dublizieren und diese ansprechen oder aber die Tabellen direkt ansprechen.

Re: SOAP Webservice - Problem beim Hinzufügen von SalesLines

2. März 2021 16:36

Ob PHP oder nicht ist ja letztendlich egal, der Zugriff erfolgt ja über die vom Webservice (SOAP / OData) bereitgestellten Funktionen.
Ich komme wie gesagt nicht aus dem Dynamics Bereich - aber warum ist die Nutzung der NAV-seitigen Webservices denn "abenteuerlich" - oder verstehe ich Dich hier falsch?

Re: SOAP Webservice - Problem beim Hinzufügen von SalesLines

2. März 2021 17:46

Da findet sich doch im Netz eigentlich recht viel:

https://docs.microsoft.com/de-de/archiv ... rder-again
https://docs.microsoft.com/de-de/archiv ... p1-and-rtm