SAP用户出口的类型

sap的用户出口总共有三代:

1、第一代ITPUB个人空间_Jv^7K b*q
sap提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强都需要修改sap的标准代码。ITPUB个人空间s0| s @t iu
示例:USEREXIT.. in SAPMV45A

2、第二代ITPUB个人空间1M0Ea7y:u q;B
sap提供的是CUSTOMER-FUNCTION,它是通过SMOD和CMOD完成实现。参见我的http://blog.csdn.net/CompassButton/archive/2006/08/31/1150258.aspx

3、第三代ITPUB个人空间?Y0ZR$zH b
sap提供的第三代的用户出口就是BADI,他的调用方式是CALL METHOD (instance),(相关的TCODE是SE18和SE19),你可以通过EXIT_HANDLER这个单词查找BADI。

 

 

 第二代:     如何使用SMOD和CMOD进行SD的用户增强    
G:RI m6iW OS72044781、关于增强的简单介绍ITPUB个人空间-hjVK!bY a
1.1 SMOD包含具体的增强,而CMOD是包含一组SMOD编写的增强. ITPUB个人空间D1|1w;t6aj _9j@
1.2 User exits (Function module exits)是sap提供出口,它的命名规则如下:ITPUB个人空间&T*vkk#X0z
EXIT_<3 digit suffix> ITPUB个人空间O{}z\||k
示例:
L L#Yz"Zy{7204478sd的VA01事务,对应的程序是SAPMV45A ,你会在程序里查到(用CALL CUSTOMER-FUNCTION字符串)如下代码:ITPUB个人空间u_ I@9DD,~*s#Xg-~
CALL CUSTOMER-FUNCTION '003'
)ZH:w.i[7204478  exporting
:DQN/iiY{+V1oW7ka7204478    xvbak   = vbakITPUB个人空间-i ?W*~S0P
    xvbuk   = vbuk
(h;\!uV:?6b,P5]7204478    xkomk   = tkomkITPUB个人空间/w oDp,\
  importing
5AT_SCV o ?7204478    lvf_subrc = lvf_subrc
$\"_"a G2Dl*m7204478  tables
~V4z3AL7^+HN7204478    xvbfa = xvbfa
&aS8~6ZYj.U`*g"cc7204478    xvbap = xvbap
eXF \[/N Y7204478    xvbup = xvbup.ITPUB个人空间`6l$kUZD_m
则exit calls function module的名称就是: EXIT_SAPMV45A_003


+gG,W?&up72044782、先试用SMOD建立一个SAP增强
*|t1c*z+]~9r72044782.1、选择一个增强,如:SDVFX001 ,点击修改,进入sap增强维护屏幕;
8]en+z l D#^6W72044782.2、点击“组件”按钮,进入组件维护屏;
/V~w-d7H GO72044782.3、将光标移到“功能模块名”,输入模块名,如:EXIT_SAPLV60B_001;
'~L;f$`s0T,B2]72044782.4、选择“代码修改”按钮进入函数模块;
t6sm\(F+Y2V]_#T9}72044782.5、双击函数模块的包含单元,进入包含单元加入自定义代码并激活保存;

3、使用CMOD建立增强项目
c%Q6S!G"Bq&Z6C72044783.1、输入自定义的项目名,点击“创建”;ITPUB个人空间b7k`OQ:E8v
3.2、进入增强项目,选择“配置增强”,进入增强配置屏幕;
-r$f9Nb;Nlc#lY72044783.3、输入增强名如:SDVFX001
)ojfT6^\4T72044783.4、保存,并退出;

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

