我的目标是回应外部系统中的已挑选事件并标记SalesOrder" Picked"在NetSuite中,稍后在外部系统中响应包事件并标记SalesOrder" Packed"在NetSuite。
我正在使用SuiteTalk示例应用程序中的代码。我首先获得现有ItemFulfillment记录的副本,然后填充新的ItemFulfillment记录。
当我回复选择事件时,代码效果很好。不幸的是,当我回复pack事件时,当我尝试获取SalesOrder的现有ItemFulfillment Record的副本时,我收到此错误。
"此交易必须至少有一个有效的订单项。"
我认为NetSuite抱怨没有更多的订单项可供使用,所以当我将状态设置为已选中时,我尝试不添加任何ItemFulfillmentItem,但NetSuite也不喜欢这样。
我能找到的唯一文档引用了任务ID,/ app / accounting / transactions/itemshipmanager.nl?type = pack。这种方法似乎可信,因为当我提起Fiddler时,这就是我点击" Mark Packed"用户界面中的按钮。但是,我宁愿不介绍与NetSuite服务器通信的不同范例。
我发现如果我在ItemFulfillment中设置shipStatus和shipStatusSpecified,NetSuite将让我直接进入Pack状态。
我是否可以仅使用NetSuite SuiteTalk通过拾取和打包状态移动SalesOrder?
答案 0 :(得分:1)
我错误地解决了这个问题。正确的方法是找到现有的ItemFulfillment并将其状态更改为packed。而不是将项目添加到新的打包项目实现中。
这是为SalesOrder找到现有ItemFulfillment的搜索:
TransactionSearch xactionSearch = new TransactionSearch
{
basic = new TransactionSearchBasic
{
type = new SearchEnumMultiSelectField
{
@operator = SearchEnumMultiSelectFieldOperator.anyOf,
operatorSpecified = true,
searchValue = new System.String[]
{
"_itemFulfillment"
}
},
createdFrom = new SearchMultiSelectField
{
@operator = SearchMultiSelectFieldOperator.anyOf,
operatorSpecified = true,
searchValue = new RecordRef[1]
{
new RecordRef
{
internalId = salesOrderInternalId,
type = RecordType.salesOrder,
typeSpecified = true
}
}
}
}
};
这是更新ItemFulfillment的代码:
ItemFulfillment update = new ItemFulfillment { internalId = existing.internalId, shipStatus = status, shipStatusSpecified = true };
WriteResponse res = _service.update(update);