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

BODS全局变量存储多IDOC值、运行时打印及邮件发送方案问询

BODS多IDOC编号存储及邮件输出解决方案

问题根因

BODS的标量类型全局变量仅支持存储单个值,调用sql()函数返回多记录结果集时,默认仅返回第一条记录的第一个字段值,因此原有写法只能获取到第一个IDOC编号。

推荐方案:字符串聚合存储(适配邮件发送场景,实现最简单)

直接通过数据库原生聚合函数,将多个IDOC编号拼接为单个分隔符分隔的字符串,存入标量全局变量即可,同时单独统计总数量:

  • 步骤1:创建2个标量全局变量:存储IDOC列表的$GV_IDOC_NO_LIST(varchar类型,长度建议设为2000以上)、存储总数量的$GV_IDOC_COUNT(int类型)
  • 步骤2:根据你使用的数据源数据库类型,选择对应聚合语法赋值:

    MySQL数据源语法:

    $GV_IDOC_COUNT = sql('DS_STG','SELECT COUNT(DISTINCT IDOC_NO) FROM table_xyz');
    $GV_IDOC_NO_LIST = sql('DS_STG','SELECT GROUP_CONCAT(DISTINCT IDOC_NO SEPARATOR \', \') FROM table_xyz');
    

    Oracle数据源语法:

    $GV_IDOC_COUNT = sql('DS_STG','SELECT COUNT(DISTINCT IDOC_NO) FROM table_xyz');
    $GV_IDOC_NO_LIST = sql('DS_STG','SELECT LISTAGG(DISTINCT IDOC_NO, \', \') WITHIN GROUP (ORDER BY IDOC_NO) FROM table_xyz');
    

    SQL Server数据源语法:

    $GV_IDOC_COUNT = sql('DS_STG','SELECT COUNT(DISTINCT IDOC_NO) FROM table_xyz');
    $GV_IDOC_NO_LIST = sql('DS_STG','SELECT STRING_AGG(DISTINCT IDOC_NO, \', \') FROM table_xyz');
    
  • 步骤3:打印验证多值输出,在脚本中加入如下打印语句,运行作业后可在作业执行日志中查看完整输出:
    print('本次推送IDOC总数量:' || cast($GV_IDOC_COUNT as varchar(10)));
    print('本次推送IDOC编号列表:' || $GV_IDOC_NO_LIST);
    
  • 步骤4:邮件内容拼接:在BODS邮件组件的正文中直接引用上述两个变量即可,若需要IDOC编号每行显示,可将聚合的分隔符替换为换行符\n。

可选方案:数组变量存储(适用于后续需要逐个处理IDOC的场景)

如果你使用的是BODS 4.2及以上版本,支持创建数组类型的全局变量存储多值:

  • 创建数组类型全局变量$GV_IDOC_ARR,设置对应数据类型和足够的数组长度
  • 通过数据流或循环脚本,将查询到的所有IDOC编号依次写入数组即可,打印时可循环遍历数组输出每个值。

内容的提问来源于stack exchange,提问作者sayan nandi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:18:02