个人收藏 查看程序或者tcode的badis 或者 exits

本文介绍了一个ABAP程序,该程序用于检索与特定事务代码或程序名称相关的用户退出(User Exit)和业务添加(Business Add-In)。程序通过查询多个ABAP表来收集信息,并展示如何根据不同条件筛选并显示这些退出点。

  SPAN { font-family: "MS Gothic"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L1S31 { font-style: italic; color: #808080; } .L1S32 { color: #3399FF; } .L1S33 { color: #4DA619; } .L1S52 { color: #0000FF; } REPORT   ZTEST_XXX_0001.

TABLES  : TSTC, TADIR, MODSAPT, MODACT, TRDIR,
  TFDIR, ENLFDIR, SXS_ATTRT , 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, P_PGMNA LIKE  TSTC-PGMNA .

DATA  WA_TADIR TYPE  TADIR.

START-OF -SELECTION.
  IF  NOT  P_TCODE IS  INITIAL .
    SELECT
SINGLE  * FROM  TSTC WHERE  TCODE EQ  P_TCODE.
  ELSEIF  NOT  P_PGMNA IS  INITIAL .
    TSTC-PGMNA = P_PGMNA.
  ENDIF .
  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 IN  ('SMOD''SXSD' )
      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 :/(105 ) SY-ULINEFORMAT  COLOR  COL_HEADING INTENSIFIED  ON .
* SORTING THE INTERNAL TABLE SORT JTAB BY OBJECT.
      DATA  : WF_TXT(60TYPE  C , WF_SMOD TYPE  I  ,
             WF_BADI TYPE  I  , WF_OBJECT2(30TYPE  C .
      CLEAR  : WF_SMOD, WF_BADI , WF_OBJECT2.
*GET THE TOTAL SMOD.
      LOOP  AT  JTAB INTO  WA_TADIR.
        AT  FIRST .
          FORMAT  COLOR  COL_HEADING INTENSIFIED  ON .
          WRITE :/1 SY-VLINE, 2  'Enhancement/ Business Add-in'41
          SY-VLINE ,
           42  'Description'105  SY-VLINE. WRITE :/(105 ) SY-ULINE .
        ENDAT .

        CLEAR  WF_TXT.

        AT  NEW  OBJECT.
          IF  WA_TADIR-OBJECT = 'SMOD' .
            WF_OBJECT2 = 'Enhancement'  .
          ELSEIF
            WA_TADIR-OBJECT = 'SXSD' .
            WF_OBJECT2 = ' Business Add-in' .
          ENDIF .
          FORMAT  COLOR  COL_GROUP INTENSIFIED  ON .
          WRITE :/1 SY-VLINE, 2  WF_OBJECT2, 105  SY-VLINE.
        ENDAT .
        CASE  WA_TADIR-OBJECT.
          WHEN  'SMOD' .
            WF_SMOD = WF_SMOD + 1 .
            SELECT  SINGLE  MODTEXT INTO  WF_TXT
              FROM  MODSAPT
              WHERE  SPRSL = SY-LANGU
              AND  NAME = WA_TADIR-OBJ_NAME.

            FORMAT  COLOR  COL_NORMAL  INTENSIFIED  OFF.
          WHEN  'SXSD' .
* FOR BADIS WF_BADI = WF_BADI + 1 .
            SELECT  SINGLE  TEXT
              INTO  WF_TXT
              FROM  SXS_ATTRT
              WHERE  SPRSL = SY-LANGU
              AND  EXIT_NAME = WA_TADIR-OBJ_NAME.
            FORMAT  COLOR  COL_NORMAL  INTENSIFIED  ON .
        ENDCASE .
        WRITE :/1 SY-VLINE, 2  WA_TADIR-OBJ_NAME
        HOTSPOT  ON41  SY-VLINE
        , 42  WF_TXT, 105  SY-VLINE.
        AT  END  OF  OBJECT. WRITE  : /(105 ) SY-ULINEENDAT .
      ENDLOOP .
      WRITE :/(105 ) SY-ULINESKIP .
       FORMAT  COLOR  COL_TOTAL INTENSIFIED  ON .
      WRITE :/ 'No.of Exits:'  , WF_SMOD.
      WRITE :/ 'No.of BADis:'  , WF_BADI    .
    ELSE .
      FORMAT  COLOR  COL_NEGATIVE  INTENSIFIED  ONWRITE :/(105 )
      'No userexits or BADis exist' .
    ENDIF .
  ELSE .
    FORMAT  COLOR  COL_NEGATIVE  INTENSIFIED  ON .
    WRITE :/(105'Transaction does not exist' .
  ENDIF .

AT  LINE -SELECTION.
  DATA  : WF_OBJECT TYPE  TADIR-OBJECT.
  CLEAR  WF_OBJECT. GET  CURSOR  FIELD
  FIELD1.

   CHECK  FIELD1(8EQ  'WA_TADIR' .

   READ  TABLE  JTAB WITH  KEY
  OBJ_NAME = SY-LISEL+1 (20 ).

  MOVE  JTAB-OBJECT TO  WF_OBJECT.

  CASE  WF_OBJECT.
    WHEN  'SMOD' .
      SET  PARAMETER  ID  'MON'  FIELD   SY-LISEL+1 (10 ).
      CALL  TRANSACTION  'SMOD'  AND  SKIP  FIRST  SCREEN .
    WHEN   'SXSD' .
      SET  PARAMETER  ID  'EXN'  FIELD  SY-LISEL+1 (20 ).
      CALL  TRANSACTION   'SE18'  AND  SKIP  FIRST  SCREEN .
  ENDCASE .

<think>我们正在讨论SAP AIBU(Asset Integration for Business Units)的增强和自定义开发。根据SAP的标准实践,增强和自定义开发通常通过以下方式实现: 1. 使用用户出口(User Exits) 2. 使用业务附加项(Business Add-Ins, BAdIs) 3. 隐式增强点(Implicit Enhancement Points) 4. 显式增强点(Explicit Enhancement Points) 5. 修改标准程序(作为最后手段,不推荐,因为会影响升级) 由于AIBU是SAP的一个特定模块,我们需要查找AIBU相关的增强点。通常,我们可以通过事务码`SE80`(对象导航器)或`SE18`(BAdI定义)来查找可用的BAdIs。 另外,在SAP中,我们可以使用事务码`SMOD`和`CMOD`来查找用户出口。对于增强点,我们可以使用事务码`SE80`查看程序并检查增强点。 由于AIBU的具体增强点需要根据具体需求来确定,以下是一些通用的步骤: ### 1. 查找可用的BAdIs - 使用事务码`SE18`,输入命名空间`AIBU*`或相关名称来搜索BAdIs。 - 在AIBU相关的功能模块或类中,可以通过查看源代码来找到BAdI调用(通常使用`CL_EXITHANDLER`或`GET_INSTANCE`)。 ### 2. 查找用户出口 - 使用事务码`SMOD`,输入组件名称(Component Name),例如`AIBU*`,来搜索用户出口。 ### 3. 使用隐式增强点 - 在SAP标准程序、函数模块、方法中,可能存在隐式增强点。我们可以通过事务码`SE80`打开相关对象,然后在菜单栏中选择“编辑”->“增强操作”->“显示隐式增强点”来查看。 ### 4. 显式增强点 - 显式增强点由SAP在标准程序中定义,我们可以通过实现这些增强点来添加自定义逻辑。 ### 5. BAdI的实现 - 一旦找到合适的BAdI,我们可以使用事务码`SE19`来创建实现。 对于AIBU模块,具体到某个功能(例如资产过账、集成点等),需要进一步明确需求。但通常,AIBU会提供一些标准的BAdIs供我们使用。 根据SAP的文档,我们可以参考以下内容: > 在AIBU中,业务对象(Business Objects)可能会提供BAdIs。例如,在资产过账到业务单元时,可能有一个BAdI用于增强过账逻辑。 因此,建议步骤: 1. 确定需要增强的具体功能(例如:在资产过账前检查某些条件,或者修改过账的凭证内容)。 2. 在SAP系统中查找相关的BAdI或用户出口。 3. 如果标准增强点不足,考虑使用隐式增强点。 注意:自定义开发需要谨慎,避免影响标准功能。建议在开发环境中进行,并充分测试。 引用SAP帮助文档中的说明: > SAP AIBU提供了标准的业务附加项(BAdIs)用于扩展功能。例如,BAdI `AIBU_POST` 可以用于在过账前和过账后执行自定义逻辑[^1]。 但是,具体的BAdI名称需要根据SAP版本和AIBU的版本确认。因此,建议在系统中查看或咨询SAP官方文档。 下面是一个示例,展示如何实现一个BAdI: 假设我们找到了一个BAdI:`AIBU_POST`,它有一个方法`PRE_POST`,在过账前被调用。 步骤: 1. 使用`SE19`创建新的BAdI实现。 2. 输入BAdI名称:`AIBU_POST`,选择“实现”选项卡,输入实现名称(例如`ZAIBU_POST_IMPL`)。 3. 在方法`PRE_POST`中编写自定义逻辑。 示例代码(在方法`PRE_POST`中): ```abap METHOD if_ex_aibu_post~pre_post. " 在这里添加自定义逻辑,例如检查过账的资产是否符合业务规则 IF ... " 如果不满足条件,可以设置错误消息并阻止过账 e_message = '自定义错误消息'. e_abort = abap_true. ENDIF. ENDMETHOD. ``` 注意:这只是一个示例,实际的方法和参数需要根据具体的BAdI定义。 另外,如果标准增强点不够,我们还可以考虑使用事件(Event)或者修改标准程序(不推荐),或者通过自定义表、自定义字段(通过APPEND结构或自定义子屏幕)来扩展。 关于自定义字段: - 我们可以使用事务码`CI_COBL`为资产过账的凭证行项目添加自定义字段,然后在BAdI中处理这些字段的值。 总结: 增强SAP AIBU功能的主要方法是利用SAP提供的标准增强技术(BAdIs和用户出口)。首先需要明确需求,然后在系统中查找可用的增强点。 如果以上方法都无法满足需求,可能需要考虑使用新的开发(例如自定义报表或接口)而不是直接增强AIBU。 最后,建议参考SAP官方文档或咨询SAP支持以获取AIBU模块可用的具体增强点。 §§相关问题§§ 1. 如何查找SAP AIBU模块可用的BAdIs? 2. 在SAP AIBU中如何添加自定义字段? 3. 如何测试SAP AIBU的增强功能? 4. 在SAP AIBU中,资产过账的标准流程是什么?</think>### SAP AIBU 增强与自定义开发指南 SAP AIBU(Asset Integration for Business Units)是资产会计与业务单元集成的关键模块。其增强和自定义开发主要通过以下方法实现: #### 1. **标准增强点(BAdIs)** SAP AIBU 提供预定义的**业务附加项(BAdIs)**,允许在不修改标准代码的情况下注入自定义逻辑: - **关键 BAdIs**: - `FAA_SAMPLE_BADI`:资产过账前校验逻辑增强点 - `IABU_BADI`:业务单元集成点增强 - **实现步骤**: 1. 事务码 `SE18` 查找 AIBU 相关 BAdIs 2. 通过 `SE19` 创建 BAdI 实现 3. 在方法中插入自定义逻辑(如凭证字段校验、过账规则扩展) #### 2. **用户出口(User Exits)** 使用预留在标准程序中的出口函数: - **示例出口**: - `EXIT_SAPLIABU_001`:资产转移过账前增强 - `FIAA_TAW12`:资产折旧计算增强 - **操作流程**: 1. 事务码 `SMOD` 查找包含 `AIBU` 或 `IABU` 的出口 2. 通过 `CMOD` 创建项目并激活出口 #### 3. **隐式增强点(Enhancement Spots)** 在标准程序关键位置插入代码: ```abap ENHANCEMENT 1 ZAIBU_ENHANCEMENT. "增强点编号 "自定义逻辑:例如修改业务单元分配规则 IF sy-tcode = 'AIBU_POST'. CALL FUNCTION 'Z_CUSTOM_UNIT_LOGIC'. ENDIF. ENDENHANCEMENT. ``` 通过事务码 `SE80` 在程序结构中右键激活隐式增强。 #### 4. **自定义字段扩展** 为 AIBU 对象添加字段: - **Append 结构**: 1. 事务码 `SE11` 扩展表 `ANLA`(资产主数据)或 `ANLC`(资产值字段) 2. 创建包含 `CI_ANLA` 或 `CI_ANLC` 的 Append 结构 - **屏幕增强**: 使用 `Screen Painter`(事务码 `SE51`)在标准事务(如 `AS01`)中添加自定义字段标签页。 #### 5. **BAPI/RFC 接口开发** 创建自定义接口供外部系统调用: - **BAPI 封装步骤**: 1. 事务码 `SWO1` 创建业务对象 2. 在方法中调用 `BAPI_ACC_ASSET_POST` 等标准 BAPI 3. 添加前置/后置处理逻辑 4. 使用事务码 `SE37` 释放函数模块[^1] #### 6. **调试与测试** - **测试 BAdI**:事务码 `SWUD` 模拟业务对象方法[^1] - **生产发布**: 1. 释放函数模块(`SE37`) 2. 在 `SWO1` 中将方法状态设为"已发布"[^1] > **注意事项**: > - 优先使用 BAdIs 而非直接修改标准代码 > - 自定义字段需通过 APPEND 结构实现 > - 关键事务码:`SE18`(BAdI设计), `SMOD`(出口管理), `SWO1`(业务对象构建) > - 官方开发文档参考:SAP Note `179314` (AIBU 增强框架)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值