Я пытаюсь установить значение для подсписка «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"
});
Пожалуйста, помогите мне решить эту проблему.





var currentRecordata = currentRecord.get();
Здесь currentRecordata — это Только для чтения, т. е. currentRecord.get() возвращает запись только для чтения, поэтому вы не можете вносить в нее изменения.
Кроме того, как вы сказали, вы вносите изменения в клиентский скрипт, какую точку входа (метод) вы хотите внести в указанные изменения? Вы можете получить объект записи в каждой точке входа, и этот объект можно использовать для чтения и записи.
например. если вы используете pageInit, вы получаете currentRecord в scriptContext, который передается самим NetSuite, и вам не нужно использовать currentRecord.get();
Кроме того, если вы хотите внести изменения в режиме просмотра, вам придется использовать модуль N/record для загрузки записи, внесения изменений и последующего сохранения.
Пожалуйста, проверьте это для получения дополнительных разъяснений о точках входа клиент-скрипт и модуле Текущая запись.
В Клиентский скрипт нет перед загрузкой. Если вы хотите обновить запись только в режиме редактирования, вы можете использовать метод pageInit клиентского скрипта, вы получите currentRecord в контексте скрипта. Я не думаю, что NetSuite позволяет отправлять записи в beforeLoad, так как это приведет к ошибке Record Has Been Changed
что касается отражения изменений, да, если вы внесете какие-либо изменения в pageInit, они сразу же отразятся на пользовательском интерфейсе, хотя вы должны внести изменения в saveRecord ClientScript или beforeSubmit в UserEvent.
В соответствии с моим требованием мне нужно добавить одну кнопку в существующую форму заказа на продажу и после нажатия кнопки обновить существующий адрес выставления счетов/доставки. Ниже я использовал 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' }); }
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)); } }
AFAIK, обновляя данные в режиме реального времени из клиентского скрипта при нажатии кнопки, не дает currentRecord, поэтому вы не можете его обновить. Вместо этого вы можете использовать рабочий процесс, чтобы добавить кнопку, хотя ее также нельзя использовать для отображения данных в режиме реального времени в пользовательском интерфейсе.
Спасибо за ответ. Я использую точку входа «beforeLoad». Не могли бы вы сообщить мне, как обновить текущую запись без использования "currentRecord.get();". Кроме того, будут ли изменения немедленно отражаться в пользовательском интерфейсе без загрузки страницы?