设置交易之间的值

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

我正在尝试使用工作流操作脚本将采购订单上的项目的费率设置为销售订单上名为成本的自定义交易列,但我发现在多行采购订单上完成此操作存在问题。

salesOrderRecord.selectLine({
  sublistId: 'item',
  line: j
});

salesOrderRecord.setCurrentSublistValue({
  sublistId: 'item',
  fieldId: 'custcol1',
  value: itemRate
});

// Log

salesOrderRecord.commitLine({
  sublistId: 'item'
});

当采购订单有一项时,它可以正常工作,但当采购订单有多个项目/行时,它会完全停止。它在

.commitLine
方法之前停止(在日志处),并且不会继续执行脚本。

如果我将

.setCurrentSublistValue
.commitLine
方法放入
try
块中,它会正确运行整个采购订单并记录销售订单记录已保存(使用
.save()
),但是当我检查时,费用没有改变。

suitescript suitescript2.0
1个回答
0
投票

遍历每个采购订单行项目,并使用适当的“费率”值填充相应销售订单行项目的“成本”字段。

示例:

/** 
  • 此脚本迭代每个采购订单行并设置相应销售订单行的“成本”字段

  • 采购订单行的“费率”值。

*/

函数 copyPORateToSOCost(newRecord) {

var purchaseOrderId = newRecord.id;

var purchaseOrder = record.load({ 

    type: record.Type.PURCHASE_ORDER, 

    id: purchaseOrderId 

});



var salesOrderId = newRecord.getValue('customfield_sales_order_id'); // Assuming you have a custom field to link the Sales Order

var salesOrder = record.load({ 

    type: record.Type.SALES_ORDER, 

    id: salesOrderId 

});



for (var i = 0; i < purchaseOrder.selectNewLineCount({ sublistId: 'item' }); i++) {

    var purchaseOrderLine = purchaseOrder.selectNewLine({ sublistId: 'item',fieldId: 'item' }, i);

    var itemId = purchaseOrderLine.getValue('item');



    // Find the corresponding Sales Order line based on item ID

    var salesOrderLine = findMatchingSalesOrderLine(salesOrder, itemId);

    if (salesOrderLine) {

        var rate = purchaseOrderLine.getValue('rate'); 

        salesOrderLine.setValue('custcol_cost', rate); // Assuming "custcol_cost" is the custom field name on Sales Order

    }

}



record.save(salesOrder);

}

// 用于查找与项目 ID 匹配的销售订单行的辅助函数

函数 findMatchingSalesOrderLine(salesOrder, itemId) {

for (var j = 0; j < salesOrder.selectNewLineCount({ sublistId: 'item' }); j++) {

    var salesOrderLine = salesOrder.selectNewLine({ sublistId: 'item', fieldId: 'item' }, j);

    if (salesOrderLine.getValue('item') === itemId) {

        return salesOrderLine;

    }

}

return null;

}

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