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

问题描述 投票:0回答:1

有一个销售订单有许多采购订单,而销售订单有一个项目,它总结了每个采购订单中的所有运输成本。

我开发了以下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
     });
}

但是,如果有人在计算过程中更新特定采购订单中的运费,则总运费可能不正确。

是否可以在执行功能时锁定PO以总结所有运费?

例如,如果SO中有100000个PO,则在计算总运费期间,如果有人修改了PO中的一个运费,那么如果已在总计中添加成本,则总成本可能不正确运输费。

如何防止NetSuite上发生数据不一致。

javascript locking netsuite suitescript2.0
1个回答
1
投票

因此,如果要锁定PO记录,可以使用Lock Record工作流操作执行此操作:如果将该操作应用于记录的BeforeLoad,则会阻止其编辑。

因此,一种方法是:添加一个新的复选框Custom Body字段(例如:lock for calculation):在脚本中,在开始计算之前,更新所有PO,以便自定义字段为TRUE。计算完成后,将其重置为FALSE。

您创建一个具有一个非完成状态的事务工作流,并使用以下条件添加Lock操作:locked for calculation = TRUE。

理论上,这将解决您的问题,但要小心您的脚本中使用的治理:因为您将更新两次PO:如果它不超过10,它一定是好的,但要记住这一点。

祝好运 :)

© www.soinside.com 2019 - 2024. All rights reserved.