如何使用 SuiteScript 2.0 在客户上设置地址

Joh*_*cas 2 netsuite

我正在尝试在客户记录上设置地址。我已经了解到地址是客户子列表​​的子记录,我相信我可以在所述子记录上设置字段,但我无法保存更改。如何使用 SuiteScript 2.0 设置客户的地址信息?

当前代码:

customer.selectNewLine({
  sublistId: 'addressbook'
});

var addressSubrecord = customer.getCurrentSublistSubrecord({
  sublistId: 'addressbook',
  fieldId: 'addressbookaddress'
});

subrecordAddressDetail.setValue({
  fieldId: 'addr1',
  value: 'Test Street'
});

subrecordAddressDetail.setValue({
    fieldId: 'country',
    value: 'US'
});

customer.commitLine({
  sublistId: 'addressbook'
});
Run Code Online (Sandbox Code Playgroud)

我也尝试添加customer.save()after .commitList,但是Record has changed当我尝试这样做时出现错误。

Joh*_*cas 7

我缺少的部分是您需要保存父记录以使对子列表的子记录的任何更改生效。我无法保存所述父记录,因为我对该记录进行了更改并之前保存了它们,这导致Record has already changed error.

通常可以通过以下方式将地址添加到客户记录中:

  1. addressbook子列表中选择一行。
  2. 检索当前选定行的地址子记录。
  3. 更新子记录。
  4. 提交addressbook子列表中的选定行。
  5. 保存父记录。

例如,这将更新给定客户的第一个地址,或者如果它不存在则创建它:

function updateAddress(customer, address) {
    var currentAddressCount = customer.getLineCount({
      'sublistId': 'addressbook'
    });

    if (currentAddressCount === 0){
      customer.selectNewLine({
         sublistId: 'addressbook'
       });
    } else {
      customer.selectLine({
        sublistId: 'addressbook',
        line: 0
      });     
    } 

    var addressSubrecord = customer.getCurrentSublistSubrecord({
      sublistId: 'addressbook',
      fieldId: 'addressbookaddress'
    });

    // Set all required values here.
    addressSubrecord.setValue({
        fieldId: 'addr1',
        value: address.line_one
    })

    customer.commitLine({
       sublistId: 'addressbook'
    });
    customer.save()
  }
Run Code Online (Sandbox Code Playgroud)

  • 一个烦人的问题是:由于这些子列表 API 仅在动态模式下可用,因此如果要更改国家/地区字段,则必须确保首先设置它。如果您在动态模式下设置其他字段后更改国家/地区字段,那么您将丢失所有更改。最好在用户界面中进行一次演练,以确保您知道字段的设置顺序。 (2认同)

Ton*_*nyH 4

我认为您需要将该地址视为正确的记录。因此,在检索它之后,设置其值,然后单独提交。沿着这些思路:

customer.selectNewLine({
    sublistId: 'addressbook'
});

var addressSubrecord = customer.getCurrentSublistSubrecord({
    sublistId: 'addressbook',
    fieldId: 'addressbookaddress'
});

addressSubrecord.setValue({
    fieldId: 'addr1',
    value: 'Test Street'
});

addressSubrecord.setValue({
    fieldId: 'country',
    value: 'US'
});

addressSubrecord.save()

customer.commitLine({ //probably not necessary since address is already updated
    sublistId: 'addressbook' 
});
Run Code Online (Sandbox Code Playgroud)