sap abap查找增强的方法和程序查找增强方法 联系客服

发布时间 : 星期六 文章sap abap查找增强的方法和程序查找增强方法更新完毕开始阅读34db6fffbed5b9f3f80f1cc5

文章最后是查找增强程序源码

1、通过程序——查找第二代、第三代增强方法。

找到出口名称,在smod里面查找相应的增强组件,再去cmod里面创建包含多个组件的增强项目,再去实现这些增强(屏幕增强、结构增强字段增强等)。

其他方法:

***方法一****************************************

通过SE30,运行TCODE后,点Evaluate后,查看运行时间分析评估:命中清单。 找以“exit”开头的SAP程序,如:EXIT_SAPLIE01_007, 这个FUNCTION就是TCODE提供的一个出口。

至于如何查看这个增强是属于哪个SMOD,能够查阅 MODSAP这个表(SAP Enhancements).

***方法二****************************************

通过SE37中的:MODX_FUNCTION_ACTIVE_CHECK 函数来找,

文章最后是查找增强程序源码

在函数的最后一行打个断点,再运行TCODE的,如果有增强则会跳入DEBUG界面,在DEBUG界面中,查看L_FUNCNAME字段对应的值,此值就是就是要找的出口, 再去SE11中通过MODSAP来查看出口对就的是那个SMOD, 接下来就可以在CMOD中创建增强组了,把找到的增强填入, 最后根据实际的业务进行处理。 以上的两种方法是用来找第二代增强。

***方法三**************************************** 找BADI的方法。

先运行SE24,查看类对象CL_EXITHANDLER, 在其方法:GET_INSTANCE的14行( CALL METHOD CL_EXITHANDLER=>GET_CLASS_NAME_BY_INTERFACE)打上一个断点。

接下来运行事务代码,当有BADI是将会被执行,这时在DEBUG模式下,会进入类CL_EXITHANDLER 的GET_INSTANCE 方法,按F6执行这个方法之后,点参数

EXIT_NAME查看其对应的值,所有的方法实现都在此类对象中,此时就是我们所要找的BADI。

实现BADI的方法

进入SE19,选择Create Implementation中的Classic BADi 另一种方法(跟上面的差不多)

查找源程序,在程序中查找代码段 CL_EXITHANDLER => GET_INSTANCE 就可以找到该程序所用到的BADI。

***方法四**************************************** 通过开发类找出口

以ME21N事务代码为例,进入TCODE后,选择点系统 -》状态 -》程序名称,双击后进入到程序中,再点菜单栏中的 转到 -》属性,找到开发类的名称,比如ME21N的开发类是?ME?。

如果是打出口,则到SMOD事务代码中,点 加强边的按纽,在开发类中输入?ME?,回车后就会显示出所有的出口。

找BADI也是同样的过程,只是到SE18中去确定BADI

不过此方法找出来的出口,不是针对某个程序的出口,而是把开发类所对应的出口全找出口,所以

还要通过自己的判断找到所需求的出口 ******************************************* 增强相关函数和表格 Function:

[1].DYNP_VALUES_READ

[2]. MODX_ALL_ACTIVE_MENUENTRIES(菜单增强) [3].MODX_FUNCTION_ACTIVE_CHECK(出口函数增强)

文章最后是查找增强程序源码

[4].MODX_MENUENTRY_ACTIVE_CHECK(菜单增强) [5].MODX_SUBSCREEN_ACTIVE_CHECK(屏幕增强)

源码:复制程序带se38 程序里运行即可。

TABLES : tstc, \事务代码)

tadir, \资源库对象的目录) modsapt, \增强-短文件) modact, \修正)

trdir, \系统表 TRDIR) tfdir, \功能模块)

enlfdir, \功能模块的附加属性) tstct. \事务代码文本) DATA : jtab LIKE tadir OCCURS 0 WITH HEADER LINE. DATA : field1(30).

DATA : v_devclass LIKE tadir-devclass.

SELECTION-SCREEN BEGIN OF BLOCK a01 WITH FRAME TITLE text-001. SELECTION-SCREEN SKIP.

PARAMETERS : p_tcode LIKE tstc-tcode OBLIGATORY. SELECTION-SCREEN SKIP.

SELECTION-SCREEN END OF BLOCK a01.

START-OF-SELECTION.

SELECT SINGLE * FROM tstc WHERE tcode EQ p_tcode. IF sy-subrc EQ 0.

SELECT SINGLE * FROM tadir WHERE pgmid = 'R3TR' AND object = 'PROG'

AND obj_name = tstc-pgmna. MOVE : tadir-devclass TO v_devclass. IF sy-subrc NE 0.

SELECT SINGLE * FROM trdir WHERE name = tstc-pgmna. IF trdir-subc EQ 'F'.

SELECT SINGLE * FROM tfdir WHERE pname = tstc-pgmna. SELECT SINGLE * FROM enlfdir

WHERE funcname = tfdir-funcname. SELECT SINGLE * FROM tadir WHERE pgmid = 'R3TR'

文章最后是查找增强程序源码

AND object = 'FUGR'

AND obj_name = enlfdir-area. MOVE : tadir-devclass TO v_devclass. ENDIF. ENDIF.

SELECT * FROM tadir INTO TABLE jtab

WHERE pgmid = 'R3TR' AND object = 'SMOD' AND devclass = v_devclass. SELECT SINGLE * FROM tstct WHERE sprsl EQ sy-langu AND tcode EQ p_tcode.

FORMAT COLOR COL_POSITIVE INTENSIFIED OFF. WRITE:/(12) '事务代码 - ', 13(20) p_tcode,

34(10) '功能 - ' , 45(50) tstct-ttext. SKIP.

IF NOT jtab[] IS INITIAL. WRITE:/(95) sy-uline.

FORMAT COLOR COL_HEADING INTENSIFIED ON. WRITE:/1 sy-vline, 2 'Exit Name', 21 sy-vline , 22 'Description', 95 sy-vline.

WRITE:/(95) sy-uline. LOOP AT jtab.

SELECT SINGLE * FROM modsapt WHERE sprsl = sy-langu AND name = jtab-obj_name.

FORMAT COLOR COL_NORMAL INTENSIFIED OFF. WRITE:/1 sy-vline,

2 jtab-obj_name HOTSPOT ON, 21 sy-vline ,

22 modsapt-modtext, 95 sy-vline. ENDLOOP.

WRITE:/(95) sy-uline. DESCRIBE TABLE jtab. SKIP.

FORMAT COLOR COL_TOTAL INTENSIFIED ON. WRITE:/ '用户出口数量:' , sy-tfill.