如何查找ITPUB个人空间q%{/_(oQ8H0J~
*判断是否存在相应增强的定义(SMOD)
aN*X:`b6^7204478    select single name from modsapa into mod0-name
.e;N c ?g4v3RW!F7204478           where name   = 'PPCO0002'.ITPUB个人空间 BS W4nM-v0u
  if sy-subrc = 0.ITPUB个人空间7?6r5e8B^sf'G
  endif.
,pDZ8t;nO:V[F1ux7204478  select single * from tadir into ps_tadir_db
hX(IZx7204478                             where pgmid      =   'R3TR'
3W5wY5Z Rc2y/Xc7s7204478                             and   object        =  'SMOD'
}WR9\?5c}@7204478                             and   obj_name   =  'PPCO0002'.

*判断是否存在相应增强项目的定义(CMOD)ITPUB个人空间)y+s t"y,b^s
          SELECT SINGLE name FROM MODATTR into mod0-nameITPUB个人空间c T Br/u5sW$_!gm
                 WHERE NAME   = 'PPCO0002'..

*提取增强的定义的组件 (可以用此反查增强定义)ITPUB个人空间C6m[l"R+~
  select * from modsapITPUB个人空间(P%G p4h2R
         where name = 'PPCO0002'.

*判断该增强是否移植到BADI实现ITPUB个人空间q.d$vk;YCS
*Enhancement & has already been migrated in Business Add-In definitionITPUB个人空间q9T({PTM |RC"uR
  select single migrated badi_def       into (migrated, exit_name)ITPUB个人空间+h{6m4~ U&Zl7k
        from modsapa where name = modname.
B'k.YZ }Z"L3{(k7204478  if sy-subrc = 0 and migrated = seex_true.
5ta3Q'E?'zL7204478    message s621 with modname exit_name.
f5K"|o9_7204478    check mode ne 'CHAM'.ITPUB个人空间D U MB.l.S5V p2C{
  endif.

MODTYP 类型:
eux2Vy9u]#|7204478E : 功能退出ITPUB个人空间9L] sUE
S : 屏幕
p Q#|'LX C)@7204478T : 表
p1P$O"^DB ?0V!N7204478C : GUI代码ITPUB个人空间i/wL,m9b!s(_
sap增强存在MODSAP表内

*获取增强组件的参见函数MOD_SAP_MEMBER_TEXTITPUB个人空间,h)t.WN&Y$HM/|
*获得退出功能模块的信息ITPUB个人空间B#] Z O|BO)v.P*YQM B
      select single * from tftit
Ui%Q T/Br7204478             where "SPRAS" = '1' AND "FUNCNAME" = 'EXIT_SAPLCORE_001'
k1H'lfN,Ff;_X L7204478      if sy-subrc = 0.
tO.N3d^?.s.n7204478      endif.

*值得学习的函数
k3oq[!xn#@)zb7204478MOD_KUN_ACTIVATE(会操作相关报表)

ITPUB个人空间&g3EVIE_ZOE
 第三代

BADI作为SAP的第三代用户出口,他的应用也越来越广泛,但如何找到合适的badi是许多abap程序员的困惑。我这里就介绍一下我个人的应用的经验,供大家参考。

1、badi对象的信息存储在SXS_INTER, SXC_EXIT, SXC_CLASS 和SXC_ATTR 这四个表中(参见SECE包);

2、sap程序都会调用cl_exithandler=>get_instance来判断对象是否存在,并返回实例;其实get_instance就是对上述几个表和他们的视图(V_EXT_IMP 和 V_EXT_ACT)进行查询和搜索。

3、基于这个机理,我查用ST05来监控一个TCODE来跟踪,然后选择查找有关上述几个表和视图的操作,就可获得相关BADI。

 4、se18 查找接口,se19 实现接口就可以实现用户增强。
#b(TF!rV7204478示例:用LE_SHP_DELIVERY_PROC控制跨月Cancel
G4JxKM3\K)lFp7204478
x$YK(]{}I)x~7204478METHOD IF_EX_LE_SHP_DELIVERY_PROC~CHANGE_DELIVERY_HEADER .
#\*jK#gG.B$UdaO7204478data : thismonth(2) type c.ITPUB个人空间w~)Hc^,j8M'N`
data : wa_likp type line of SHP_LIKP_T.
e#Q)diy"@ I7204478data : wa_log type line of SHP_BADI_ERROR_LOG_T.ITPUB个人空间Re;|5]3iN-h3X+k,j
clear ct_log[],thismonth.
3qrh1MjW.}7204478thismonth = sy-datum+4(2). "-----&gt這一個月的月份ITPUB个人空间 fh)q1C_(F [
loop at it_xlikp into wa_likp.ITPUB个人空间 O6Gt1C s5j
check IS_V50AGL-WARENAUSG_STORNO ='X'."---&gt代表作GI cancelITPUB个人空间3CYY&K2e:j{~I5K
if wa_likp-WADAT_IST+4(2) < thismonth.ITPUB个人空间 s0kgS1N,hq V;x
wa_log-VBELN = cs_likp-vbeln.
o\[(]3TXCU7A7204478wa_log-MSGTY = 'E'. "錯誤訊息ITPUB个人空间v)G;[K7Zt{L
wa_log-MSGID = 'ZDN_ERROR'. "這一個class要自己建ITPUB个人空间]I(V3\ d
wa_log-MSGNO = '001'.
M ^%T'E ]:~7204478append wa_log to ct_log. "Error log寫入
Kgm2Ms#f7204478endif.ITPUB个人空间8a0O}9\-]
endloop.
m RXTh r1X7204478ENDMETHOD.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7204478/viewspace-624432/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7204478/viewspace-624432/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值