为 NetSuite 销售订单添加前缀 tranid

adding prefix to NetSuite Sales Order tranid

我们正在尝试弄清楚如何在创建销售订单时向 NetSuite 中的 tranid 添加前缀。我们有人编写了适用于第一个订单的脚本,但此后的任何订单都会提示重复订单号,因为 NetSuite 会尝试分配以前自动生成的编号,因为从技术上讲,NetSuite 从未使用过该编号。 以下是目前编写的脚本,我们希望得到如何解决此问题的建议?

function setEDIPrefix(){
    if(nlapiGetContext().getExecutionContext()=='webservices'&&nlapiGetContext().getUser()==999108){ //user 1646 is my account's SPS user internal id
       var id = nlapiGetFieldValue('tranid'); //gets value from 'document number' field
             nlapiLogExecution('DEBUG','Id: '+id);
                   nlapiSetFieldValue('tranid','EDI'+id); //appends "EDI-" prefix to the NetSuite assigned document number
                }
}   

我测试过,自动生成的 tranid 似乎在保存记录后递增,所以针对您的情况的解决方案是在 afterSubmit 中更改 tranid 而不是在 beforeSubmit 中:您可以重新加载当前记录,或者更好地使用“nlapiSubmitField(type, id, fields, values, doSourcing)”函数。

旁注:是时候开始使用 SS2.0 了:)

试试这个代码:

if(type == 'create' && nlapiGetContext().getExecutionContext()=='webservices' && nlapiGetContext().getUser() == 999108){ //user 1646 is my account's SPS user internal id
      var id = nlapiGetFieldValue('tranid'); //gets value from 'document number' field
      nlapiLogExecution('DEBUG','Id: '+id);

      nlapiSubmitField(nlapiGetRecordType(), nlapiGetRecordId(), 'tranid', 'EDI' + id);
  }

我在操作类型上添加了一个测试:您只需要在创建时进行更新。

对于那些来到本文寻找答案的人来说,有几种方法可以实现这一点,但它们都取决于 netsuite 中的配置设置。

第 1 步。为 auto-generated 个数字启用 Allow Override 功能

Setup > Company > Auto-Generated Numbers, select Document Numbers 选项卡中。对于 Sales Order 类型(或任何其他交易类型),select Allow Override.

第 2 步。通过网络服务或用户事件设置tranid

如果您正在编写自己的集成,您可以在 suitetalk 上使用 REST 或 SOAP 更新 tranid,方法是在更新插入/保存/创建操作中设置 tranId 字段值。对于用户甚至脚本,使用 SuiteScript 2.0,您将使用如下内容:

/**
 * @NApiVersion 2.x
 * @NScriptType usereventscript
 */
define(["N/record", "N/log"],
function(r, log) {
  function before_submit(context) {
    log.debug("my awesome user event script", "starting")
    if (context.type !== context.UserEventType.CREATE) {
      log.debug("my awesome user event script", "not a create")
      return;
    }
    var sales_order = context.newRecord;
    var order_number = "my awesome tranid";
    log.debug("my awesome user event script", "setting tranid => " + order_number)
    sales_order.setValue('tranid', order_number);
  }
  return {
    beforeSubmit: before_submit
  };
});