为 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
};
});
我们正在尝试弄清楚如何在创建销售订单时向 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
};
});