Wenn ich einen Salesorder mit Multi DocumentDetails in PHP zu erstellen, hier ist mein CodeAcumatica API erstellen Salesorder mit Multi DocumentDetails Reihe
$SO301000Submit->commands = array
(
$acumatica->prepareValue("SO", $SO301000GetSchema->OrderSummary->OrderType),
$SO301000GetSchema->Actions->Insert,
$acumatica->prepareValue("ACTIVESTAF", $SO301000GetSchema->OrderSummary->Customer),
$SO301000GetSchema->DocumentDetails->ServiceCommands->NewRow,
$acumatica->prepareValue("HQ", $SO301000GetSchema->DocumentDetails->Branch),
$acumatica->prepareValue("AALEGO500", $SO301000GetSchema->DocumentDetails->InventoryID),
$acumatica->prepareValue("WHOLESALE", $SO301000GetSchema->DocumentDetails->Warehouse, true),
$SO301000GetSchema->DocumentDetails->ServiceCommands->NewRow,
$acumatica->prepareValue("VA", $SO301000GetSchema->DocumentDetails->Branch),
$acumatica->prepareValue("AAPOWERAID", $SO301000GetSchema->DocumentDetails->InventoryID),
$acumatica->prepareValue("RETAIL", $SO301000GetSchema->DocumentDetails->Warehouse, true),
$SO301000GetSchema->Actions->Save,
$SO301000GetSchema->OrderSummary->OrderNbr
);
$result = $acumatica->client->SO301000Submit($SO301000Submit);
Es wird der Fehler
System.Web.Services zurückzukehren. Protocols.SoapException: Der Server konnte die Anforderung nicht verarbeiten. ---> System.NullReferenceException: Objektreferenz wurde nicht auf eine Instanz eines Objekts gesetzt. bei PX.Api.SyImportContext.ParseCommand (SyCommand cmd) bei PX.Api.SyExportContext.ParseCommand (SYMappingField Feld) bei System.Linq.Enumerable.WhereSelectArrayIterator
2.MoveNext() at System.Collections.Generic.List
1..ctor (IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 Quelle) bei PX. Api.SyExportContext..ctor (SYMapping Mapping, IEnumerable1 fields, String[] providerFields, Dictionary
2 viewFilters, Boolean BreakOnError, Start Int32, zählen Int32, Wörterbuch2 selectorViews, String rowFilterField) at PX.Api.ScreenUtils.Submit(String screenId, Command[] commands, SchemaMode schemaMode, PXGraph& graph, String& redirectContainerView, String& redirectScreen, Boolean mobile, Dictionary
2 viewFilters) bei PX.Api.Services.ScreenService.Submit (String id, IEnumerable1 commands, SchemaMode schemaMode, Boolean mobile, PXGraph& forceGraph, String& redirectContainerView, String& redirectScreen, Dictionary
2 viewFilters) bei PX.Api.Services.ScreenService.Submit (String-ID, IEnumerable`1-Befehle, SchemaMode schemaMode) bei PX.Api.Soap.Screen.ScreenGate.Submit (Command [] -Befehle) --- E nd der inneren Ausnahmestapelüberwachung ---
Aber wenn ich reduzieren Code mit einzelnen DocumentDetails wie folgt:
$SO301000Submit->commands = array
(
$acumatica->prepareValue("SO", $SO301000GetSchema->OrderSummary->OrderType),
$SO301000GetSchema->Actions->Insert,
$acumatica->prepareValue("ACTIVESTAF", $SO301000GetSchema->OrderSummary->Customer),
$SO301000GetSchema->DocumentDetails->ServiceCommands->NewRow,
$acumatica->prepareValue("HQ", $SO301000GetSchema->DocumentDetails->Branch),
$acumatica->prepareValue("AALEGO500", $SO301000GetSchema->DocumentDetails->InventoryID),
$acumatica->prepareValue("WHOLESALE", $SO301000GetSchema->DocumentDetails->Warehouse, true),
$SO301000GetSchema->Actions->Save,
$SO301000GetSchema->OrderSummary->OrderNbr
);
$result = $acumatica->client->SO301000Submit($SO301000Submit);
Dann ist alles in Ordnung, ein Salesorder erstellt wird.
Hier Funktion prepareValue:
public function prepareValue($value, $command, $needcommit = false, $ignore = false)
{
$value_command = new ObjectDocument\Value();
$value_command->Value = $value;
$value_command->LinkedCommand = $command;
if($needcommit) $value_command->Commit = true;
$soapvar = new \SoapVar($value_command, SOAP_ENC_OBJECT, "Value", "http://www.acumatica.com/generic/");
return $soapvar;
}
Ich weiß nicht, warum? Bitte helfen Sie mir, diesen Fall zu erklären.
Wir haben versucht, den gleichen Satz von Befehlen hier mit einer C# Konsolenanwendung, und es funktionierte. Ich vermute, dass die SOAP-Nachricht, die von PHP gesendet wird, etwas anders ist, was unseren Server zum Absturz bringt. – Gabriel
Kannst du dir auch die generierte SOAP-Nachricht ansehen und sie hier einfügen? Es wird uns erlauben, zu sehen, was fehlt und was mit unserer Botschaft zu tun hat. – Gabriel
Haben Sie eine Lösung gefunden? – Gabriel