SuiteScript 2.0 setValue не разрешен в текущей подзаписи (запись заказа на продажу)

Я пытаюсь установить значение для подсписка «billingaddress/shippingaddress». Но скрипт завершается с ошибкой «setValue не разрешено в текущей подзаписи». Однако я могу получить значение подзаписи.

Мне нужно реализовать приведенный ниже SuiteScript 1.0 до 2.0 в записи SALES ORDER (клиентский скрипт).

nlapiSetFieldValue('billcity', "TEST");

Я пробовал с ниже.

 var currentRecordata = currentRecord.get();
 var subrec = currentRecordata.getSubrecord({
    fieldId: 'billingaddress'
  });    

  subrec.setValue({
    fieldId: 'city',
    value:"TEST"
  });

Пожалуйста, помогите мне решить эту проблему.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 179
1

Ответы 1

var currentRecordata = currentRecord.get();

Здесь currentRecordata — это Только для чтения, т. е. currentRecord.get() возвращает запись только для чтения, поэтому вы не можете вносить в нее изменения.

Кроме того, как вы сказали, вы вносите изменения в клиентский скрипт, какую точку входа (метод) вы хотите внести в указанные изменения? Вы можете получить объект записи в каждой точке входа, и этот объект можно использовать для чтения и записи.

например. если вы используете pageInit, вы получаете currentRecord в scriptContext, который передается самим NetSuite, и вам не нужно использовать currentRecord.get();

Кроме того, если вы хотите внести изменения в режиме просмотра, вам придется использовать модуль N/record для загрузки записи, внесения изменений и последующего сохранения.

Пожалуйста, проверьте это для получения дополнительных разъяснений о точках входа клиент-скрипт и модуле Текущая запись.

Спасибо за ответ. Я использую точку входа «beforeLoad». Не могли бы вы сообщить мне, как обновить текущую запись без использования "currentRecord.get();". Кроме того, будут ли изменения немедленно отражаться в пользовательском интерфейсе без загрузки страницы?

kasarlaravi 13.02.2019 15:10

В Клиентский скрипт нет перед загрузкой. Если вы хотите обновить запись только в режиме редактирования, вы можете использовать метод pageInit клиентского скрипта, вы получите currentRecord в контексте скрипта. Я не думаю, что NetSuite позволяет отправлять записи в beforeLoad, так как это приведет к ошибке Record Has Been Changed

Avi 13.02.2019 15:24

что касается отражения изменений, да, если вы внесете какие-либо изменения в pageInit, они сразу же отразятся на пользовательском интерфейсе, хотя вы должны внести изменения в saveRecord ClientScript или beforeSubmit в UserEvent.

Avi 13.02.2019 15:26

В соответствии с моим требованием мне нужно добавить одну кнопку в существующую форму заказа на продажу и после нажатия кнопки обновить существующий адрес выставления счетов/доставки. Ниже я использовал UserEventScript, чтобы добавить кнопку «beforeLoad», если (context.type == context.UserEventType.EDIT || context.type == context.UserEventType.VIEW) { context.form.clientScriptModulePath = './clientScripts.js' ; context.form.addButton({id: 'custpage_btn', label: 'моя кнопка', functionName: 'validate' }); }

kasarlaravi 13.02.2019 15:40

clientScripts.js — код: проверка функции () { попытка { var currentRecorddata = currentRecord.get(); var subrec = currentRecorddata.getSubrecord({fieldId: 'billingaddress' }); var cityValue = subrec.getValue({fieldId: 'город' }); subrec.setValue({fieldId: значение 'города': "Тест" }); } catch (e) { console.info(JSON.stringify(e)); } }

kasarlaravi 13.02.2019 15:41

AFAIK, обновляя данные в режиме реального времени из клиентского скрипта при нажатии кнопки, не дает currentRecord, поэтому вы не можете его обновить. Вместо этого вы можете использовать рабочий процесс, чтобы добавить кнопку, хотя ее также нельзя использовать для отображения данных в режиме реального времени в пользовательском интерфейсе.

Avi 13.02.2019 16:27

Другие вопросы по теме