#javascript #netsuite #suitescript #suitescript2.0
#javascript #netsuite #suitescript #suitescript2.0
Вопрос:
Как только пользователь нажимает на стандартную кнопку void в NS, я хочу сначала что-то сделать, прежде чем это будет зафиксировано. Поскольку из сценария клиентского события не запускается функция, я попытался использовать пользовательское событие перед отправкой, но я не вижу способа определить, запускается ли событие с помощью VOID или с помощью кнопки СОХРАНЕНИЯ. Есть ли у вас какие-либо предложения / идеи о том, как можно обойти?
Комментарии:
1. Какой тип записи конкретно вы пытаетесь аннулировать? В моем экземпляре NetSuite, когда я нажимаю Void на чеке, я попадаю на страницу для создания записи в журнале, которая отменит этот чек.
2. Проверьте ответ, который я только что опубликовал. Надеюсь, это поможет вам.
Ответ №1:
Использование и объяснение
- Развернуть как сценарий пользовательского события в записи журнала
- Этот код найдет соответствующую транзакцию, которая аннулируется, и перед ее аннулированием изменит свою заметку на «Эта транзакция аннулирована!»
- Обратите внимание, что «перед аннулированием» относится к нажатию кнопки «Сохранить» в записи журнала аннулирования, а не конкретно к нажатию кнопки «Аннулировать» в исходной транзакции.
- Вы можете использовать это как основу для выполнения других действий над
voidedRecord
объектом.
Описание костюма 1
function beforeSubmit(type) {
if (type == 'create') {
var voidRecord = nlapiGetNewRecord();
var voidedRecordId = voidRecord.getFieldValue('createdfrom');
var voidedRecordType = voidRecord.getFieldValue('transform');
var voidedRecord = nlapiLoadRecord(voidedRecordType,voidedRecordId);
voidedRecord.setFieldValue('memo','This transaction has been voided!');
nlapiSubmitRecord(voidedRecord);
}
}
SuiteScript 2
/**
*@NApiVersion 2.x
*@NScriptType UserEventScript
*/
define(['N/record'],
function (record) {
function beforeSubmit(context) {
if (context.type == context.UserEventType.CREATE) {
var voidRecord = context.newRecord;
var voidedRecordId = voidRecord.getValue({fieldId: 'createdfrom'});
var voidedRecordType = voidRecord.getValue({fieldId: 'transform'});
var voidedRecord = record.load({
type: voidedRecordType,
id: voidedRecordId
});
voidedRecord.setValue({
fieldId: 'memo',
value: 'This transaction has been voided!'
});
voidedRecord.save();
}
}
}
);
Ответ №2:
Обратите внимание, что это предполагает, что у вас установлена опция «Использовать обратные журналы для аннулирования транзакций». Если эта опция не включена, то J / E не создается. Для базовой транзакции устанавливается значение posting=N, обнуляется и сохраняется. Аннулированная транзакция не может быть восстановлена.