#netsuite #suitescript #suitescript2.0
#netsuite #suitescript #suitescript2.0
Вопрос:
Я пытаюсь создать файл скрипта в NetSuite с помощью SuiteScript 2.0 для обновления внешнего идентификатора записей классификации. По какой-то причине NetSuite обновляет все поля, кроме externalId.
Я хочу создать этот скрипт для обновления внешних идентификаторов, потому что большинство наших шаблонов CSV использует внешние идентификаторы для поиска основных данных, таких как учетные записи и классы. Дело в том, что NetSuite не отображает внешние идентификаторы в формах, и все записи, созданные через пользовательский интерфейс, не содержат информации в этом поле. Итак, идея здесь состоит в том, чтобы запланировать сценарий для автоматического заполнения этого поля на основе некоторых других полей.
Вот мой код
/**
* @NApiVersion 2.0
* @NScriptType ScheduledScript
*/
define(['N/runtime','N/log','N/record','N/search'], function(runtime,log,record,search) {
var qtyProjects=0;
function execute(context) {
try
{
log.debug('Script Started');
/********** Update Project (Classes) External ID ***********/
var classificationSearchObj = search.create({
type: "classification",
filters:
[
["externalid","is","@NONE@"]
],
columns:
[
search.createColumn({name: "name",label: "Name"}),
search.createColumn({name: "custrecord_proj_full_name",label: "FullName"}),
search.createColumn({name: "custrecord_proj_manager",label: "ProjectManager"}),
search.createColumn({name: "externalid",label: "Externalid"})
]
});
var prj_srch = classificationSearchObj.run().each(processProject);
log.debug('Quantity of projects: ',qtyProjects);
log.debug('Script Finished');
}
catch(e)
{
log.debug('Error',e.message);
}
}
function processProject(result) {
var number = result.getValue({name: "name"});
var fullName = result.getValue({name: "custrecord_proj_full_name"});
var externalid = result.getValue({name: "externalid"});
qtyProjects ;
log.debug('Update Number|Name|ExternalId: ',number " | " fullName " | " externalid);
record.submitFields({
"type":'classification',
"id": result.id,
"values": {
"externalId": externalid,
"custrecord_proj_full_name": "Test Ale 2",
}
});
/*
var project_id = project.save({
enableSourcing: true,
ignoreMandatoryFields: true
});
*/
//return true;
}
return {
execute: execute
};
});
Ответ №1:
Вы неправильно указали идентификатор ExtermalId, он без заглавной буквы «I» как externalid
. Это должно сработать. Как правило, собственные идентификаторы полей не содержат заглавных букв
Комментарии:
1. Спасибо за ваш ответ. Я попытался перейти на внешний идентификатор, и у меня все та же проблема. Поле не обновляется. 🙁
Ответ №2:
/**
* @NApiVersion 2.0
* @NScriptType ScheduledScript
*/
define(['N/runtime','N/log','N/record','N/search'], function(runtime,log,record,search) {
function execute(context) {
var so = record.load({
type: record.Type.SALES_ORDER,
id: 12345
});
so.setValue('external','6789');
so.save();
return true;
}
return {
execute: execute
}
});
Комментарии:
1. попробуйте это
Ответ №3:
Вы пробовали загружать запись, устанавливая внешний идентификатор, а затем сохраняя его?
Комментарии:
1. Да, я пытался, но тоже безуспешно. project = record.load({ тип: ‘классификация’, id:result.id , isDynamic: true }); project.setValue(‘externalid’,externalid); var project_id = project.save({ enableSourcing: true, ignoreMandatoryFields: true });
Ответ №4:
Да, я попытался загрузить запись и установить внешний идентификатор, у меня это сработало. Пожалуйста, используйте браузер записей для внутренних идентификаторов полей (externalid).
Комментарии:
1. Да, я пытался загрузить и установить, но тоже безуспешно. 🙁
Ответ №5:
Ваш код ищет классы без внешнего идентификатора и обновляет внешний идентификатор класса с помощью пустого значения, найденного при поиске. Похоже, вам не хватает поиска, чтобы узнать, каким должен быть новый внешний идентификатор.
Ответ №6:
Я обнаружил, что синтаксис SuiteScript 2 не работает для обновления externalId
. Для меня это просто ничего не делает:
instance.setValue({ fieldId: 'externalid', value: 'FOO1' })
При использовании более старого синтаксиса фактически будет обновляться externalId
:
instance.setValue('externalid', 'FOO1')
Вы можете запустить это в консоли вашего браузера во время просмотра записи, чтобы попробовать:
require(['N/record'], function (record) {
const instance = record.load({ type: 'customerpayment', id: 5000 })
instance.setValue('externalid', 'PYMT1234')
instance.save()
})