NetSuite:启用 Line Item Shipping (MSR) 时的自定义地址字段

Posted

技术标签:

【中文标题】NetSuite:启用 Line Item Shipping (MSR) 时的自定义地址字段【英文标题】:NetSuite: Custom Address Fields when Line Item Shipping (MSR) is Enabled 【发布时间】:2015-12-10 20:31:07 【问题描述】:

我对 NetSuite 有一个奇怪的问题。在选中“启用行项目运输”的销售订单上,这意味着启用了多个运输路线,送货地址位于项目行级别。

通过 SuiteScript,如果从通讯簿中选择地址,我可以访问行级别的地址。

但是,当该地址是动态输入的自定义地址时,我不知道如何在 beforeSubmit 函数中访问这些字段。

任何指针将不胜感激!

【问题讨论】:

【参考方案1】:

您可以使用两个或以下两个来获取所选地址的详细信息

nlapiGetLineItemValue('item','shipaddress',1)
nlapiGetLineItemText('item','shipaddress',1)

以上只会给你地址记录的id或标签。但是,很难在客户端访问地址详细信息。

但是,使用子记录 API,您可以使用子记录 API 在用户事件脚本中访问服务器端的记录:

var record = nlapiLoadRecord('customer', nlapiGetFieldValue('entity'),recordmode: 'dynamic');

//loop through all the addressbooks
if(record.getLineItemValue('addressbook', 'internalid', i) === nlapiGetLineItemValue('item','shipaddress', 1))
record.selectLineItem('addressbook', 2);

//change the sub record value
var subrecord = record.editCurrentLineItemSubrecord('addressbook', 'addressbookaddress');
subrecord.setFieldValue('attention', 'Accounts Payable');
subrecord.commit();
record.commitLineItem('addressbook');

var x = nlapiSubmitRecord(record);

【讨论】:

您拥有的第二组代码不是仅适用于附加到客户记录的地址吗?我的问题特别在于自定义地址并试图获取这些字段(特别是状态)。我认为自定义地址不会像普通地址那样添加到客户记录中。请记住,我对 NetSuite 完全陌生,所以也许我只是没有看到第二组代码与自定义地址的关系。 我建议您从 UI 创建一个新的销售订单行级别地址。 AFAIK 它显示为客户的子记录。 prasun - 我在其他地方看到了你的帖子,所以你可能会感兴趣。请参阅我接受的答案以了解有关其工作原理的详细信息。【参考方案2】:

想通了!对于那些未来在这里冒险的迷失灵魂:

以下是您可以在销售订单行级别使用的函数,用于循环访问自定义地址并提取特定信息。

希望这会在某个时候添加到 NetSuite 文档中。

请注意,我是专门为状态信息执行此操作的。如果您想查看可用的其他字段,请将&xml=T 添加到已提交的销售订单 URL 的末尾并在生成的 xml 结构中搜索 iladdrbook。它实际上被视为一个订单项。

function getCustomAddressFromLineItem(soLineNum) 

    nlapiLogExecution('DEBUG', 'Custom Address', 'Custom Address: Line # ' + soLineNum);

    var addressid = nlapiGetLineItemValue('item','shipaddress',soLineNum); // get the id of the custom address
    var customAddressesLineCount = nlapiGetLineItemCount('iladdrbook'); // get custom address book count

    nlapiLogExecution('debug', 'test', 'addressid: ' + addressid + ' -- linecount: ' + customAddressesLineCount);

    for (var i = 1; i <=customAddressesLineCount; i++)
    
     var addressinternalid = nlapiGetLineItemValue('iladdrbook','iladdrinternalid',i); // get internal id of custom address book
     if (addressinternalid == addressid) // match it with the id of custom address being set
     
      var addr = nlapiGetLineItemValue('iladdrbook','iladdrshipaddr1',i);
      var customState = nlapiGetLineItemValue('iladdrbook','iladdrshipstate',i); // get your state
      nlapiLogExecution('debug', 'test', 'address: ' + addr + ' -- state: ' + customState);
      return customState;
     
    

【讨论】:

我喜欢您的想法,但未记录的字段可能有风险,因为 NS 可能会更改它们,您不能从客户那里获取自定义地址的详细信息吗? 很遗憾没有。这些自定义地址不会存储在客户记录的常规地址簿中。如果您使用“-添加-”选项添加地址,那么我认为您是正确的。如果您使用“-自定义-”选项添加地址,那么它们将存储在这个奇怪的 iladdrbook 中。 这至少得到了 NetSuite 支持的证实(并不是说它不会改变),但至少不是 100% 不受支持。

以上是关于NetSuite:启用 Line Item Shipping (MSR) 时的自定义地址字段的主要内容,如果未能解决你的问题,请参考以下文章

Netsuite 事务已保存搜索:项目加入?

Netsuite:事务的 HTML/电子邮件子列表未正确循环

使用php soapclient工具包显示访问netsuite wsdl无法加载wsdl

如何膨胀 core/res/res/layout/simple_dropdown_item_2line.xml

Woocommerce - 获取 WC_Order_Item_Product line 折扣

需要帮助对可用的订单明细表进行分组以得出 count(order_line_item) 、 Qty 和 count(Qty) 的分布