向NetSuite销售订单传输ID添加前缀

向NetSuite销售订单传输ID添加前缀,netsuite,suitescript,Netsuite,Suitescript,我们正在试图弄清楚,在创建销售订单时,如何在NetSuite中为tranid添加前缀。我们有一个人写了一个脚本,它适用于第一个订单,但之后的任何订单都会得到重复订单号提示,因为NetSuite尝试分配以前自动生成的编号,因为从技术上讲,NetSuite从未使用过该编号。 下面是到目前为止编写的脚本,我们希望获得如何解决此问题的建议 function setEDIPrefix(){ if(nlapiGetContext().getExecutionContext()=='webservic

我们正在试图弄清楚,在创建销售订单时,如何在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而不是beforeSubmit中更改tranid:您可以重新加载当前记录,或者更好地使用“”函数

旁注:现在是开始使用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中的配置设置

第一步。为自动生成的数字启用
允许覆盖
功能

设置
公司
自动生成的编号
中,选择
文档编号
选项卡。对于
销售订单
类型(或任何其他交易类型),选择
允许覆盖

第二步。通过Web服务或用户事件设置
tranid

如果您正在编写自己的集成,可以通过在upsert/save/create操作中设置
tranid
字段值,在suitetalk上使用REST或SOAP更新tranid。对于用户偶数脚本,使用SuiteScript2.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
  };
});


很抱歉,我没有提到,我们只希望在通过webservices生成订单时应用EDI前缀,并且,当由特定用户创建时(如您在上面的脚本中所看到的),您的脚本将作为客户端或Userevent脚本执行?何时:提交前?aftersubmit?脚本类型是User Event and execute BeforeSubmit对不起,我是NetSuite脚本新手,刚刚尝试将执行更新为aftersumbit,但脚本没有运行。我是否也需要修改脚本本身?是的,您需要更新:特别是SetValue部分:因为在afterSubmit上下文中,记录可能是不可编辑的:这就是为什么我说您需要使用nlapiSubmitField。