我正在尝试使用Netsuite脚本v2修改运输订单记录。
* @NApiVersion 2.0
* @NScriptType UserEventScript
*/
define(['N/search', 'N/record'],
function(search, record) {
function afterSubmit(context) {
if (context.type !== context.UserEventType.CREATE){
return;
}
try {
// Get the current Record
var salesOrder = context.newRecord;
salesOrder.setValue({fieldId: 'custbody_route_vendor', value: 1});
salesOrder.save({enableSourcing: true, ignoreMandatoryFields: true});
} catch (error) {
log.error({title: 'Error: ', details: error });
}
}
return {
afterSubmit: afterSubmit
};
});
这似乎很简单。但是当我保存销售订单时,它会引发以下错误:
{“ type”:“ error.SuiteScriptError”,“ name”:“ THAT_RECORD_IS_NOT_EDITABLE”,“ message”:“该记录不可编辑。”,“ stack”:[“ createError(N / error) ...
这不是很有帮助,因为我不知道会导致记录不可编辑的事物的类型。
我搜索了文档和互联网,但找不到该错误的参考。该保存功能的文档无法解决可能的错误:
https://system.na2.netsuite.com/app/help/helpcenter.nl?fid=section_4267286323.html
任何建议都会很有帮助。
答案 0 :(得分:4)
传递给context
函数的afterSubmit
是只读的。您不能修改,然后保存新创建的记录。您需要:
beforeSubmit
函数。使用beforeSubmit
可让您在将记录提交到数据库之前对其进行更改-但是,您不应在其上调用Record.save()
,因为系统会在{ {1}}完成。beforeSubmit
函数,但是为此您需要单独加载记录,根据需要对其进行修改然后保存。答案 1 :(得分:1)
我建议在record.submitFields
中使用afterSubmit
而不是加载记录然后保存。它将节省您的执行单位。
record.submitFields({
id: context.newRecord.id,
type: context.newRecord.type,
values: {'custbody_route_vendor' : '1'}
})