使用以下代码在基于“销售订单”创建“商品履行”记录时遇到问题。
$objx = array();
$objx = new InitializeRecord();
$objx->type = "itemFulfillment";
$objx->reference->type = "salesOrder";
$objx->reference->internalId = 7793877; // ID of sales order
$request = new InitializeListRequest();
$request->initializeRecord = $objx;
$response = $service->initializeList($request);
但是给出以下错误消息:
[code] => VALID_LINE_ITEM_REQD
[message] => You must have at least one valid line item for this transaction.
[type] => ERROR
我已经在线使用了其他示例,并且似乎总是以相同的错误消息结尾。我在Netsuite中启用了高级库存管理。
更新16/04/2019:
第一次查看了套件脚本,并设法将一些代码组合在一起作为测试,以使用nlapiTransformRecord将销售订单转换为项目履行。但是,与此同时也得到相同的错误消息。
var soId = nlapiGetRecordId();
var ifRec = nlapiTransformRecord('salesorder', soId, 'itemfulfillment');
var lcounttwo = ifRec.getLineItemCount('item');
for (var i = 1; i <= lcounttwo; i++){
ifRec.selectLineItem('item', i);
}
nlapiSubmitRecord(ifRec);
答案 0 :(得分:0)
不太确定它的PHP方面,但是在Java中,可以按以下步骤进行操作。请注意,第一步是使用initialize
调用获取项目履行记录,然后按常规保存它。将每一行标记为可实现(itemReceive
)的步骤是SuiteTalk和Suitescript共有的。
ReadResponse initFF = nsClient.getPort().initialize(new InitializeRecord(InitializeType.itemFulfillment, new InitializeRef(null, InitializeRefType.salesOrder, soId, null), null));
ItemFulfillment ff = (ItemFulfillment)initFF.getRecord();
ItemFulfillment ff = (ItemFulfillment)initFF.getRecord();
for(ItemFulfillmentItem ffItem : ff.getItemList().getItem()){
ffItem.setItemReceive(Boolean.TRUE);
}
ff.setShipStatus(ItemFulfillmentShipStatus._shipped);
System.err.println("adding fulfillment");
WriteResponse ffResp = nsClient.getPort().add(ff);
if(!ffResp.getStatus().isIsSuccess()){
System.err.println(nsClient.getStatusDetails(ffResp.getStatus()));
fail("Unable to add item fulfillment");
}
因此您拨打的电话似乎有误。如果您使用的是NS提供的PHPtoolkit,那么您可以这样做:
$service->initialize($objx);
相应的Suitescript要求您遍历项目行并将列值itemreceive设置为true。所以在您的循环ifRec.setCurrentLineItemValue('item', 'itemreceive', 'T');
我写的一些旧的.php如下所示,并且似乎没有itemReceive部分就可以工作。尽管在尝试提交履行之前,它仍然会从Initialize调用中检索履行记录:
$initRefFields = array('internalId' => $soId, 'type' => 'salesOrder');
$initRef = new nsComplexObject('InitializeRef');
$initRef -> setFields($initRefFields);
$initRecFields = array('reference' => $initRef, 'type' => 'itemFulfillment');
$initRec = new nsComplexObject('InitializeRecord');
$initRec -> setFields($initRecFields);
$readReponse = $nsClient -> initialize($initRec);
if($readReponse -> isSuccess) {
$itemFulfillment = $readReponse -> record;
... manipulate lines
$addResponse = $nsClient -> add($itemFulfillment);
}