点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,
情况:需要扩展具有特定视图的物料,例如工厂,仓库,销售组织等。由于数据量非常大,因此决定在后台任务中开始扩展过程。
- 创建FM:"在后台任务中调用函数Z_ASSIGN_PROC"
- 在FM内:按材料循环,在循环内:BAPI_MATERIAL_SAVEDATA
但是,在后台任务中运行fm之后,我看到SM50中有许多DIA进程。 他们占用了所有免费的流程,这对系统造成了很大的压力...
有人可以解释为什么会这样吗?
为什么要创建DIA进程而不是BTS?
是否可以将BAPI_MATERIAL_SAVEDATA的DIA进程包装到一个BTC进程中?
主程序如下:
lt_matnr处的循环分配字段符号()。 如果lines(lt_id)= c_counter。 做。 循环在lt_id处分配字段符号( )。 数据(lv_tabix)= sy-tabix。 调用函数" STATUS_OF_BACKGROUNDTASK" 出口 tid = -tid 桌子 errortab = lt_errtab 例外情况 通讯= 1 记录= 2 回滚= 3 其他= 4。 如果sy-subrc = 0。 数据(lv_exit)= abap_true。 删除lt_id索引lv_tabix。 出口。 其他。 lv_exit = abap_false。 万一。 结束循环。 如果lv_exit = abap_true。 出口。 万一。 恩多。 万一。 lv_taskname = 。 调用函数" Z_ASSIGN_PROC" 在后台任务 出口 iv_matnr = it_werks = s_werks [] it_lgnum = s_lgnum [] 例外情况 communication_failure = 1 resource_failure = 2 system_failure = 3 其他= 4。 调用函数" ID_OF_BACKGROUNDTASK" 输入 tid = ls_tid fnum = lv_fnum。 附加值#( tid = ls_tid fnum = lv_fnum )到lt_id。 "开始'Z_ASSIGN_PROC' 提交工作。 结束循环。
FM Z_ASSIGN_PROC喜欢:
lt_t001w处的循环分配字段符号()。 "填充bapi的结构 调用函数" BAPI_MATERIAL_SAVEDATA" ... 如果sy-subrc = 0。 调用函数" BAPI_TRANSACTION_COMMIT" 出口 等待= abap_true。 万一。 在lt_warehouse循环,分配field-symbol( ),其中werks eq -werks。 "填充bapi的结构 调用函数" BAPI_MATERIAL_SAVEDATA" ... 如果sy-subrc = 0。 调用函数" BAPI_TRANSACTION_COMMIT" 出口 等待= abap_true。 万一。 结束循环。 结束循环。
后台任务表示事务RFC(tRFC)。
所有RFC仅在DIA工作流程中运行。
不,它不能在BTC工作流程中运行。
p>
有一些配置文件参数可调整可分配给RFC任务的DIA工作流程的最大数量。 您应该向管理员询问一些建议,以减轻系统压力。
您可以使用背景RFC 一次,在执行标准事务期间以防止破坏LUW。
但是在执行FM期间,请使用 RFC异步调用并处理当前正在运行的进程数,请使用RFC服务器组(RZ12)
NB:还可以处理调用中的最低异常:system_failure,communication_failure和resource_failure。
,或者,如果您不(不想)使用 一组,自己处理任务数(调用后为+1,被调用方法为-1)。
注意:要获取最大/可用的进程数,请在循环开始时使用FM SPBT_INITIALIZE。
如果您确实要使用批处理,则不要 不会调用FM RFC模式,而是在一个小报告中重写代码,并改用JOP_OPEN/SUBMIT/JOB_CLOSE。
一周热门 更多>