如何在更新其值时锁定记录以与 NetSuite 上的值保持一致?

How to lock a record while updating its value to have consistency for the value on NetSuite?

有一个销售订单有很多采购订单,并且销售订单有一个项目汇总了每个采购订单中的所有运费。

我开发了如下 2 个函数来计算每个 PO 中的所有运费:

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
     });
}

但如果有人在计算过程中更新了特定 PO 中的运费,则总运费可能不正确。

是否可以在执行汇总所有运费的功能时锁定采购订单?

比如一个SO中有100000个PO,在计算总运费的过程中,如果有人修改了PO中的其中一个运费,那么总成本可能不正确,如果该成本有已添加到总运费中。

如何防止NetSuite出现数据不一致问题

因此,如果您想锁定 PO 记录,您可以使用 Lock Record 工作流操作来实现:如果您在记录的加载前应用该操作,它将阻止其编辑。

所以一种方法可以做到这一点:添加一个新的复选框自定义主体字段(例如:为计算锁定):在您的脚本中,在开始计算之前,您更新所有采购订单,使自定义字段为真。计算后,您将其重置为 FALSE。

您创建了一个具有一个非完成状态的事务工作流,并添加了一个条件为锁定操作:为计算锁定 = TRUE。

理论上,这将解决您的问题,但请注意脚本中使用的治理:因为您将更新两次 PO:如果不超过 10 个,那一定没问题,但请保留记住了。

祝你好运:)