ДОБАВЛЕНИЕ КОДА ПРИ НАЖАТИИ КНОПКИ VOID В NETSUITE

#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, обнуляется и сохраняется. Аннулированная транзакция не может быть восстановлена.