• 关于增强和查找增强点


        正常的业务系统不能满足实际需求,这时可以在出口中增加一些功能,来达到要求,这也就是为什么它还叫增强。
        SAP 增强已经发展过几代了,可参考 SAP 标准教材 BC425 和 BC427。简单的说SAP的用户出口总共有四代:
    1、第一代 基于源代码的增强(User Exit)
     1.1 SAP提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强都需要修改sap的标准代码。
    示例:USEREXIT.. in SAPMV45A
    源代码增强以子程序形式发布,在 SAP 的发行版本中,使用 PERFORM 调用这些子程序,它们在发布时都是空的,集中在一些文件名以ZZ或者Z_结尾的包含程序中。用户增强时,应首先到 service marketplace 申请Object Key(也可以配合四代隐式增强点实现),然后才能修改这些子程序,这些子程序可以使用程序中所有的全局数据。
    SD的程序里面存在比较多的这种用户出口。如:MV45AFZZ。
     1.2屏幕增强以客户屏幕形式发布,它们包含在标准程序中,没有什么特别规律。这种源代码增强和屏幕增强的说明可以从事务码 SPRO 后台配置中相关模块的路径里面找到。
     1.3 同时使用的针对数据表的增强append structure,可以在事务码 SE11 中打开透明表,点击应用工具栏最右边的那个 append structure 按钮就能为数据表追加新的字段。

    2、第二代 基于函数模块的增强(Customer Exit/Function Exit)
        SAP提供的是CUSTOMER-FUNCTION,它是通过SMOD和CMOD完成实现。
    源代码增强以函数模块形式发布,在 SAP 的发行版本中,使用 CALL CUSTOMER-FUNCTION 调用这些函数模块,它们在发布时只有一句代码 INCLUDE xxxxxxx。用户增强时,无需申请对象键,直接双击这个包含,然后回车,就可以创建相关的包含文件,编写相应的代码了。这些函数模块中只能使用接口中传递的参数,不能使用调用程序的全局变量。
        这种增强函数的命名方式是EXIT__,实际上在SAP的标准程序里,会用到下面的方式调用该增强的逻辑:CALL CUSTOMER-FUNCTION ' Number ',从而来达到用户的需求。
    SMOD包含具体的增强,而CMOD是包含一组SMOD编写的增强。
    EXIT_< ProgramName >_<3 Digit Suffix> 
    示例:
        SD的VA01事务,对应的程序是SAPMV45A ,你会在程序里查到(用CALL CUSTOMER-FUNCTION字符串)如下代码:
    MV45AO0F_FELDAUSWAHL
    CALL CUSTOMER-FUNCTION '004'
             EXPORTING
                  I_SCREEN_NAME      = SCREEN-NAME
                  I_VBAP             = VBAP
                  I_VBUP             = XVBUP
                  I_SCREEN_GROUP4    = SCREEN-GROUP4
                  I_T180_AKTYP       = T180-AKTYP
             CHANGING
                  C_SCREEN_ACTIVE    = SCREEN-ACTIVE
                  C_SCREEN_INVISIBLE = SCREEN-INVISIBLE
                  C_SCREEN_INPUT     = SCREEN-INPUT.
    则exit calls function module的名称就是: EXIT_SAPMV45A_004

    屏幕增强也包含在函数模块所属的函数组中。
        针对数据表的增强是 CI_ 结构,这些结构以 .INCLUDE 结构的形式包含在 SAP 发布的数据表中,用户可以通过向这些结构中添加字段而对数据表进行增强。
        上述这类增强通过事务码 SMOD进行维护,CMOD 进行实现。SMOD 中的一个增强可以包含上述的源代码、屏幕和表结构增强,按照较容易理解的逻辑结构来管理这些增强,使用相对更加便利。

    3、第三代 基于面向对象概念的增强(BAdI - Business Add-In)
        SAP提供的第三代的用户出口就是BADI,它使用类、接口及方法等面向对象的概念,采用一种使用面向对象的方法来进行SAP 增强,他的调用方式是CALL METHOD (instance),(相关的TCODE是SE18和SE19),可以通过EXIT_HANDLER这个单词查找BADI。
        BADI,源代码增强以接口(Interface)的形式发布,在 SAP 的发行版本中,也是通过接口的方法调用来使用。用户增强时,实际是实现一个(或多个)基于这个接口的实现类。由于接口可以有多个实现类,所以对一个增强可以有多种不同的源代码,它们通过过滤器应用于不同的业务场景。
    这种增强使用事务码 SE18 创建、SE19 实现。

    4、第四代:Switch Framework
    SAP 从 NetWeaver 7.0 以后推出的新增强体系,它对 BAdI 做出了改进,改叫新 BAdI 了。还新增 Enhancement Spot 和 Enhancement Section 以及隐式增强点的概念,基本可以在面向对象的程序里实现处处皆可增强的最高境界。

    寻找增强:
    方法一、从程序代码中找
    对于第一代增强,可以用以下方法查找增强:
       在需要增强的程序里面,打开System->Status,双击进入Program,打开欲增强的程序,点击工具栏上的“Display Object List”按钮,选择Subroutines,查找以“UserExit”开头的子程序,根据子程序前面的注释文档来查找用户出口,由描述来确定合适的需要增强的FORM。

    方法二、利用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(屏幕增强)
        这些的使用方法和上述的一样,能够针对各种情况寻找增强。
     
    对于第二代增强,可以用以下方法查找增强

    用户增强通常包括下面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函数.
    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的增强
        1、badi对象的消息存储在SXS_INTER, SXC_EXIT, SXC_CLASS 和SXC_ATTR 这四个表中。
        2、sap程序都会调用cl_exithandler=>get_instance来判断对象能否具有,并前往实例;其实get_instance就是对上述几个表和他们的视图(V_EXT_IMP 和 V_EXT_ACT)进行查询和搜索。因此可以通过SE24-> CL_EXITHANDLE->方法GET_INSTANCE设置断点,获取相关的BADI。
        3、基于这个机理,用ST05来监控一个TCODE来跟踪,然后选择查找有关上述几个表和视图的操做,就可获得相关BADI
        4、se18 查找接口,se19 实现接口就能够实现用户增强。
     
    方法五、通过SPRO后台配置相关模块下的菜单查找,此处的增强组件有比较详细的说明

    小技巧 透视ERP增强
    (一)什么是增强(Enhancement)?
          简单地说,增强就是ERP系统中标准程序的出口,在该出口中由用户根据企业实际需求编写客户化逻辑代码。增强是ERP系统设计时考虑到企业实际的流程有可能和系统默认标准流程不同,在标准流程框架下专门留的接口,每个接口对应一个客户化函数,这些出口函数有标准处理程序传入的参数和输出参数,用户可根据系统输入参数做条件编写适合本企业流程的逻辑,然后通过输出参数传输回。
    (二)用户增强分类
    SAP的用户增强通常包括下面3类。
    1.E类:Enhancement exits,即通常所谓的用户出口(User_exit )
    用户出口也叫功能出口(Function Exit)。
    使用Tcode:SE37搜索EXIT*,找到的函数大都是做系统预留的出口函数,前面说过,用户出口是标准程序留给用户的接口,标准程序通常不允许用户任意修改,如果修改需要申请Access Key,而且修改标准程序可能导致的错误erp公司通常是不负责的。在SAP中,自定义的程序通常以保留字Y或Z开头,因此,出口函数中都预包含了一个Z开头的程序。
    2.C类:GUI接口(GUI codes)
    3.S类:屏幕增强(Screen Exit)
    比如,在建立采购订单,工单和固定资产主数据时,系统都预留屏幕增强,也就是说允许用户自定义用户输入界面并编写相应的输入输出处理程序。
    在各类增强中,可能还用户自己定义结构或表格,系统对应类型T类。比如增强MM06E005
    允许用户建立两个结构CI_EKKODB和CI_EKPODB。
    接下来将重点介绍功能出口的应用。
    (三)组织用户增强
    相关增强表格:
    MODSAP:增强表格
    TFDIR:包括出口函数在内的所有函数表(E类)
    CUATEXTS:修改 GVI 界面,界面: 菜单文本被客户(C类)
    TSDIR:动态程序区 CALL CUSTOMER SUBSCREEN(S类)
    * 对于以EXIT开头的出口函数,TFDIR-MAND值为C表示此出口函数被激活。
    相关增强检查函数:
    MODX_FUNCTION_ACTIVE_CHECK:检查E类用户出口是否被激活。
    MODX_MENUENTRY_ACTIVE_CHECK:检查C类增强激活状况
    MODX_SUBSCREEN_ACTIVE_CHECK: 检查S类增强激活状况
    你可能会发现,SAP的各模块的任何一个事务码(Tcode)对应的标准程序都留下了大量的用户出口,正是SAP灵活的配置功能和强大的用户出口才使其产品轻松应对各种复杂需求成为可能,系统还为能快速找到和激活这些增强进行了有效组织,各类增强被记录在table中并且提供了相关检查函数,从而更方便企业用户。

  • 相关阅读:
    JQ插件
    jQuery radio的取值与赋值
    Js获取当前日期时间
    jquery 整理之一
    2014-9月收集整理之二(原生)
    Codeforces Round #279 (Div. 2) E-Restoring Increasing Sequence
    HDU-4431 麻将
    hdu-2222 AC自动机模板题
    Codeforces Round #460 (Div. 2) E. Congruence Equation
    Codeforces Round #459 (Div. 2) D. MADMAX
  • 原文地址:https://www.cnblogs.com/ruingy/p/3463129.html
Copyright © 2020-2023  润新知