You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:12:46