Suitescript错误-RCRD_HAS_BEEN_CHANGED-转换为发票后结清销售订单

时间:2019-07-23 21:27:52

标签: netsuite suitescript suitescript2.0

我的代码(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
                    });

                }
            }

1 个答案:

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

可能是您两次加载同一条记录,然后尝试保存该记录时,系统会引发错误。