如何在更新其值时锁定记录以与 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 个,那一定没问题,但请保留记住了。
祝你好运:)
有一个销售订单有很多采购订单,并且销售订单有一个项目汇总了每个采购订单中的所有运费。
我开发了如下 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 个,那一定没问题,但请保留记住了。
祝你好运:)