NetSuite:启用行项目装运(MSR)时的自定义地址字段

NetSuite:启用行项目装运(MSR)时的自定义地址字段,netsuite,suitescript,Netsuite,Suitescript,我对NetSuite有一个奇怪的问题。在勾选了“启用行项目发货”的销售订单上,意味着启用了多条发货路线,发货地址位于项目行级别 通过SuiteScript,如果从通讯簿中选择了该地址,我可以在线路级别访问该地址 但是,如果该地址是动态输入的自定义地址,我不知道如何在beforeSubmit函数中访问这些字段 任何指点都将不胜感激 您可以使用以下两种方法之一获取所选地址的详细信息 nlapiGetLineItemValue('item','shipaddress',1) nlapiGetLineI

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

通过SuiteScript,如果从通讯簿中选择了该地址,我可以在线路级别访问该地址

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


任何指点都将不胜感激

您可以使用以下两种方法之一获取所选地址的详细信息

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文档中

请注意,我是专门为州信息而做的。如果要查看还有哪些字段可用,请将
&xml=T
添加到提交的销售订单URL的末尾,并在结果xml结构中搜索
ILADRBook
。它实际上被视为一个行项目

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;
     }
    }
}
函数getCustomAddressFromLineItem(soLineNum){ nlapiLogExecution('DEBUG','Custom Address','Custom Address:Line#'+soLineNum); var addressid=nlapiGetLineItemValue('item','shipaddress',solineum);//获取自定义地址的id var customaddresslinecount=nlapiGetLineItemCount('iladdrbook');//获取自定义通讯簿计数 nlapiLogExecution('debug','test','addressid:'+addressid+'--linecount:'+customAddressesLineCount);
对于(var i=1;我不认为您的第二组代码只适用于附加到客户记录的地址吗?我的问题特别在于自定义地址,并试图获取这些字段(特别是状态)。我不认为自定义地址会像普通地址一样添加到客户记录中。请记住,我对NetSuite是完全陌生的,所以可能我没有看到第二组代码与自定义地址的关系。我建议您从UI中创建一个新的销售订单行级别地址。如果它显示为customer.prasun-I上的子记录,请注意在其他地方看到了您关于此的帖子,因此您可能会感兴趣。请参阅我接受的答案,以了解有关此操作的详细信息。我喜欢您的想法,但未记录的字段可能有风险,因为NS可能会更改它们,您无法从客户处获取自定义地址的详细信息吗?不幸的是,没有。这些自定义地址未存储在中客户记录上的常规通讯簿。如果您使用“-add-”选项添加地址,那么我认为您是正确的。如果您使用“-Custom-”选项添加地址,那么它们将存储在这个奇怪的ILAddressBook中。这至少得到NetSuite支持部门的确认(这并不意味着它不会更改),但它至少不是100%不受支持。