Netsuite脚本:是什么导致THAT_RECORD_IS_NOT_EDITABLE错误?

时间:2019-05-02 17:22:10

标签: javascript oracle netsuite

我正在尝试使用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

任何建议都会很有帮助。

2 个答案:

答案 0 :(得分:4)

传递给context函数的afterSubmit是只读的。您不能修改,然后保存新创建的记录。您需要:

  1. 改为使用beforeSubmit函数。使用beforeSubmit可让您在将记录提交到数据库之前对其进行更改-但是,您不应在其上调用Record.save(),因为系统会在{ {1}}完成。
  2. 您还可以使用beforeSubmit函数,但是为此您需要单独加载记录,根据需要对其进行修改然后保存。

答案 1 :(得分:1)

我建议在record.submitFields中使用afterSubmit而不是加载记录然后保存。它将节省您的执行单位。

record.submitFields({
    id: context.newRecord.id,
    type: context.newRecord.type,
    values: {'custbody_route_vendor' : '1'}
})