我的代码(RCRD_HAS_BEEN_CHANGED)中经常发生错误。在较高级别,脚本将查看最近完成的销售订单并为其开票。然后,它遍历发票的所有行并更改已完成的数量。然后,我想浏览销售订单的每一行并将其关闭。在实现SO“关闭”部分之前,我所有的代码都可以正常工作,然后在尝试保存销售订单时返回RCRD_HAS_BEEN_CHANGED错误。
我知道此错误与在代码运行的同时在UI中访问销售订单的用户无关。而且,在后台运行的其他自定义脚本不会与此脚本进行交互。 我认为问题在于此脚本本身正在同时访问销售订单。我试图在几乎没有帮助的情况下将“关闭”代码块放置在脚本的不同位置。独立于脚本的其他部分,关闭销售订单也可以正常工作。
var salesOrderIds = [];
for(var i = 0; i < itemFulfillmentList.length; i++){
var currentOrder = itemFulfillmentList[i].getValue(searchResults.columns[1]);
salesOrderIds.push(currentOrder);
}
log.debug ({
title: 'sales order list',
details: salesOrderIds
});
.....
//transform the resulting sales orders into an invoice, iterating one by one
for(var i = 0; i < salesOrderIds.length; i++) {
var currentSalesOrder = record.load ({
type: record.Type.SALES_ORDER,
id: salesOrderIds[i],
isDynamic: false
});
var newInvoice = record.transform({
fromType: record.Type.SALES_ORDER,
fromId: salesOrderIds[i],
toType: record.Type.INVOICE,
});
... //在for循环之外,当保存发票时,该循环会关闭销售订单的每一行
for(var m = 0; m < salesOrderIds.length; m++){
var salesOrderId = salesOrderIds[m];
var salesOrder = record.load ({
type: record.Type.SALES_ORDER,
id: salesOrderId,
isDynamic: false
});
var salesOrderLineCountClosure = salesOrder.getLineCount({
sublistId: 'item',
});
for(var n = 0; n < salesOrderLineCountClosure; n++) {
var salesOrderClosure = salesOrder.setSublistValue ({
sublistId: 'item',
fieldId: 'isclosed',
line: n,
value: true
});
log.debug ({
title: 'SO line closure'+n,
details: salesOrderClosure
});
salesOrder.save({
enableSourcing: false,
ignoreMandatoryFields: false
});
}
}
答案 0 :(得分:0)
您有两个装入销售订单的实例。在这里
var currentSalesOrder = record.load ({
type: record.Type.SALES_ORDER,
id: salesOrderIds[i],
isDynamic: false
});
还有这里
var salesOrder = record.load ({
type: record.Type.SALES_ORDER,
id: salesOrderId,
isDynamic: false
});
可能是您两次加载同一条记录,然后尝试保存该记录时,系统会引发错误。