如何通过WORKFLOW和CUSTOM RECORD生成关联采购订单的送货单?
NetSuite 采购订单物料同步到自定义送货单解决方案
前置准备(必做)
先完善自定义送货单(Delivery Docket)的字段配置:
- 新增关联采购订单字段:类型选「List/Record」,关联「Purchase Order」,设为必填,记录好字段ID(比如
custrecord_dd_link_po) - 新增物料子列表:子列表类型选「Inline Editor」,添加以下字段:
- 物料(Item):List/Record类型,关联Item
- 数量(Quantity):Number类型
- 单位(Unit):List/Record类型,关联Unit(可选)
记录好子列表ID(比如custrecord_dd_item_sublist)
方案1:纯Workflow无脚本实现(适合零代码需求)
利用NetSuite原生Workflow的字段复制功能,无需编写代码:
- 修改现有触发「Create Delivery Docket」按钮的Workflow:
- 在「Go to Record」动作中,设置默认字段值,将当前采购订单的ID填充到自定义记录的「关联采购订单」字段
- 给自定义送货单新建一个独立Workflow:
- 触发条件:当「关联采购订单」字段被修改且不为空时触发
- 添加「Copy Fields from Record」动作:
- 源记录类型选「Purchase Order」,源记录取「关联采购订单」字段的值
- 字段映射:将采购订单的「Item」子列表字段(Item、Quantity、Unit)一一映射到自定义送货单的物料子列表对应字段
- 保存激活Workflow后,点击采购订单上的按钮,打开的自定义记录会自动同步PO物料
方案2:极简User Event脚本辅助(更稳定高效,适合基础编程能力)
如果纯Workflow的子列表复制出现字段映射问题,用极简NetSuite 2.1脚本实现:
- 新建User Event脚本,代码如下(替换注释中的自定义字段ID为你实际的ID):
/** * @NApiVersion 2.1 * @NScriptType UserEventScript */ define(['N/record'], (record) => { const beforeLoad = (context) => { // 仅在创建送货单时触发 if (context.type !== context.UserEventType.CREATE) return; // 从URL参数获取采购订单ID(Workflow打开时传递) const poId = context.request.parameters.po; if (!poId) return; const deliveryRec = context.newRecord; // 关联采购订单 deliveryRec.setValue({ fieldId: 'custrecord_dd_link_po', // 替换为你的关联PO字段ID value: poId }); // 加载采购订单 const poRec = record.load({ type: record.Type.PURCHASE_ORDER, id: poId }); const poLineCount = poRec.getLineCount({sublistId: 'item'}); // 循环复制物料行到送货单 for (let i = 0; i < poLineCount; i++) { deliveryRec.selectNewLine({sublistId: 'custrecord_dd_item_sublist'}); // 替换为你的子列表ID // 复制物料 deliveryRec.setCurrentSublistValue({ sublistId: 'custrecord_dd_item_sublist', fieldId: 'custrecord_dd_item', // 替换为你的物料字段ID value: poRec.getSublistValue({sublistId: 'item', fieldId: 'item', line: i}) }); // 复制数量 deliveryRec.setCurrentSublistValue({ sublistId: 'custrecord_dd_item_sublist', fieldId: 'custrecord_dd_quantity', // 替换为你的数量字段ID value: poRec.getSublistValue({sublistId: 'item', fieldId: 'quantity', line: i}) }); deliveryRec.commitLine({sublistId: 'custrecord_dd_item_sublist'}); } }; return {beforeLoad}; });
- 部署脚本到自定义送货单记录上,设置触发时机为「Create」
- 修改现有采购订单的Workflow按钮:
- 在「Go to Record」动作的「URL参数」中添加
po=${record.id},把当前PO的ID传递给自定义记录
- 在「Go to Record」动作的「URL参数」中添加
注意事项
- 自定义字段/子列表的ID必须替换为你实际创建的ID(可在NetSuite字段设置页面查看)
- 纯Workflow方案需确保子列表字段的类型与采购订单的Item子列表完全匹配,否则复制会失败
- 脚本方案需确保有足够的权限(比如采购订单的查看权限、自定义记录的编辑权限)
内容的提问来源于stack exchange,提问作者Johnny
相关产品推荐
相关产品推荐

