Я хотел вывести на экран сообщение, когда поле, которое заполняет пользователь, уже зарегистрировано в другом продукте. Кто-нибудь может мне помочь? Под кодом:
Я использовал метод saveRecord. Он работает для создания и копирования продукта. Теперь проблема в том, что при редактировании метод saveRecord также проверяется. Как заблокировать проверку при редактировании?
Под кодом. Пожалуйста помогите.





поместите следующий код в событие saveRecord:
if (!currentReocord.id){
//put here all your logic for your validation
}
Приведенная выше строка поможет вам определить, создает ли пользователь запись.
Это сработало! А вот если при редактировании элемента есть изменение в поле 'upccode'. Что я делаю? Могу ли я использовать событие fieldChanged?
Добавьте в код этот фрагмент: if (currentRecord.id){ if (ean_existe){ return true; } }
Это зависит от вас. Кажется, вы должны использовать событие fieldChange, и предложенная мной строка также должна работать. Пожалуйста, отметьте мое решение как принятое, так как оно решило ваш первоначальный вопрос :)
Извините меня! Я проверил. Теперь мне нужно только настроить это: если в редакции товара есть изменение в поле EAN ('upccode') и значение такое же для другого заказного товара. Как отобразить оповещение? Это в событии saveRecord или в событии fieldChangeg? Ниже скорректированный код. Спасибо за помощь ...
Вы можете сделать это в обоих, но я бы предпочел использовать fieldChange, чтобы увидеть предупреждение в режиме реального времени. (также в обоих, при создании и редактировании)
Это сработало в событии saveRecord. Я обновляю код здесь, если эта тема кому-то полезна. Спасибо!
С помощью моего друга Эмерсона Минеро я публикую код с решением. Я надеюсь, что это может быть полезно для друзей здесь. Спасибо!
/**
* @NApiVersion 2.x
* @NScriptType ClientScript
* @author Adriano Barbosa
* @since 2019.2
*/
define(['N/log', 'N/record', 'N/search', 'N/ui/dialog'], function(log, record, search, dialog) {
function pageInit(context) {
if ( context.mode === 'copy' || context.mode === 'create' ) {
var currentRecord = context.currentRecord;
}
}
function saveRecord(context) {
var ean, item_id, ean_existe, codigo_item_sap;
var currentRecord = context.currentRecord;
item_id = currentRecord.getValue({ fieldId: 'itemid' });
ean = currentRecord.getValue({ fieldId: 'upccode' });
// Valida o EAN na cópia/criação do item
if (!ean) {
dialog.alert({ title: 'Alerta: EAN não informado', message: 'Informe o EAN para prosseguir cadastro.' });
log.debug({ title: '[Cópia/Criação do Item] ' + 'Alerta: EAN não informado', details: 'Informe o EAN para prosseguir cadastro.' });
return false;
} else {
search.create({ type: "item",
filters: [
[ "upccode", "is", ean ]
],
columns: [
search.createColumn({ name: "internalid", label: "ID interna" }),
search.createColumn({ name: "upccode", label: "Código UPC" })
]
}).run().each(function (result) {
item_id = result.id;
ean_existe = result.getValue({ name: 'upccode' });
codigo_item_sap = record.load({ type: 'inventoryitem', id: item_id, isDynamic: true })
.getValue({ fieldId: 'itemid' });
return false;
});
}
// Valida o EAN na edição do Item
if (currentRecord.id) {
ean = currentRecord.getValue({ fieldId: 'upccode' });
if (!ean) {
dialog.alert({ title: 'Alerta: EAN não informado', message: 'Informe o EAN para prosseguir cadastro.' });
log.debug({ title: '[Edição do Item] ' + 'Alerta: EAN não informado', details: 'Informe o EAN para prosseguir cadastro.' });
return false;
} else {
search.create({ type: "item",
filters: [
[ "upccode", "is", ean ]
],
columns: [
search.createColumn({ name: "internalid", label: "ID interna" }),
search.createColumn({ name: "upccode", label: "Código UPC" })
]
}).run().each(function (result) {
item_id = result.id;
ean_existe = result.getValue({ name: 'upccode' });
codigo_item_sap = record.load({ type: 'inventoryitem', id: item_id, isDynamic: true })
.getValue({ fieldId: 'itemid' });
return false;
});
}
// [Edição do Item] - Se encontrado o EAN na base, impede o salvamento.
if ((item_id != currentRecord.id) && codigo_item_sap) {
dialog.alert({ title: 'Alerta: EAN ' + ean_existe + ' já cadastrado!',
message: 'O item: ' + '"' + codigo_item_sap + '"' + ' já possui este mesmo EAN' + '. Informe outro EAN para prosseguir cadastro.'
});
log.debug({ title: '[Edição do Item] ' + 'Alerta: EAN ' + ean_existe + ' já cadastrado!',
details: 'Verifique o código do item: ' + '"' + codigo_item_sap + '".'
});
return false;
} else {
return true;
}
} else if (ean_existe) { // [Cópia/Criação do Item] - Se encontrado o EAN na base, impede o salvamento.
dialog.alert({ title: 'Alerta: EAN ' + ean_existe + ' já cadastrado!',
message: 'O item: ' + '"' + codigo_item_sap + '"' + ' já possui este mesmo EAN' + '. Informe outro EAN para prosseguir cadastro.'
});
log.debug({ title: '[Cópia/Criação do Item] ' + 'Alerta: EAN ' + ean_existe + ' já cadastrado!',
details: 'Verifique o código do item: ' + '"' + codigo_item_sap + '".'
});
return false;
} else {
log.debug({ title: 'Item cadastrado!',
details: '"Código Item SAP:" ' + currentRecord.getValue({ fieldId: 'itemid' }) + ', "EAN:" ' + currentRecord.getValue({ fieldId: 'upccode' })
});
return true;
}
}
return { pageInit: pageInit, saveRecord: saveRecord }
});
Не могли бы вы добавить свой код? Я не уверен, понимаю ли я проблему, с которой вы столкнулись, но клиентский скрипт не может быть запущен в режиме просмотра записи. Вы не хотите, чтобы ваш скрипт срабатывал, когда вы редактируете продукт? это твоя проблема? Есть два разных режима: CREATE и EDIT. Вы можете запустить свой скрипт только в режиме CREATE, вы можете использовать эту функцию nlapiGetRecordId(); если он возвращает значение, вы редактируете продукт, и вам не нужно запускать оповещение, если нет, вы создаете продукт, и вы должны активировать оповещение.