SAP 增强-出口选找方法-全部
■ 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系统升级的时候会被覆盖。下面介绍一下什么时候需要使用出口以及出口的种类:
- 在业务检查时,比如在某个工厂发货,可以设定在某个库位的出货只能使用某种移动类型。
- 在需要界面增强时,比如用户对某个字段要求大写,但是最终用户不按规范操作,这也可以在出口中自动转换,有些模块甚至能自定义数据库字段,并且可以在出口中增加字段输入。还有的模块能对输入数据检查,甚至实现自动替代等功能。
- 有不规则业务时,比如按某种条件定价,可以设定从自己定义的表中按某种条件取值
- 搜索帮助的出口,可以对Sap标准的搜索帮助做权限控制。
等等。
■ SAP有四种基本用户出口的类型
1.菜单出口-Menu Exits
定义自己的菜单
2.屏幕出口-Screen Exits
定义自己的屏幕
3.功能模块出口-Function Module Exits
在SAP应用程序中添加功能
4.关键字出口-Keyword Exits
在ABAP/4字典中的关键字数据元素添加文档。结果是你在使用这些数据元素的字段处按F1后会出现你自定义的说明文档
因为出口都是被Sap预先定义好的,那么怎么寻找自己需要的出口呢?
- 可以通过配置文档的帮助和SAP library 寻找业务系统的出口,sap library 在‘implementation guide’中寻找出口,在配置功能执行按钮左边一般都有一个说明文档,描述相关的出口。
- 为了方便我们把所有的出口名称及其描述列在文章的后面。
**************************************************************************************************
■ 下面具体介绍怎样写出口程序:
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”开头的子程序,根据子程序前面的注释文档来查找用户出口
对于第二代增强,可以用以下方法查找增强
用户增强通常包括下面3类,顾名思义,就是增强SAP的可能没有提供的功能(通过后台配置也不能实现).
- E Enhancement exits :就是常说User_exit (用户出口)
使用SE37搜索EXIT*的函数大都是做exit用的,通常里面预包含了一个Z开头
的程序. SE16查询TFDIR(函数表)输入EXIT*也可.
- C GUI codes( GUI接口增强)
- 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_013换成实际所需exit函数名
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(GUI 菜单文本增强)
***注意,为了确保一个出口被真正应用,必须同时激活相关程序(SE38)和出口函数(SMOD|CMOD,反正就是要保证tfdir-mandt=’C’,用程序也可.
****************************************************************************************************************************************************************************************************
■ 项目增强和Badi增强
ABAP必备知识之一。在SAP标准程序中加入用户定义的功能,以实现SAP标准程序的功能增强。原先流行用项目增强:User Exit或Customer Exit(前者的开发需要Access Key,后者不必);现在流行使用Badi增强。
一、项目增强
1、关于项目增强的简单介绍
1.1 SMOD包含具体的增强,而CMOD是包含一组SMOD编写的增强.
1.2 Customer Exits (Function module exits)是sap提供出口,它的命名规则如下:
EXIT_>program name<>3 digit suffix<
示例:
sd的VA01事务,对应的程序是SAPMV45A ,你会在程序里查到(用CALL CUSTOMER-FUNCTION、
CALL CUSTOMER-SUBSCREEN字符串)如下代码:
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、输入增强名如:SDVFX001
3.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(会操作相关报表)
二、Badi增强
根据面向对象的概念,由执行类Class Interface来实现功能增强
新建Badi过程:
1、查标准程序,搜关键字“type ref to”,找出Interface
2、根据找到的Interface,并找出其标准的Class Interface,并确定其Method
3、在SE24中创建新的Class Inteface,参照先前的Class Interface和Method创建,并在新
的Method中写入自己的代码
4、在SE18中创建Project Definition,选择查出的Interface,保存并激活
5、在SE19中创建Implementation Definition,选择刚才创建的Project Definition和新创建
的Class Interface,保存并激活。
 
附: 增强查找ABAP代码
REPORT ZTEST_USER_EXIT .
TABLES : TSTC,     "SAP Transaction Codes 
          TADIR,    "Directory of Repository Objects 
          MODSAPT,  "SAP Enhancements - Short Texts 
          MODACT,   "Modifications 
          TRDIR,    "System table TRDIR 
          TFDIR,    "Function Module 
          ENLFDIR,  "Additional Attributes for Function Modules 
          TSTCT.    "Transaction Code Texts
DATA : JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE. 
 DATA : FIELD1(30). 
 DATA : V_DEVCLASS LIKE TADIR-DEVCLASS. 
 PARAMETERS : P_TCODE LIKE TSTC-TCODE OBLIGATORY.
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 EQ 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:/(19) 'Transaction Code - ', 
   20(20) P_TCODE, 
   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:/ 'No of Exits:' , SY-TFILL. 
   ELSE. 
     FORMAT COLOR COL_NEGATIVE INTENSIFIED ON. 
     WRITE:/(95) 'No User Exit exists'. 
   ENDIF. 
 ELSE. 
   FORMAT COLOR COL_NEGATIVE INTENSIFIED ON. 
   WRITE:/(95) 'Transaction Code Does Not Exist'. 
 ENDIF.
AT LINE-SELECTION. 
   GET CURSOR FIELD FIELD1. 
   CHECK FIELD1(4) EQ 'JTAB'. 
   SET PARAMETER ID 'MON' FIELD SY-LISEL+1(10). 
   CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.
SAP 增强-出口选找方法-全部的更多相关文章
- 几种sap增强的查找方法
		***方法一**************************************** 通过SE30,运行TCODE后,点Evaluate后,查看运行时间分析评估:命中清单. 找以“exit”开 ... 
- SAP基本搜索帮助及增强出口
		se11创建基本搜索帮助时,各个参数的含意 选择方法 指定命中列表的数据来源,可以是数据库表,视图,CDS.如果指定了搜索帮助出口函数则该字段可以不输,数据来源可以在出口中自行指定 对话类型: 输 ... 
- sap 三代出口(BADI)的查找方法
		sap 三代出口(BADI)的查找方法 对于根据事务代码查找对应的BADI,网上介绍的方法很多,但总结下来无非就两种方法,在此把它记录下来,方便以后自己查阅了.(1)通过SE24,输入CL_EXITH ... 
- SAP增强 和VA01相关增强点介绍
		-转 sap寻找用户出口方法 sap的用户出口总共有三代: 一.User EXIT 第一代的用户出口,它们include在SAP标准程序的源代码里,可以说他们是源代码的一部分,你改了这种出口就相当于改 ... 
- SAP 增强说明
		转自http://blog.csdn.net/lyb_yt/article/details/8177974 (一)什么是增强(Enhancement)? 简单地说,增强就是ERP系统中标准程序的出口, ... 
- SAP增强Enhancement
		第一代:基于源码增强(子过程subroutine) 第一代增强基于源代码,是SAP提供的一个空代码的子过程.在这个子过程中用户可以添加自己的代码,控制自己的需求.这类增强集中在一些文件名倒数第二个字符 ... 
- SAP 增强表MODSAP 和TFDIR
		2.第二代增强(基于函数模块的增强),用于SMOD和CMOD 维护 在SAP发布的版本中,使用Call customer-function 'xxx'调用函数模块的, 所以你可以通过在程序中搜索 cu ... 
- 【MM系列】在SAP里查看数据的方法
		公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]在SAP里查看数据的方法 前言部 ... 
