个人收藏 查看程序或者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 .

下载方式:https://pan.quark.cn/s/a4b39357ea24 布线问题(分支限界算法)是计算机科学和电子工程领域中一个广为人知的议题,它主要探讨如何在印刷电路板上定位两个节点间最短的连接路径。 在这一议题中,电路板被构建为一个包含 n×m 个方格的矩阵,每个方格能够被界定为可通行或不可通行,其核心任务是定位从初始点到最终点的最短路径。 分支限界算法是处理布线问题的一种常用策略。 该算法与回溯法有相似之处,但存在差异,分支限界法仅需获取满足约束条件的一个最优路径,并按照广度优先或最小成本优先的原则来探索解空间树。 树 T 被构建为子集树或排列树,在探索过程中,每个节点仅被赋予一次成为扩展节点的机会,且会一次性生成其全部子节点。 针对布线问题的解决,队列式分支限界法可以被采用。 从起始位置 a 出发,将其设定为首个扩展节点,并将与该扩展节点相邻且可通行的方格加入至活跃节点队列中,将这些方格标记为 1,即从起始方格 a 到这些方格的距离为 1。 随后,从活跃节点队列中提取队首节点作为下一个扩展节点,并将与当前扩展节点相邻且未标记的方格标记为 2,随后将这些方格存入活跃节点队列。 这一过程将持续进行,直至算法探测到目标方格 b 或活跃节点队列为空。 在实现上述算法时,必须定义一个类 Position 来表征电路板上方格的位置,其成员 row 和 col 分别指示方格所在的行和列。 在方格位置上,布线能够沿右、下、左、上四个方向展开。 这四个方向的移动分别被记为 0、1、2、3。 下述表格中,offset[i].row 和 offset[i].col(i=0,1,2,3)分别提供了沿这四个方向前进 1 步相对于当前方格的相对位移。 在 Java 编程语言中,可以使用二维数组...
源码来自:https://pan.quark.cn/s/a4b39357ea24 在VC++开发过程中,对话框(CDialog)作为典型的用户界面组件,承担着与用户进行信息交互的重要角色。 在VS2008SP1的开发环境中,常常需要满足为对话框配置个性化背景图片的需求,以此来优化用户的操作体验。 本案例将系统性地阐述在CDialog框架下如何达成这一功能。 首先,需要在资源设计工具中构建一个新的对话框资源。 具体操作是在Visual Studio平台中,进入资源视图(Resource View)界面,定位到对话框(Dialog)分支,通过右键选择“插入对话框”(Insert Dialog)选项。 完成对话框内控件的布局设计后,对对话框资源进行保存。 随后,将着手进行背景图片的载入工作。 通常有两种主要的技术路径:1. **运用位图控件(CStatic)**:在对话框界面中嵌入一个CStatic控件,并将其属性设置为BST_OWNERDRAW,从而具备自主控制绘制过程的权限。 在对话框的类定义中,需要重写OnPaint()函数,负责调用图片资源并借助CDC对象将其渲染到对话框表面。 此外,必须合理处理WM_CTLCOLORSTATIC消息,确保背景图片的展示不会受到其他界面元素的干扰。 ```cppvoid CMyDialog::OnPaint(){ CPaintDC dc(this); // 生成设备上下文对象 CBitmap bitmap; bitmap.LoadBitmap(IDC_BITMAP_BACKGROUND); // 获取背景图片资源 CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap* pOldBitmap = m...
<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、付费专栏及课程。

余额充值