有一个销售订单有许多采购订单,而销售订单有一个项目,它总结了每个采购订单中的所有运输成本。
我开发了以下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上发生数据不一致。
因此,如果要锁定PO记录,可以使用Lock Record工作流操作执行此操作:如果将该操作应用于记录的BeforeLoad,则会阻止其编辑。
因此,一种方法是:添加一个新的复选框Custom Body字段(例如:lock for calculation):在脚本中,在开始计算之前,更新所有PO,以便自定义字段为TRUE。计算完成后,将其重置为FALSE。
您创建一个具有一个非完成状态的事务工作流,并使用以下条件添加Lock操作:locked for calculation = TRUE。
理论上,这将解决您的问题,但要小心您的脚本中使用的治理:因为您将更新两次PO:如果它不超过10,它一定是好的,但要记住这一点。
祝好运 :)