资讯详情

SAP 中如何寻找增强

搜索增强自开发程序:ZGET_ZQ;ZFIND

参考链接:http://www.cnblogs.com/huangjianisgood/archive/2012/10/10/2717713.html

SAP 如何寻找增强?

方法一、利用TCODE寻求增强(第二代增强)

执行程序(源代码后附),在选择屏幕时输入需要增强的程序TCODE,执行后,会有一个关于如何增强这一点的列表。SMOD增强。

点击进去,手动寻找增强需求。

这是第二代增强

方法二:利用系统函数寻找 MODX_FUNCTION_ACTIVE_CHECK

在这个FUNCTION代码最终添加了一个断点。执行需要增强的TCODE,如果有增强,它会自动跳入DEBUG界面。在DEBUG界面,查看f_tab显示在这里的字段Smod关于这个TCODE所有增强项目清单。这些增强都属于EXIT_XXXXXX_XXX这种形式。

至于如何查看这个增强属于哪个SMOD,可自行查阅 MODSAP这个表(SAP Enhancements).

这是第二代增强。

还有一些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(屏幕增强)

与上述一样,这些使用方法可以根据各种情况进行增强。

方法三:从程序代码中找到

打开需要增强的事务SYSTEM——》status,双击进入PROGRAM,查看所有的subroutines, 关注所有形似 userexit_******* 这种需要通过描述来增强FORM。这是第一代的增强。

方法四,针对BADI的增强

转摘自网上

1、badi存储对象的信息SXS_INTER, SXC_EXIT, SXC_CLASS 和SXC_ATTR 这四个表中。

2、sap将调用程序cl_exithandler=>get_instance判断对象是否存在,并返回实例;事实上,get_instance上述表及其视图(V_EXT_IMP 和 V_EXT_ACT)进行查询和搜索。

3.基于这个机制,我查了一下ST05来监控一个TCODE跟踪,然后选择查找上述表和视图的操作,以获得相关信息BADI。

4、se18 查找接口,se19 用户增强可以通过实现接口来实现。

************************************************************************************************************************************首先,让我们解释什么是出口。顾名思义,这是一个必须执行到最后的程序。

为什么会有出口?由于正常的业务系统不能满足实际需求,可以在出口中添加一些功能来满足要求,这就是为什么它也被称为增强。我觉得它类似于给操作系统补丁。

在Sap中出口是标准程序最终调用的函数或功能模块,该函数或功能模块的输入已经通过Sap定义好。

自己写的SAP如果在系统升级时更改标准程序,则保留出口程序SAP系统升级时会被覆盖。

以下是何时使用出口和出口的类型:

1:在业务检查中,如在工厂发货,只能使用某种移动类型。

2:当需要界面增强时,例如,用户需要大写字段,但最终用户不按规范操作,这也可以在出口中自动转换。一些模块甚至可以定制数据库字段,并在出口中添加字段输入。其他模块可以检查输入数据,甚至实现自动替换等功能。

3:有不规则业务时,如根据某些条件定价,可以根据某些条件从自己定义的表中设置值

4.搜索帮助的出口可用于Sap标准的搜索帮助做权限控制。

等等。

SAP基本用户出口有四种类型:

1.菜单出口-Menu Exits

定义自己的菜单

2.屏幕出口-Screen Exits

定义你的屏幕

3.出口功能模块-Function Module Exits

在SAP在应用程序中添加功能

4.关键字出口-Keyword Exits

在ABAP/4字典中的关键字数据元素添加文档。因此,您按下使用这些数据元素的字段F1之后会有你自定义的解释文档

因为出口是被子Sap如何提前找到自己需要的出口?

1:通过配置文档的帮助和SAP library 寻找业务系统的出口,sap library 在‘implementation guide在配置功能执行按钮的左侧通常有一个描述文档来描述相关的出口。

2:为了方便我们在文章后面列出所有的出口名称和描述。

下面具体介绍如何写出口程序:

管理出口程序的修改,sap提供专门用于管理出口程序的事务,事务代码是CMOD。

************************************************************************************************************************************sap共有三代用户出口: 1、第一代 sap提供空代码的子过程,用户可以添加自己的代码来控制自己的需求。这种增强需要修改sap标准代码。 示例:USEREXIT.. in SAPMV45A

2、第二代 sap提供的是CUSTOMER-FUNCTION,它是通过SMOD和CMOD完成实现。

3、第三代 sap第三代用户出口是BADI,他的调用方式是CALL METHOD (instance),(相关的TCODE是SE18和SE19),可通过EXIT_HANDLER这个单词查找BADI。

对于第一代增强,可以用以下方法找到增强:打开要增强的程序,点击工具栏上的Display Object List按钮,选择Subroutines,查找以“UserExit根据子程序前的注释文档,在子程序开始时查找用户出口

对于第二代增强,可以用以下方法找到增强

