SAP 开发 SD 相关的增强BADI.docx

上传人:b****3 文档编号:3062926 上传时间:2022-11-17 格式:DOCX 页数:114 大小:82.70KB
下载 相关 举报
SAP 开发 SD 相关的增强BADI.docx_第1页
第1页 / 共114页
SAP 开发 SD 相关的增强BADI.docx_第2页
第2页 / 共114页
SAP 开发 SD 相关的增强BADI.docx_第3页
第3页 / 共114页
SAP 开发 SD 相关的增强BADI.docx_第4页
第4页 / 共114页
SAP 开发 SD 相关的增强BADI.docx_第5页
第5页 / 共114页
点击查看更多>>
下载资源
资源描述

SAP 开发 SD 相关的增强BADI.docx

《SAP 开发 SD 相关的增强BADI.docx》由会员分享,可在线阅读,更多相关《SAP 开发 SD 相关的增强BADI.docx(114页珍藏版)》请在冰豆网上搜索。

SAP 开发 SD 相关的增强BADI.docx

SAP开发SD相关的增强BADI

SD相关的BADI

HUBADI

BusinessAdd-InsforHandlingUnits

LESHPBADI

BusinessAdd-InsinShipping

LETRABADI

BusinessAdd-InsinTransportation

LEWMBADI

BusinessAdd-InsinWarehouseManagement

MRMBADI

BusinessAdd-InsinInvoiceVerification

PLPACKINSTBADI

BusinessAdd-IninthePackingInstruction

SBADIFORMULABUILDER

BADIImplementationwithFormulaBuilder

VABADI

BADIsR/3Sales

VFBADI

BAdIsforBilling

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

1、第一代

sap提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。

这类增强都需要修改sap的标准代码。

示例:

USEREXIT..inSAPMV45A

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

参见我的

3、第三代

sap提供的第三代的用户出口就是BADI,他的调用方式是CALLMETHOD(instance),(相关的TCODE是SE18和SE19),你可以通过EXIT_HANDLER这个单词查找BADI。

另外还有一种出口叫BTE

相关TCODE:

FIBF

BusinessTransactionEvents(OpenFI)

TheOpenFIenhancementtechniquewasdevelopedintheFinancialAccountingcomponent.OpenFIisbaseduponthefollowingprinciples:

Applicationdevelopersmustdefinetheirinterfaceinafunctionmodule,anassignmenttableisreadintheaccompanying(generated)code,andthecustomermodulesassignedarecalleddynamically.

Thistechniquedifferentiatesbetweenenhancementsthatareonlyallowedtohaveoneimplementationandenhancementsthatcancallmultipleimplementationsinanysequencedesired.Bothindustry-specificandcountry-specificenhancementsmaybedefined.

TheconceptsbehindtheBusinessAdd-InsenhancementtechniqueandOpenFIarebasicallythesame.However,thetwoenhancementtechniquesdodifferfromeachotherinthefollowingpoints:

OpenFIcanonlybeusedtomakeprogramenhancements,thatis,youcanonlyenhancesourcecodeusingOpenFI.YoucannotenhanceuserinterfaceelementswithOpenFIlikeyoucanwithBusinessAdd-Ins.

OpenFIassumesthatenhancementwillonlytakeplaceonthreelevels(SAP-partners-customers),whereaswithBusinessAdd-Insyoucancreateandimplementenhancementsinasmanysoftwarelayersasyoulike.

OpenFIusesfunctionmodulesforprogramenhancements.WithBusinessAdd-Ins,ABAPObjectsisusedtoenhanceprograms.

如何使用SMOD和CMOD进行SD的用户增强

1、关于增强的简单介绍

1.1SMOD包含具体的增强,而CMOD是包含一组SMOD编写的增强.

1.2Userexits(Functionmoduleexits)是sap提供出口,它的命名规则如下:

EXIT_<3digitsuffix>示例:

sd的VA01事务,对应的程序是SAPMV45A,你会在程序里查到(用CALLCUSTOMER-FUNCTION字符串)如下代码:

CALLCUSTOMER-FUNCTION'003'

exporting

xvbak=vbak

xvbuk=vbukxkomk=tkomk

importing

lvf_subrc=lvf_subrc

tables

xvbfa=xvbfa

xvbap=xvbapxvbup=xvbup.

则exitcallsfunctionmodule的名称就是:

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)selectsinglenamefrommodsapaintomod0-namewherename='PPCO0002'.

ifsy-subrc=0.

endif.

selectsingle*fromtadirintops_tadir_db

wherepgmid='R3TR'

andobject='SMOD'andobj_name='PPCO0002'.

*判断是否存在相应增强项目的定义(CMOD)

SELECTSINGLEnameFROMMODATTRintomod0-nameWHERENAME='PPCO0002'..

*提取增强的定义的组件(可以用此反查增强定义)

select*frommodsap

wherename='PPCO0002'.

*判断该增强是否移植到BADI实现

*Enhancement&hasalreadybeenmigratedinBusinessAdd-Indefinitionselectsinglemigratedbadi_definto(migrated,exit_name)frommodsapawherename=modname.

ifsy-subrc=0andmigrated=seex_true.

messages621withmodnameexit_name.

checkmodene'CHAM'.

endif.

MODTYP类型:

E:

功能退出

S:

屏幕

T:

C:

GUI代码

sap增强存在MODSAP表内

*获取增强组件的参见函数MOD_SAP_MEMBER_TEXT*获得退出功能模块的信息

selectsingle*fromtftit

where"SPRAS"='1'AND"FUNCNAME"='EXIT_SAPLCORE_00

1'

ifsy-subrc=0.

endif.

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

如何从SAP中查找BADI

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实现接口就可以实现用户增强。

示例:

用LE_SHP_DELIVERY_PROC控制跨月Cancel

METHODIF_EX_LE_SHP_DELIVERY_PROC~CHANGE_DELIVERY_HEADER.data:

thismonth

(2)typec.

data:

wa_likptypelineofSHP_LIKP_T.

data:

wa_logtypelineofSHP_BADI_ERROR_LOG_T.clearct_log[],thismonth.

thismonth=sy-datum+4

(2).">這一個月的月份

loopatit_xlikpintowa_likp.

checkIS_V50AGL-WARENAUSG_STORNO='X'."--->代表作GIcancelifwa_likp-WADAT_IST+4

(2)

wa_log-VBELN=cs_likp-vbeln.wa_log-MSGTY='E'."錯誤訊息wa_log-MSGID='ZDN_ERROR'."這一個class要自己建wa_log-MSGNO='001'.

appendwa_logtoct_log."Errorlog寫入endif.

endloop.

ENDMETHOD

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 英语考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1