使用dynamics NAV SOAP webservices创建新销售订单时,尝试创建多个行项目时出现以下错误。成功添加单行项目的订单信息。
错误-销售行已存在。标识字段和值:单据类型=‘订单’,单据号=‘1111’,行号=‘10000’
下面是我尝试过的代码:
$client = new SoapClient($soapWsdl, $options);
// Create order header
$create = new stdClass();
$sq = new stdClass();
$sq->OrderType = "Order";
$sq->OrderId = "1111";
$create->SalesOrderWS = $sq;
$result = $client->create($create);
$key = $result->SalesOrderWS->Key;
$update = new stdClass();
$sq->Key = $key;
$sq->CustomerID = "9999";
$salesLineList = new stdClass();
$salesLine = new stdClass();
$salesLine->Order_Type = 'Order';
$salesLine->OrderID = '1111';
$salesLine->LineType = 'Item';
$salesLine->OrderLineNo = '10000';
$salesLineList->Sales_Order_Lines_WS[0] = $salesLine;
$sq->SalesOrderLinesWS = $salesLineList;
$salesLine = new stdClass();
$salesLine->Order_Type = 'Order';
$salesLine->OrderID = '1111';
$salesLine->LineType = 'Item';
$salesLine->OrderLineNo = '20000';
$salesLineList->Sales_Order_Lines_WS[1] = $salesLine;
$sq->SalesOrderLinesWS = $salesLineList;
$update->SalesOrderWS = $sq;
$result = $client->Update($update);当然,这里遗漏了一些东西,但无法识别问题。
谢谢。
发布于 2020-08-01 06:18:57
在NAV中,Sales Line表有一个由3个字段组成的主键:
系统不接受重复,以上组合必须是唯一的。行号:是使行号唯一的任意整数,可以包含任何数字。然而,按照惯例,行号通常以10000为增量给出,即第一行是10000,第二行是20000,依此类推。
我不是PHP专家(事实上我几乎一无所知),但我在上面的代码中看不到您在编写销售行时设置行号。因此,第一行插入将起作用,但是接下来的行将导致重复。我建议在写销售线的时候,包括唯一的行号。对于你写的每一行,它都能正常工作。edd
发布于 2021-05-26 21:59:11
我不是PHP专家,但我相信这行代码实际上调用了创建这些行的web服务:
$sq->SalesOrderLinesWS = $salesLineList;第一次$salesLineList包含一个带有OrderLineNo = 10000的元素。第二次$salesLineList包含两个元素-一个包含OrderLineNo = 10000,另一个包含OrderLineNo = 20000。
这意味着第二个调用将尝试插入10000行,这是不可能的,因为它已经在那里了。
因此,我建议您删除第一个调用,保留第二个调用:
$salesLine = new stdClass();
$salesLine->Order_Type = 'Order';
$salesLine->OrderID = '1111';
$salesLine->LineType = 'Item';
$salesLine->OrderLineNo = '10000';
$salesLineList->Sales_Order_Lines_WS[0] = $salesLine;
$salesLine = new stdClass();
$salesLine->Order_Type = 'Order';
$salesLine->OrderID = '1111';
$salesLine->LineType = 'Item';
$salesLine->OrderLineNo = '20000';
$salesLineList->Sales_Order_Lines_WS[1] = $salesLine;
$sq->SalesOrderLinesWS = $salesLineList;https://stackoverflow.com/questions/63199305
复制相似问题