Попробуйте следующее. Он неполон в том, что он не обрабатывает ошибки, множественные совпадения или частичные совпадения, но есть важные части скрипта.
Вы также можете использовать validateField вместо fieldChanged (тот же источник, но добавить return true;). В этом случае, если вы обнаружите, что пользователь ввел неверные данные, вы можете вернуть false.
/**
*@NApiVersion 2.x
*@NScriptType ClientScript
*/
define(['N/search'],
function(search) {
function setItemFromTestValue(currentRecord) {
var testValue = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_test'
});
if (!testValue) {
return;
}
var itemSearch = search.create({
type: search.Type.ITEM,
filters: [{
name: 'custitem_test',
operator: 'is',
values: [testValue]
}]
});
var items = [];
itemSearch.run().each(function(result) {
items.push(result.id);
return true;
});
// how to handle multiple items found and no items found are left to you
if (items.length) {
// don't reset current item
var currentItem = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'item'
});
if (items[0] != currentItem) {
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'item',
value: items[0]
});
}
}
}
function fieldChanged(context) {
var sublistName = context.sublistId;
var sublistFieldName = context.fieldId;
if (sublistName === 'item' && sublistFieldName === 'custcol_test') {
console.log('fieldChanged');
setItemFromTestValue(context.currentRecord);
}
}
return {
fieldChanged: fieldChanged
};
});