- ABAP FIELD-SYMBOLS 有大作用- 将没有可改参数的增强出口变得也能改主程序的值了
		看下图代码: report z_xul_test2 中 定义了 全局变量 G_DATA1 , 分别调用了 z_xul_tes1 中的 form 和 function zbapi_test , 这两 ... 
随机推荐
- kibana安装与基础用法
			来自官网,版本为4.5 下载rpm包并安装 wget -c https://download.elastic.co/kibana/kibana/kibana-4.5.4-1.x86_64.rpm rp ... 
- 无法嵌入互操作类型“ESRI.ArcGIS.Carto.RectangleElementClass”。请改用适用的接口。
			右键点击应用的程序集 ESRI.ArcGIS.Controls,修改"嵌入互操作类型"的值即可 
- ns3 Tutorial 中的日志模块(翻译)
			转载地址:http://blog.sina.com.cn/s/blog_8ecca79b0101d7fe.html 1 日志模块的使用 在运行 first.cc 脚本时,我们已经简单 ... 
- 翻译:打造基于Sublime Text 3的全能python开发环境
			原文地址:https://realpython.com/blog/python/setting-up-sublime-text-3-for-full-stack-python-development/ ... 
- Unicode 与(UTF-8,UTF-16,UTF-32,UCS-2)
			Unicode是什么? Unicode源于一个很简单的想法:将全世界所有的字符包含在一个集合里,计算机只要支持这一个字符集,就能显示所有的字符,再也不会有乱码了. U+597D = 好 597D 是1 ... 
- FileStream和StreamWriter配合写数据流时,出现数据写不进去的问题
			今天做一个数据导进txt小程序时,发现一个问题,就是没有关闭sw的流,只关闭了fs的,结果写不进去数据,看代码是对的,就是不行,最后就随手填上了sw的关闭后,可以了,反复测试,竟然就是这的问题,有点搞 ... 
- maven eclipse 安装
			jdk 的 系统变量一定要用 JAVA_HOME maven 的系统变量也一定要用 M2_HOME 配置在path 中 一定要用 %JAVA_HOME%\bin; 和 %M2_HOME%\bi ... 
- Python学习推荐
			1. Python官网 官网想必是最权威的,不仅有Python 2.X和3.X的软件包,还有官方文档Python tutorial (official docs)及社区. 2. 在线阅读免 ... 
- ssh和putty
			SH(Secure Shell的缩写),由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目前较可靠,专为远程 ... 
- 初识python中的类与对象
			这篇博客的路线是由深入浅,所以尽管图画的花花绿绿的很好看,但是请先关注我的文字,因为初接触类的小伙伴直接看类的实现可能会觉得难度大,只要耐着性子看下去,就会有一种“拨开迷雾看未来”的感觉了. 一.py ... 
