Сценарий Netsuite: что вызывает ошибку THAT_RECORD_IS_NOT_EDITABLE? - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь изменить запись заказа на доставку, используя скрипт 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": "Эта запись не являетсяeditable. "," stack ": [" createError (N / error) ...

Что не очень полезно, потому что я не знаю, что может сделать запись недоступной для редактирования.

Я искал документы и Интернет, но не могу найти ссылку на эту ошибку. Документы для этой функции сохранения не устраняют возможные ошибки:

https://system.na2.netsuite.com/app/help/helpcenter.nl?fid=section_4267286323.html

Любые предложения будут очень полезны.

Ответы [ 2 ]

4 голосов
/ 02 мая 2019

context, переданный функции afterSubmit, доступен только для чтения.Вы не можете изменить, а затем сохранить вновь созданную запись.Вам необходимо:

  1. Использовать вместо этого функцию beforeSubmit.Использование beforeSubmit позволяет вам изменять запись, как вы делаете, прежде чем она будет отправлена ​​в базу данных - однако, вам не следует вызывать Record.save() для нее, поскольку система сохранит измененную запись после завершения beforeSubmit.
  2. Вы также можете использовать функцию afterSubmit, но для этого вам нужно отдельно загрузить запись, изменить ее по мере необходимости и затем сохранить.
1 голос
/ 06 мая 2019

Я предложу использовать record.submitFields в afterSubmit вместо загрузки записи, а затем сохранить ее.Это сэкономит вам исполнительные единицы.

record.submitFields({
    id: context.newRecord.id,
    type: context.newRecord.type,
    values: {'custbody_route_vendor' : '1'}
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...