我有这样的场景:系统A使用订单项创建发票并推送到NetSuite。以后可以修改系统A中的发票,其中更新或删除订单项并将其推回NetSuite。我们如何知道哪些订单项已被修改或删除?系统A应该发回一个行ID吗?在这种情况下,我试图找出如何获取订单项ID,但它没有返回值。
for (var x = 1; x <= itemcount; x++)
{
var lineid = nlapiGetLineItemValue('item', 'linenumber', x)
nlapiLogExecution('DEBUG', 'removing = ', lineid);
if(lineid == 1)
{
nlapiLogExecution('DEBUG', 'removing line item 1');
nlapiRemoveLineItem('item', x)
}
}
&#13;
答案 0 :(得分:3)
使用自定义事务列字段的方法处理NS与具有RESTlet的外部系统之间的数据同步是一件好事。但我们有一个内置选项来执行此操作,这是执行此操作的标准方法。
ExternalId是可用于记录和lineitems的标准列,其中可用于更新/删除记录上的lineitems。
在NS记录的UI中无法查看此ExternalId。这可以与存储在外部系统中的recordid一起存储。
例如,带有SQL表的外部系统存储SalesOrder并且该表中有一个id列,而且SOLineItem表还存储了salesorder的相应lineitem,它还包含identity列。
现在必须将记录ID作为SO的externalid传递给JSON,并且必须将线条项ID传递给JSON,作为JSON中items对象下的lineitems的externalid。
示例JSON
{
"internalid": "",
"recordtype": "salesorder",
"entity": "3217",
"salesrep": "3209",
"terms": "2",
"trandate": "6\/16\/2014",
"orderstatus": "A",
"otherrefnum": "245852",
"billaddress":"",
"shipaddress":"",
"externalid": "FF160614-SO03", //ID of SO record on SO SQL table
"item": [
{
"isremove":"",
"internalid": "",
"item": "486",
"amount": "50",
"quantity": "5",
"externalid": "FF160614-SO03-L1-INV-486" //ID of LineItems record SOLineItem SQL table
},
{
"isremove":"",
"internalid": "",
"item": "700",
"amount": "100",
"quantity": "1",
"externalid": "FF160614-SO03-L2-GRP-700A" //ID of LineItems record SOLineItem SQL table
}
]
}
如果您注意到样本JSON,它在项子列表中有一个名为 isremove 的属性。如果设置为true,则必须删除相应的订单项。
答案 1 :(得分:2)
我们未发现任何NetSuite linenumber
或其他此类字段是识别订单项的可靠方式。无论何时对线进行重新排序或修改,它们似乎都会在记录的整个生命周期中发生变化。
我们过去通过添加名为唯一ID 或行ID 之类的自定义事务列字段或任何您想要的内容来完成此操作。然后,NetSuite或外部系统可以为每一行生成UUID并将其存储在自定义列中。只要两个系统都保持对每一行的UUID的引用,就可以使它们保持同步。