专栏首页SAP Technical根据事务码查找增强的方法
原创

根据事务码查找增强的方法

TABLES :
  tstc,     "SAP Transaction Codes(SAP 事务代码)
  tadir,    "Directory of Repository Objects(资源库对象的目录)
  modsapt,  "SAP Enhancements - Short Texts(SAP增强-短文件)
  modact,   "Modifications(修正)
  trdir,    "System table TRDIR(系统表 TRDIR)
  tfdir,    "Function Module(功能模块)
  enlfdir,  "Additional Attributes for Function Modules(功能模块的附加属性)
  tstct.    "Transaction Code Texts(事务代码文本)

DATA : jtab LIKE tadir OCCURS 0 WITH HEADER LINE.
DATA : field1(30).
DATA : v_devclass LIKE tadir-devclass.

SELECTION-SCREEN BEGIN OF BLOCK a01 WITH FRAME TITLE text-001.
SELECTION-SCREEN SKIP.
PARAMETERS : p_tcode LIKE tstc-tcode OBLIGATORY.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK a01.

START-OF-SELECTION.

  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 = 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:/(12) '事务代码 - ',
          13(20) p_tcode,
          34(10) '功能 - ' ,
          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:/ '用户出口数量:' , sy-tfill.

    ELSE.

      FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.

      WRITE:/(95) '此TCode木有用户出口!'.

    ENDIF.

  ELSE.

    FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
    WRITE:/(95) '事务代码不存在!'.

  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.
 
*************************************************************************
路漫漫其修远兮,吾将上下而求索。----Joi
 
版本更新V0.2(附加了根据程序名查询UserExit的功能),代码:
*************************************************************************
  SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L0S31 { font-style: italic; color: #808080; } .L0S32 { color: #3399FF; } .L0S33 { color: #4DA619; } .L0S52 { color: #0000FF; } *&---------------------------------------------------------------------*
*& Report  ZUSER_EXIT_JOI
*&---------------------------------------------------------------------*
*& V0.2 20121127
*&---------------------------------------------------------------------*

REPORT  ZUSER_EXIT_JOI.

TABLES: TSTC,
        TADIR,
        MODSAPT,
        MODACT,
        TRDIR,
        TFDIR,
        ENLFDIR,
        SXS_ATTRT ,
        TSTCT.

PARAMETERS: P_TCODE LIKE TSTC-TCODE,   "事务码
            P_PGMNA LIKE TSTC-PGMNA.   "程序名

DATA : JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE.
DATA : FIELD1(30).
DATA : V_DEVCLASS LIKE TADIR-DEVCLASS.
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-ULINE.
      FORMAT COLOR COL_HEADING INTENSIFIED ON.

* Sorting the internal Table
      SORT JTAB BY OBJECT.
      DATA : WF_TXT(60) TYPE C,
      WF_SMOD TYPE I ,
      WF_BADI TYPE I ,
      WF_OBJECT2(30) TYPE 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 ON,
        41 SY-VLINE ,
        42 WF_TXT,
        105 SY-VLINE.
        AT END OF OBJECT.
          WRITE : /(105) SY-ULINE.
        ENDAT.
      ENDLOOP.

      WRITE:/(105) SY-ULINE.
      SKIP.
      FORMAT COLOR COL_TOTAL INTENSIFIED ON.
      WRITE:/ 'No.of Exits:' , WF_SMOD.
      WRITE:/ 'No.of BADis:' , WF_BADI.

    ELSE.
      FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
      WRITE:/(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(8) EQ '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.

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SAP ABAP 基于函数的出口CMOD

    与基于源码的出口不同的是,该类出口将依据函数结构指定具体的输入/输出参数。SAP已经为每一个该类出口对象分配了对应的函数,程序执行中,会调用该函数检查其对应的代...

    matinal
  • 【SAP ABAP系列】ABAP获取域(domain)值的方法

    matinal
  • 为什么你的实施调研总是做不好

    好的开始,是成功的一半。做为ERP项目的正式开始,实施调研对整个项目顺利推进直至成功至关重要。做好调研并发挥好其至最大功能,顾问方为主导因素,客户方为直接因素。...

    matinal
  • JavaScript之怎样获取元素节点

    JavaScript获取元素节点一共有三种方法,分别是通过元素ID、通过标签名字和通过类名字来获取; 1.通过元素ID属性的ID值来获得元素对象-getElem...

    郑小超.
  • 一个简单的卡动车排队系统

    week
  • python基础 -- 异常处理try的使用及一些思考

    成长的道路上,难免会迷茫,难免会不知所措,能做的就是拥有一个不灭的信念,并一路坚持到底。不要丢掉希望,要坚信,明天会更好。

    lpe234
  • springboot系列学习(二十六):spring Security框架整合thymeleaf,在前段也可以实现安全框架,一步一步带你整合使用,小白必看(三)

    就是前端页面的东西,不同的权限看见的东西是不一样的,这个咋实现。之前我们可以在前段用if判断来看当前的用户的权限进行,但是现在可以和thymeleaf整合,使用...

    一天不写程序难受
  • vue class与style 绑定详解——小白速会

    一、绑定class的几种方式 1.对象语法 直接看例子: <div id="app3"> <div :class="{'success'...

    柴小智
  • 精通webpack的5大关键点

    webpack 是一个现代 JavaScript 应用程序的静态模块打包器,是目前最流行的打包神器。

    疯狂的技术宅
  • Rainbond JAVA⽣态的微服务⽆侵⼊链路追踪

    应⽤性能管理(Application Performance Management,APM) 是指对企业的关键业务应⽤进⾏监测、优化,提⾼企业应⽤的可靠性和质量...

    Rainbond开源

扫码关注云+社区

领取腾讯云代金券