Sap Enhancement种类

增强(enhancement)的概念其实很广,SAP标准系统之上的所有二次开发,我们都可以理解为增强,做增强的目的就是标准的sap正常的业务系统 不能满足实际需求,所以我们在标准的系统基础进行增加不同的功能来达到不同企业的要求,换句话说我们今天开发过程中所有的ADD-ON都可以说是增强开发。

但作为开发人员所说的增强主要是标准系统事先预留好的接口,根据不同业务需求,进行开发,我们称为增强,又叫出口。

比如:1:在业务检查时,比如在某个工厂发货,可以设定在某个库位的出货只能使用某种移动类型。2:在需要界面增强时,比如用户对某个字段要求大写,但是 最终用户不按规范操作,这也可以在出口中自动转换,有些模块甚至能自定义数据库字段,并且可以在出口中增加字段输入。还有的模块能对输入数据检查,甚至实 现自动替代等功能。3:有不规则业务时,比如按某种条件定价,可以设定从自己定义的表中按某种条件取值 4:搜索帮助的出口,可以对Sap标准的搜索帮助做权限控制。等等。

Sap的用户出口发展至今有四代:

一、第一代(基于源代码的增强)是sap提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强都需要修改sap的标 准代码,它们在发布的时候都是空的,集中在一些文件名倒数第二个字符为Z的包含程序中,由于在标准程序中,所以所有程序的全局数据都可以使用,但同时系统 升级时会被新版本覆盖;这种源代码增强和屏幕增强的说明可以从事务码 spro 后台配置中相关模块的路径里面找到;一般是以UserExit_打头的子模块。

找到所要增强的的程序,查找UserExit关键字。

这类增强事先要到 service marketplace 申请对象键(ACCESS KEY),然后才能修改这些子程序。

查找此类出口的方法:

1、  在增强程序中找第二个字符为Z的包含程序;

2、  在后台找对应模块增强;

3、  在程序中搜索USEREXIT_打头的关键字子程序;

4、  字节列出对象列表“Display Object List”按钮,在Subroutines列表下找“userexit”打头的子程序;

二、  第二代增强(基于函数模块的增强),用SMOD和CMOD维护;在SAP发布的版本中,使用Call customer-function ‘xxx’调用函数模块的,所以你可以通过在程序中收cusomer-function来查找第二代增强,第二代增强函数名构成:Exit_程序名_’xxx(3 digital number)’,这样你就可以找到对应的增强函数模块了,它们在发布的时候只有一句代码include ‘xxxxxxx’,修改时无需像第一代增强一样需要ACCESS key,直接双击回车就可以了,但同时这种增强以及后面几代的增强都不能像第一代一样随便使用程序的全局数据,只能使用接口中传递进来的参数。

第二代增强中主要有3类:1)E . Ehancement exits:     这些出口 Exit_打头,你可以到SE37中查看,也可以在数据字典中TFDIR(函数表)中查询Exit_打头的函数。2)C .GUI codes,   (GUI增强) 3)S . Subscreens(屏幕增强)。4)T. include structure增强

Enhancement比较重要的表MODSAP,这个表里重要的字段增强名(Name),组件类型(TYP: E C S T),组件功能模块名(Member):里面记录了所有enhancement的增强.TFDIR所有的函数表,重要字段FUNCName(函数名),MAND(功能模块激活状态 如果是C代表此函数模块激活)。

查找Enhancement的方法:

1、在程序中搜索Customer-function找到后面的3为digit suffix,然后出口函数组成就是Exit_程序名_3 digit suffix.

2、代码找增强 利用如下代码找enhancement(有些exit使用它并不能找到)

REPORT  ZLC_FIND_EXIT no standard page heading.

tables : tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir.

tables : tstct.

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.

3、利用系统函数寻找增强

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(屏幕增强)

我们可以在函数最后设置断点,然后通过跑对应的增强程序就会去调用这样的函数,这样你就可以在调试模式下找到对应的增强。

下面附加出几个重要的表:

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 菜单文本增强)

[5].MODSAPA àsap 增强的属性

[6] MODATTRàsap增强项目属性

[7] TADIR à资源库对象的目录

[8] TFTITà函数功能的短文本

注意:出口真正应用是要在激活的状态下,也就是在TFIDR下的MAND字段为C.激活的时候要同时激活程序(se38)和出口函数(smod, cmod,出口程序都可)

当然一般情况,我们知道出口模块到modsap中找到对应的增强。可以通过下面的程序将其激活。

REPORT Zactexitfun .

update tfdir set MAND = ‘C‘.

where FUNcname = ‘EXIT_SAPMM06E_013‘.

