SAP用户增强总结(1)
20xx年09月08日 星期一 16:58
一。
用户增强: 所有的Enhancement在表MODSAP,用户增强大概有三类
MODSAP是Enhancement表, 而TFDIR是看是否此enhancement被激活,就看字段MAND是否是”C”而已
1. E Enhancement exits :就是常说的写User_exit ,经常使用
2. C GUI codes 没用过
3. S Subscreens 屏幕增强
什么叫用户出口呢?打个比方说吧,SAP软件就象一根晾衣服的绳子,上面有数不清的衣架,多数衣架上已经挂上了衣服,就些衣服就SAP的标准程序,还有些衣架是空着的,这些就是“用户出口”,你可以把自己做的衣服(比如程序代码)挂到这些衣架上去--如果你觉得SAP给你准备的衣服不够穿或者不合身的话。
使用用户出口可以:
-不影响标准SAP源代码
-不影响软件升级
SAP有四种基本用户出口的类型:
1.菜单出口-Menu Exits
定义自己的菜单
2.屏幕出口-Screen Exits
定义自己的屏幕
3.功能模块出口-Function Module Exits
在SAP应用程序中添加功能
4.关键字出口-Keyword Exits
在ABAP/4字典中的关键字数据元素添加文档。结果是你在使用这些数据元素的字段处按F1后会出现你自定义的说明文档
要编辑用户出口,必须有SAP授权的开发权限,另外,除了关键字出口外,其他的出口都需要有一定的ABAP/4编程能力.
用户出口类型:
sap的用户出口总共有三代:
1、第一代
sap提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强都需要修改sap的标准代码。--这个是最原始的产品增强技术.
2、第二代
sap提供的是CUSTOMER-FUNCTION,它是通过SMOD和CMOD完成实现。--比较类似插件接口了.
3、第三代
sap提供的第三代的用户出口就是BADI,他的调用方式是CALL METHOD
(instance),(相关的TCODE是SE18和SE19),你可以通过EXIT_HANDLER这个单词查找BADI。--预留空实现类的方式,支持用户或伙伴去扩展
二。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用户增强总结(2)
20xx年09月08日 星期一 17:00
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的可能没有提供的功能(通过后台配置也不能实现).
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_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’,用程序也可.)
the third generation enhancement will be discussed in the next post. SAP用户增强总结(3)-采购订单建立增加客户数据增强示例
20xx年09月08日 星期一 17:14
命令:smod
选择增强号MM06E005,点击测试。
出现如下:
MM06E005
1.功能退出:分别是代码区,包括pbo,pbi等。
2.Screen exit:创建增强屏幕
3.包含表:增强表字段结构
第一步:增强结构CI_EKKODB,在包含表CI_EKKODB上双击,然后新增增强字段。新增字段必须以ZZ开头。ZZOPENDATE。如果要增强行项目,双击CI_EKPODB。
第二步:增强屏幕显示,在Screen exit中,双击要增强的SAPMM06,如下: PROCESS BEFORE OUTPUT.
MODULE STATUS_0101.
*
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0101.
进入以后即可绘制屏幕显示,查找要显示的CI_EKKODB中的字段显示到屏幕上。查找字段(f6),输入表或字段名(ekko_ci),找到显示的字段。 双击STATUS_0101编程:
MODULE STATUS_0101中编程:(更新字段编辑状态) IF displaymode = 'A'. LOOP AT SCREEN.
IF screen-name = 'EKKO_CI-ZZOPENDATE'. screen-input = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
第三步:编程
在功能退出去,双击EXIT_SAPMM06E_006,进入 INCLUDE ZXM06U36 ,即Pbo中增加如下代码(显示和更新编辑状态)
ekko_ci = i_ci_ekko.
displaymode = i_trtyp.
双击 EXIT_SAPMM06E_007,进入 INCLUDE ZXM06U38 ,即 Pbi中(保存数据)
MOVE-CORRESPONDING i_ekko TO gl_ekko_ci.
双击 EXIT_SAPMM06E_008,进入 INCLUDE ZXM06U37 ,即 Import Data from Customer Subscreen for Purchasing Document Header中(修改后提示保存)
IF gl_ekko_ci-zzopendate NE ekko_ci-zzopendate. e_ci_ekko-zzopendate = ekko_ci-zzopendate.
IF displaymode NE 'A'.
e_ci_update = 'X'.
ENDIF.
ENDIF.
也可以是所有字段:
if gl_ekko_ci ne ekko_ci.
e_ci_ekko = ekko_ci. if displaymode ne 'A'. e_ci_update = 'X'. endif.
endif.
然后逐个激活即可。
SAPMM06E 0101 CUSTSCR1 SAPLXM06 0101 "Header
SAPMM06E 0111 CUSTSCR1 SAPLXM06 0111 "Item
EXIT_SAPMM06E_006 Header (PBO)
EXIT_SAPMM06E_007 Header (PAI)
EXIT_SAPMM06E_008 Import Data from Customer Subscreen for Purchasing Document Header
EXIT_SAPMM06E_016 Item (PBO)
EXIT_SAPMM06E_017 Item (PAI)
EXIT_SAPMM06E_018 Import Data from Customer Subscreen for Purchasing Document Item
SAP用户增强总结(4)- SAP用户登录增强示例
20xx年09月08日 星期一 17:16
* Transaction CMOD -> Utiliteis -> SAP Enhancements
* Exit Name SUSR0001
* Double click EXIT_SAPLSUSF_001
* Double click ZXUSRU01
* Insert -> include zsesschk.
*
* zsesschk limits the number of login sessions per user
* in a certain client
* It runs from user exit SUSR0001 after the SAP Login
* n-1 is the number of concurrent sessions allowed
TABLES: UINFO.
DATA: N TYPE I VALUE 2. "Upper limit of login sessions DATA: OPCODE TYPE X VALUE 2, I TYPE I, A(60).
DATA: BEGIN OF BDC_TAB1 OCCURS 5.
INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDC_TAB1.
DATA: BEGIN OF USR_TABL OCCURS 10.
INCLUDE STRUCTURE UINFO.
DATA: END OF USR_TABL.
* Exclude Limit login by Users
IF SY-UNAME <> 'XXX'
AND SY-UNAME <> 'XXX'.
CALL 'ThUsrInfo' ID 'OPCODE' FIELD OPCODE
ID 'TAB' FIELD USR_TABL-*SYS*.
LOOP AT USR_TABL.
IF SY-UNAME = USR_TABL-BNAME AND SY-MANDT = USR_TABL-MANDT. I = I + 1.
ENDIF.
ENDLOOP.
IF I >= N.
A = 'You have already '.
A+17(2) = I - 1.
A+19(25) = 'login sessions in client '.
A+44(4) = SY-MANDT.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
TITEL = 'UNSUCCESSFUL LOGIN'
TXT1 = A
TXT2 = 'You are not allowed to log in'. MOVE: 'SAPMSSY0' TO BDC_TAB1-PROGRAM,
'120' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/nex' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
CALL TRANSACTION 'SM04' USING BDC_TAB1 MODE 'N'.
ENDIF.
ENDIF.
关于净水器的深度访谈报告指导教师王振亚报告团队第五组20xx5131深度访谈总结报告深度访谈总结报告第五小组一深度访谈采访对象普通…
深度访谈总结报告一深度访谈采访对象普通农民退休教师门卫中产阶层干部销售人员打工者教师亲朋好友等二采访地点南山小区校园路上国美等商场…
腾讯用户1号受访者访谈报告访谈时间20xx年11月9日17点访谈时长1小时访谈地点被访者宿舍访谈目的通过对于腾讯重户用度的深度访谈…
广西北海烟草人力资源管理现场访谈总结20xx58高层访问1专卖这块不是很理想业务管理不顺畅人员素质跟不上生产过程当中人的因素制约比…
职场人士访谈总结报告我们已经大三了是时候去了解一些有关职场生活的一些事情了所以此次寒假利用了一些时间对已经毕业并进入职场姐姐做了一…
MM模块:采购订单增强:BADI:ME_GUI_PO_CUSTME_PROCESS_PO_CUST物料凭证增强:BADI:MB_D…
一表增强SAP提供了两种方法为表和结构增加字段全部在se11中选择表追加结构追加结构只是向表内增加字段而不是修改结构另外追加结构只…
SAP屏幕增强示例之物料MM01MM02MM03步骤增强字段存储的位置数据库表屏幕增强程序配置增强程序处理数据屏幕分配操作增强字段…
11编写用户增强用户增强通常包括下面3类顾名思义就是增强SAP的可能没有提供的功能通过后台配置也不能实现1EEnhancement…
背景客户主数据中增加一个试图保存客户物料体系步骤1TCODESPRO进入后台配置添加选项卡2实现BADI创建实施类3新建函数组ZX…