无法动态获取PO ID实现PO子列表数据同步至入库单子列表求助
动态适配任意PO ID的实现方案
核心思路
入库单与采购订单(PO)属于关联关系,通过当前入库单的来源PO标准字段createdfrom,可以动态获取到关联的PO ID,用这个动态ID加载对应PO记录,就能实现适配任意PO的逻辑。
修改后的完整代码
function pageInit(scriptContext) { // 1. 从当前入库单获取关联的PO ID var poId = scriptContext.currentRecord.getValue({ fieldId: 'createdfrom' }); // 无关联PO时直接终止执行 if (!poId) { return; } try { // 2. 动态加载关联的PO记录 var purchaseOrder = record.load({ type: record.Type.PURCHASE_ORDER, id: poId, isDynamic: true }); var poLineCount = purchaseOrder.getLineCount({ sublistId: 'item' }); if (poLineCount > 0) { for (var i = 0; i < poLineCount; i++) { scriptContext.currentRecord.selectNewLine({ sublistId: 'items' }); // 从PO的item子列表读取目标字段值 var poFieldValue = purchaseOrder.getSublistValue({ sublistId: 'item', fieldId: 'custcitem_po', line: i }); scriptContext.currentRecord.setCurrentSublistValue({ sublistId: 'items', fieldId: 'custrecord_sample', value: poFieldValue, ignoreFieldChange: true }); scriptContext.currentRecord.commitLine({ sublistId: 'items' }); } } } catch (e) { // 捕获加载PO失败的异常,避免脚本崩溃 log.error('PO加载失败', e.message); } }
关键改动说明
- 动态获取PO ID:用
scriptContext.currentRecord.getValue('createdfrom')替代写死的'1234',自动适配当前入库单关联的PO。 - 增加前置校验:判断
poId是否存在,避免无关联PO时执行后续代码引发错误。 - 异常捕获:用
try-catch包裹PO加载逻辑,处理PO不存在、权限不足等异常场景,提升脚本稳定性。 - 变量拆分优化:将PO子列表字段值单独提取为
poFieldValue,让代码更易读和维护。
注意事项
- 如果你的入库单使用自定义字段关联PO,只需将
fieldId: 'createdfrom'替换为对应的自定义字段ID即可。 - 确保脚本拥有PO记录的读取权限,否则会出现加载失败的异常。
内容的提问来源于stack exchange,提问作者aly
相关产品推荐
相关产品推荐

