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: Alles auswählen
'SalesOrder' => array(
'Sell_to_Customer_No' => '102425'
)
Folgende Anpassung wenn direkt eine Zeile mit eingetragen werden soll:
- Code: Alles auswählen
'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: Alles auswählen
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: Alles auswählen
'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: Alles auswählen
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: Alles auswählen
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!