使用并行处理时,如何检查所有子WP是否结束?

2020-08-27 04:44发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)好吧,假设我必须处理总计50个W...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


好吧,假设我必须处理总计50个WP(在特定时间最多限制为10个),如何检查所有子WP是否已终止?

当然,它们具有相同的过程,但是由于外部因素,它们的处理时间可能会略有不同。 当前已完成,并在主程序中放入多少个WP,然后检查它们是否具有相同的值。

但是它不起作用。 我认为将会有某种标准的FM来检查以跟踪所有子WP。

任何想法都会受到赞赏。

3条回答
浮生未央
2020-08-27 04:55 .采纳回答

对于大规模并行处理,请构建"工作包"以首先使用功能模块进行处理。 在包处理的结构中,添加一个GUID字段,然后为每个包获取一个。

然后,执行如下任务,其中 -guid是您创建的GUID。

通话功能" Z_YOUR_FM"
         开始新任务 -guid
         在任务结束时调用on_ret ON 
....

" on_ret"方法应具有导入参数

方法ON_RET
     输入
       !P_TASK类型GUID_32。

   方法on_ret。

     数据:lt_data TYPE...。
           lv_frtext TYPE char255,
           lv_subrc TYPE sy-subrc,
           lv_msg TYPE bapiret2-消息。

     字段符号:
            TYPE gty_pack。

     在guid = p_task的地方删除gt_task。

     从功能" Z_YOUR_FM"获得的结果
     导入et_rfc = lt_data
               ev_subrc = lv_subrc
               ev_frtext = lv_frtext。

     使用表键guid = p_task读取表gt_pack
     分配。
 *如果读取失败,我们希望看到转储
 ...


   终结法。
 

在该方法内部,阅读您的工作包表并将其标记为已处理。 您甚至可以使用" start_timestampl"和" end_timestampl",以便可以跟踪哪个工作包消耗了多少时间。 这样您就可以知道哪个软件包已经被处理。

要控制使用的最大进程数,我使用了一个附加表" gt_tasks",该表在这样的" worker_get"方法中处理

 TYPES:BEGIN OF gty_task,
            TYPE类型的时间戳,
            guid类型guid_32,
         结束于gty_task。
   数据:GTY_TASK的GT_TASK类型表。

 方法WORKER_GET
     输入
       !IV_GUID类型GUID_32
     返回
       value(RV_OK)类型ABAP_BOOL。  
方法worker_get。 常量:lc_task_max TYPE i VALUE 5。" <<<最大进程数 字段符号: TYPE gty_task。 ****************************************************** ******************** 检查:lines(gt_task)。 获取时间戳字段 -timestampl。 -guid = iv_guid。 rv_ok = abap_true。 "请参阅上面的检查

在循环中,在其中处理工作包的地方,等待这样的免费过程。

在gt_pack ASSIGNING 处循环播放。
       等待异步任务直到(me-> worker_get(iv_guid =  -guid)EQ abap_true)。
 "等待直到me-> worker_get(iv_guid =  -guid)EQ abap_true。" <<<在较旧的系统中,需要使用

 

最后,等待最后一个过程完成!

等待异步任务(gt_task IS INITIAL)。
 

一周热门 更多>