如何在Suitelet的OnRequest中获取当前Item Fulfillment及Sales Order记录ID
获取Item Fulfillment及关联Sales Order记录ID的方法
你的当前代码使用了硬编码的固定记录ID,要实现动态获取当前Item Fulfillment及关联Sales Order的ID,需要做以下调整:
1. 获取当前Item Fulfillment记录ID
Suitelet需要通过请求参数接收当前Item Fulfillment的ID——通常可以从Item Fulfillment记录页面的自定义按钮触发Suitelet时,通过URL参数传递该ID。在onRequest函数中,直接从请求对象提取参数:
var ifId = context.request.parameters.id;
如果是自定义按钮触发,需要在按钮的脚本配置中设置传递当前记录ID,参数名保持为id即可。
2. 从Item Fulfillment中提取关联Sales Order ID
加载Item Fulfillment记录后,通过record.getValue()方法读取关联的Sales Order字段值,该字段的系统ID为createdfrom:
var itemFulfillmentRec = record.load({ type: record.Type.ITEM_FULFILLMENT, id: ifId }); var soId = itemFulfillmentRec.getValue({ fieldId: 'createdfrom' });
修改后的完整代码
define(['N/render', 'N/record', 'N/xml', 'N/format', 'N/file'], function(render, record, xml, format, file) { /** *@NApiVersion 2.x * @NScriptType Suitelet */ function onRequest(context) { // 获取当前Item Fulfillment记录ID var ifId = context.request.parameters.id; if (!ifId) { context.response.write('缺少Item Fulfillment记录ID参数'); return; } var xmlTemplateFile = file.load('Templates/PDF Templates/packingSlipTemplate.xml'); var renderer = render.create(); renderer.templateContent = xmlTemplateFile.getContents(); // 加载当前Item Fulfillment记录 var itemFulfillmentRec = record.load({ type: record.Type.ITEM_FULFILLMENT, id: ifId }); renderer.addRecord('record', itemFulfillmentRec); // 获取并加载关联的Sales Order记录 var soId = itemFulfillmentRec.getValue({ fieldId: 'createdfrom' }); renderer.addRecord('salesorder', record.load({ type: record.Type.SALES_ORDER, id: soId })); var iFFile = renderer.renderAsPdf(); context.response.writeFile({file:iFFile, isInline: true}); } return { onRequest: onRequest } });
关键注意事项
- 确保触发Suitelet的自定义按钮配置了传递当前记录ID的参数,参数名需与代码中的
id保持一致; - 为Suitelet脚本分配读取Item Fulfillment和Sales Order记录的权限;
- 保留参数校验逻辑,避免因缺少ID导致脚本运行报错。
内容的提问来源于stack exchange,提问作者Mango
相关产品推荐
相关产品推荐

