Map Reduce场景下如何为Group Invoice脚本动态传入recordId参数
多队列环境下Map Reduce脚本动态传入recordId生成Group Invoice的解决方案
你当前代码里的recordId: '2'是硬编码值,要动态传入最新的recordId,核心是根据Map Reduce脚本的触发场景来获取目标单据ID,以下是几种常见场景的实现方式:
1. 事件触发场景(如Invoice创建/修改时触发)
如果你的Map Reduce是在Invoice记录的事件(比如afterSubmit)中触发,直接从事件上下文里获取当前单据的ID即可:
// 事件脚本中获取当前触发的Invoice ID var currentRecordId = context.newRecord.id; // 动态传入recordId执行脚本 var result = actionMod.execute({ id: 'groupinvoices', recordType: 'invoiceGroup', params: { recordId: currentRecordId, invoicelist: invValues } });
2. 定时调度场景
如果是定时执行Map Reduce处理最新单据,先通过搜索查询出符合条件的最新Invoice ID,再传入参数:
// 搜索最新的待分组Invoice(可根据业务调整过滤条件) var invoiceSearch = search.create({ type: 'invoice', filters: [['status', 'is', 'Open']], columns: [search.createColumn({name: 'internalid', sort: search.Sort.DESC})] }); var latestInvoiceId = invoiceSearch.run().getRange(0, 1)[0].getValue('internalid'); // 传入动态获取的ID var result = actionMod.execute({ id: 'groupinvoices', recordType: 'invoiceGroup', params: { recordId: latestInvoiceId, invoicelist: invValues } });
3. 外部调用/手动触发场景
如果是其他脚本或手动触发该Map Reduce,直接将外部传入的recordId参数传递进去:
// 接收外部传入的目标单据ID function generateGroupInvoice(targetRecordId) { var result = actionMod.execute({ id: 'groupinvoices', recordType: 'invoiceGroup', params: { recordId: targetRecordId, invoicelist: invValues } }); return result; }
多队列环境注意事项
因为是多队列并行运行,获取recordId后建议立即标记该单据的状态(比如设为"处理中"),避免多个队列同时处理同一条记录,造成重复生成Group Invoice的问题。
内容的提问来源于stack exchange,提问作者Anu Ashish
相关产品推荐
相关产品推荐

