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

aRFC并行处理中是否可通过TABLES参数修改主程序ITAB值?

问题根本原因

aRFC并行执行时,每个任务都会启动独立的用户会话,你调用aRFC时传入的内表是值拷贝,并非主程序内表的引用。每个FM里修改的只是当前会话里的内表副本,如果你没有主动接收任务返回的结果,这些修改自然不会同步到主程序的原内表中,你之前的写法是不支持直接修改主程序内表的。

解决方案

按以下步骤调整代码即可正常获取并行任务的返回结果:

步骤1:确认aRFC函数接口配置

检查函数Z_PP_PARA_TEST的接口属性,确保zpara_target和ztpp6040_change两个TABLES参数的「passed by value」选项没有勾选(默认不勾选即可支持返回)。

步骤2:修改返回接收子程序,主动接收返回结果

你当前的RECEIVE RESULTS FROM FUNCTION语句没有指定接收参数,是无法获取FM处理后的内表数据的,调整代码如下:

FORM return_z_pp_para_test USING taskname.
  DATA: lt_task_6040 TYPE STANDARD TABLE OF zspp6040_para,
        ls_task_6040 TYPE zspp6040_para.

  " 主动接收aRFC返回的内表数据到临时内表
  RECEIVE RESULTS FROM FUNCTION 'Z_PP_PARA_TEST'
    TABLES
      ztpp6040_change = lt_task_6040.

  " 将当前任务的处理结果合并到主程序的总表中
  LOOP AT lt_task_6040 INTO ls_task_6040.
    MODIFY gt_6040_para FROM ls_task_6040
      TRANSPORTING msgty msgtx
      WHERE matnr = ls_task_6040-matnr
        AND seqno = ls_task_6040-seqno.
    IF sy-subrc <> 0.
      APPEND ls_task_6040 TO gt_6040_para.
    ENDIF.
  ENDLOOP.

  SUBTRACT 1 FROM g_progs.
  ADD 1 TO g_eprog.
ENDFORM.

优化建议(可选)

  • 现在你每次调用aRFC都传入了全量的gt_para_test,建议拆分后只传入当前任务需要处理的对应物料的行,减少数据传输开销,提升并行效率。
  • 可以在RECEIVE语句中增加异常捕获,避免个别任务执行异常导致整个主程序dump。

内容的提问来源于stack exchange,提问作者Park Chan Seul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:15:08