*判断是否存在相应增强的定义(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‘.

当然我们可以用下面的函数来找增强的组件。MOD_SAP_MEMBER_TEXT

*获得出口功能模块的信息

select single * from tftit

where "SPRAS" = ‘1‘ AND "FUNCNAME" = ‘EXIT_SAPLCORE_001‘

if sy-subrc = 0.

endif.

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

select single migrated   into migrated

from modsapa where name = modname.

if sy-subrc = 0 and migrated = ‘x’.

说明此增强已经移植到BADI实现了

endif.

三、第三代增强(基于面向对象概念的增强BADI(business add-in)),源代码发布以接口的方式,通过接口的方法调用来实现使用的。用户增强实际上是实现一个或多个基于这个接口的实现类,因为接口类实际上是 一个抽象类,所以对同一个增强会出现不同的源代码,这些不同的源代码是通过过滤器(adapter)来区别用于不同的业务场景的。这种增强是用SE18 SE19来实现的。

BADI的查找方法:

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

2、SAP BADI程序都会调用cl_exithandler=>get_instance来判断对象是否存在,并返回实例,这个方法实际就是对上面4个表和视图V_EXT_IMP和V_EXT_ACT进行查询和搜索的。我们可以在这个方法处设置断点,获取实例。

3、它的调用方式是call method(instance), 可以通过exit_handler关键词来查找。

4、ST05选择“table buffer trace”而不是常用的"SQL trace",然后查找上面的几个表和视图找到对应的BADI.

5、se18 查找接口,se19 实现接口就可以实现用户增强

四、第四代其实是第三代的加强switch Framework

当sap进入newweaver 7.0以后推出的新增强体系,将BADI进行了改进,叫新BADI了。还新增 Enhancement Spot 和 Enhancement Section 以及隐式增强点的概念,基本可以在面向对象的程序里实现处处皆可增强的最高境界。

时间: 2024-11-09 23:40:22

Sap Enhancement种类的相关文章

SAP Table Enhancements (Master Data Enhancement of Customers and Vendors )

How to extend vendor or customer master data with SAP enhancement spots http://sapuniversity.eu/how-to-extend-vendor-or-customer-master-data-with-sap-enhancement-spots/ Step by step guide to enhance/update Vendor Master and generate idocs - Part1 htt

SAP 官网中文帮助文件&BP中文资料汇总

系统 描述 版本 连接 SAP ME  制造执行 SAP Manufacturing Execution (SAP ME) 15.0 点击我 SAP ECC EHP6 财务部分 SAP ERP 6.0 SAP  Enhancement Package 6 6.0 EHP6 点击我 SAP BP 基本 SAP Best Practices  Baseline packages V3.607 点击我 SAP BP 银行 SAP Best Practices  for Banking V1.604 点

BADI OVERVIEW

什么是BADI,如何从SAP中查找BADI? Business Add-Ins are a new SAP enhancement technique based on ABAP Objects. They can be inserted into the SAP System to accommodate user requirements too specific to be included in the standard delivery. Since specific industri

PA教材提纲 TAW12-2

Unit1 Adjustment of SAP Standard Software(SAP标准软件修改) 1.1 Adjusting SAP Standard Software(如何修改SAP标准软件) SAP标准应用的修改可分为三个级别: Personalization: 个性化,通过配置不用开发 Transaction Variants Modification: 修改,可能影响升级 Modification Assistant User Exit Enhancement: 增强 ABAP

Enhancement in SAP abap.

Recently I have been taught through how to do enhancement for those standard programs. Th reason for doing enhancement is that since we can't directly change the standard code therefore we can add our own functionalities to it. Before implementing th

SAP 中如何寻找增强

方法一.利用TCODE寻找增强(第二代的增强) 执行一个程序(源代码后附),在选择屏幕处输入你所需要增强的程序TCODE,执行後,就会出现一个列表,那里就有关于如何增强这个的绝大部分SMOD增强. 点击进去,自己手动寻找需要的增强. 这是第二代增强 方法二.利用系统函数寻找         MODX_FUNCTION_ACTIVE_CHECK 在这个FUNCTION的代码最后添加一个断点.执行需要增强的TCODE,如果有增强,就会自动跳入DEBUG界面.在DEBUG界面,查看f_tab字段,这里

SAP ABAP Extensions

SAP ABAP Extensions Sometimes it is not possible to adapt the system to the customer needs only by customizing. In these cases, the system needs to be enhanced using some type of extension. These are the most common types of extensions in SAP: User E

查找SAP标准程序用户出口及BADI的方法

查找SAP标准事务代码中使用的BADI: 在SE24中,查看类对象CL_EXITHANDLER,在其方法(Methods)GET_INSTANCE 的第14行打断点,之后运行事务代码: 当有BADI将会被执行的时候,这时候会进入类CL_EXITHANDLER的GET_INSTANCE方法,按F6执行这个方法之后,参数EXIT_NAME中的值便是BADI定义(SE18中看到的东西),参数CLASS_NAME则是类对象名称(SE24里面看到的东西),所有的方法实现都是存在于类对象中: 通过查找类方法

SAP FI/CO 基本概念

每一个SAP从业者都对这些概念不陌生,理解透了这些概念,对SAP的业务体系构架才能有明确地认识. 1.集团(client)的概念:是SAP中的最高等级:每一个集团建立主数据库. 2.公司(Company):能够产生法定财务报表的组织单元:财务报表是在公司级别上建立合并的:一个公司可以包含一个或者多个公司代码. 3.公司代码(Company Code):一个必须的企业结构:一个独立核算的会计主体:是一个能够进行会计核算的最小组织单元.资产负载表和损益表是建立在公司代码级别上的. 4.业务范围(Bu