顾名思义,用户增强通常包括以下三类,即增强SAP可能没有提供的功能(后台配置无法实现). 1.E Enhancement exits :就是常说User_exit (用户出口) 使用SE37搜索EXIT*大部分函数都是做的exit它通常包含一个Z开头 的程序. SE16查询TFDIR(函数表)输入EXIT*也可. 2.C GUI codes( GUI接口增强) 3. S Subscreens (屏幕增强) Enhancement在表MODSAP可看到,而TFDIR字段 MAND(值为C表示该出口函数被激活).使用SMOD(CMOD)当然可激活exit function,有时很难找到相关的Enhancement使用以下程序激活出口函数.

REPORT Zactexitfun . data ztfdir like tfdir . * select single * from tfdir into ztfdir * where FUNCNAME = * 'EXIT_SAPMM06E_013'. * ztfdir-MAND = 'C' . * update tfdir from ztfdir. * 将EXIT_SAPMM06E_用实际需要代替013exit函数名 update tfdir set MAND = 'C'. where FUNcname = 'EXIT_SAPMM06E_013'.

***当然也可SE16:MODSAP表enhancement输入EXIT_SAPMM06E_013然后得到enhancement name MM06E005后使用SMOD测试激活exit函数. 增强相关函数和表格 Function: [1].DYNP_VALUES_READ [2]. MODX_ALL_ACTIVE_MENUENTRIES(菜单增强) [3].MODX_FUNCTION_ACTIVE_CHECK(出口函数增强) 因为读者可能会接触user exit最多,除了附录光盘,还有一个搜索ZFINDEXIT程序外(有些exit另一种直接有效的方法是使用此函数,SE37设好断点后执行tcode如其有exit此函数将被调用. [4].MODX_MENUENTRY_ACTIVE_CHECK(菜单增强) [5].MODX_SUBSCREEN_ACTIVE_CHECK(屏幕增强) Table: [1]. TFDIR->function module table [2]. MODSAP->sap enhancement table [3]. TSDIR->Dynpro Areas CALL CUSTOMER SUBSCREEN(屏幕增强) [4]. CUATEXTS-> GUI Interface: Menu Texts Changed(GI 菜单文本增强)

***注意,为了确保一个出口被真正应用,必须同时激活相关程序(SE38)和出口函数(SMOD|CMOD,反正就是要保证tfdir-mandt=’C’,用程序也可.

*************************************************************************************************************1.1 SMOD包含具体的增强,而CMOD是包含一组SMOD编写的增强. 1.2 User exits (Function module exits)是sap提供出口,它的命名规则如下: EXIT_<program name><3 digit suffix> 示例:sd的VA01事务,对应的程序是SAPMV45A ,你会在程序里查到(用CALL CUSTOMER-FUNCTION字符串)如下代码:CALL CUSTOMER-FUNCTION '003' exporting xvbak = vbak xvbuk = vbuk xkomk = tkomk importing lvf_subrc = lvf_subrc tables xvbfa = xvbfa xvbap = xvbap xvbup = xvbup. 则exit calls function module的名称就是: EXIT_SAPMV45A_003

2、先试用SMOD建立一个SAP增强2.1、选择一个增强,如:SDVFX001 ,点击修改,进入sap增强维护屏幕;2.2、点击“组件”按钮,进入组件维护屏;2.3、将光标移到“功能模块名”,输入模块名,如:EXIT_SAPLV60B_001;2.4、选择“代码修改”按钮进入函数模块;2.5、双击函数模块的包含单元,进入包含单元加入自定义代码并激活保存;

3、使用CMOD建立增强项目3.1、输入自定义的项目名,点击“创建”;3.2、进入增强项目,选择“配置增强”,进入增强配置屏幕;3.3、输入增强名如:SDVFX0013.4、保存,并退出;

4、使用CMOD将增强项目激活,便大工告成。

如何查找*判断是否存在相应增强的定义(SMOD) select single name from modsapa into mod0-name where name = 'PPCO0002'. if sy-subrc = 0. endif. select single * from tadir into ps_tadir_db where pgmid = 'R3TR' and object = 'SMOD' and obj_name = 'PPCO0002'.

*判断是否存在相应增强项目的定义(CMOD) SELECT SINGLE name FROM MODATTR into mod0-name WHERE NAME = 'PPCO0002'..

*提取增强的定义的组件 (可以用此反查增强定义) select * from modsap where name = 'PPCO0002'.

*判断该增强是否移植到BADI实现*Enhancement & has already been migrated in Business Add-In definition select single migrated badi_def into (migrated, exit_name) from modsapa where name = modname. if sy-subrc = 0 and migrated = seex_true. message s621 with modname exit_name. check mode ne 'CHAM'. endif.

MODTYP 类型:E : 功能退出S : 屏幕T : 表C : GUI代码sap增强存在MODSAP表内

*获取增强组件的参见函数MOD_SAP_MEMBER_TEXT*获得退出功能模块的信息 select single * from tftit where "SPRAS" = '1' AND "FUNCNAME" = 'EXIT_SAPLCORE_001' if sy-subrc = 0. endif.

*值得学习的函数MOD_KUN_ACTIVATE(会操作相关报表)

标签: s621传感器对应耗材设定

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台