Как заблокировать запись при обновлении ее значения, чтобы иметь согласованность для значения в NetSuite? - PullRequest
0 голосов
/ 26 февраля 2019

Существует заказ на продажу, имеющий много заказов на покупку, и в заказе на продажу есть элемент, который суммирует все затраты на доставку в каждом заказе.

Я разрабатываю 2 функции для расчета стоимости доставки вкаждое ПО:

function calcuTotalShippingCostByAllPOs(.....) {
        ......
    // var created_pos is an array which records all the unique PO id in SO
    for (i = 0; i < created_pos.length; i++) {
        var po_amountValue = po_record.getSublistValue({
             sublistId: 'item',
             fieldId: 'amount',
             line: ship_line
        });
        total_shipping += parseFloat(po_amountValue);
    }
    so_record.setSublistValue({
        sublistId: "item",
        fieldId: "amount",
        line: so_ship_line,
        // ignoreFieldChange: false,
        value: total_shipping
    });
}

function calcuTotalShippingCostByCurrentPO(.....) {
        ......
    switch (context.type) {
        case context.UserEventType.CREATE:
            var difference = new_po_ship_cost;
            break;
        case context.UserEventType.DELETE:
            var difference = -old_po_ship_cost;
            break;
        default:
            var difference = new_po_ship_cost - old_po_ship_cost;
            break;
        }

     // Get the old GST-Shipping cost on SO
         var old_so_ship_cost = so_record.getSublistValue({
         sublistId: 'item',
         fieldId: 'custcol_po_actual_cost',
         line: so_ship_line
     });

     // if PO UNIT COST on ship line is a finite number
     if (isNumber(old_so_ship_cost)) {
         var new_so_ship_cost = old_so_ship_cost + difference;
     } else {
         var new_so_ship_cost = difference;
     }

     so_record.setSublistValue({
         sublistId: "item",
         fieldId: "amount",
         line: so_ship_line,
         // ignoreFieldChange: false,
         value: total_shipping
     });
}

Но если кто-то обновит стоимость доставки в конкретном ПО во время расчета, тогда общая стоимость доставки может быть неправильной.

Возможно ли заблокировать ПОпри выполнении функции суммирования всех затрат на доставку?

Например, если в SO 100000 заказов на поставку, при расчете общей стоимости доставки, если кто-то изменит одну из затрат на доставку в заказе на поставку, тогдаобщая стоимость может быть неверной, если она была добавлена ​​к общей стоимости доставки.

Как предотвратить несогласованность данных в NetSuite.

1 Ответ

0 голосов
/ 28 февраля 2019

Поэтому, если вы хотите заблокировать записи PO, вы можете сделать это, используя действие рабочего процесса Lock Record : если вы примените это действие к BeforeLoad записи, это предотвратит ее редактирование.

Так что один из способов сделать это: добавить новый флажок Custom Body field (пример: заблокирован для расчета): в вашем скрипте перед началом расчета вы обновляете все PO, чтобы настраиваемое поле имело значение TRUE.После расчета вы сбрасываете его в FALSE.

Вы создаете рабочий процесс транзакции с одним состоянием без завершения и добавляете действие Блокировка с условием: заблокировано для расчета = ИСТИНА.

Теоретически,это решит вашу проблему, НО будьте осторожны с используемым Управлением в вашем сценарии: потому что вы будете обновлять два раза количество PO: если оно не больше 10, это должно быть в порядке, но имейте это в виду.

Удачи:)

...