http://gdxnskhy.blog.163.com/blog/static/6652021920124344446342/
2012-05-03 16:55:09| 分类: SAP | 标签: |字号大中小 订阅
一,前因 标准报表MB51只是增加了ALV function供user选择是否需要显示更明细,如果在background job的情况,spool只能显示standard list。 有User提出需求,希望在后台执行时,能够直接跑出ALV格式的明细记录。 Standard format ![]() ALV format
二,需求 后台执行时能够直接跑出如同点击 三,方案 通过追查MB51的source program RM07DOCS,可以发现MB51在点击 该subroutine没有任何参数,也就是说,所有的变量都是global或者local的,report display的数据源也全部存在全局变量list[]里。 这样就给了我们机会能够在user跑完MB51进行list output时做modification。 在enhancement framework出来之前,针对这种状况,我们只能期待SAP有提供享用的user-exit,或者将list[] export到parameter ID中 再终结的方法就是参考MB51全部重新写一个ZBM51的程序出来,幸好这支report不是很复杂,不然~ 然而,有了enhancement framework之后,提供可以在任何CLASS/FUNCTION/INCLUDE的begin line & end line加上自己需要的处理代码的机会。 所以,针对此次修改的目的,找到MB51程序中默认输出的subroutine,在end-of-selection event之后的subroutineoutput_list(line 1200)中进行修改。 修改步骤如下: 1,进入enhancement修改状态 2,显示implicit enhancement ![]() 3,创建enhancement spot Step 1. 方法1,直接右击上图中“引号行”,按下图方式选择menu ![]() 方法2,置鼠标焦点于“引号行”,从menu进行创建 ![]() Step 2.选择enhancement mode(差别在于一个只定义,一个需要) ![]() Step 3.创建新的enhancement implementation ![]() Step 4. 创建composite enhancement implementation, 新建一个composite enhancement implementation,他可以用来收集一般的enhancement implementation,后续检查除错会比较方便。 (如无特殊需求,请不要在创建时勾选上个画面的复选框,use this enhancement implementation without query in future,不然建好了想重来,就看不到了) ![]() Step 5.创建enhancement implementation 4,对implementation进行coding Step 1. ![]() Step 2.已经可以在如下字段写入自己想要的代码 ![]() 代码如下,我们只需要在background时,才会直接调用detail list,这样spool中就会同时存在ALV/STANDARD的两种format,看user需要啦~~ ![]() Step 3.保存&激活 ![]() 5,大功告成,测试看看。 四,结果 前台跑: ![]() 后台跑:会比正常的多一个All spool lists ![]() 点击all spool lists会出现两个spool no,因为此处我既保留了原有的format,又有新的ALV format,号码大一点的就是ALV格式的啦。 ![]() |