Автор Тема: Программа поиска UserExit-ов в транзакциях  (Прочитано 30614 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Экзиты конечно местами заменены на BADI или вообще энхансмены, но все еще активно используются и иногда возможно они более предпочтительны. Имеется в виду использование транзакций CMOD/SMOD. Программа по коду транзакции, выдает список экзитов, которые можно использовать в ней.

В общем начало программе было положено уже и не помню кем, а сейчас тут пришла зима, надо было кое чего искать, в общем к начальному варианту данной программы добавил такие полезные вещи как имя проекта в который включен экзит и авторов проекта, а так же текущий статус внедрения (активно/не активно). Ну и переходы по клику мышаком на проекты... а что дальше уже делать с этой кухней это вам решать.

Код: You are not allowed to view links. Register or Login
REPORT yuuk_find_user_exit NO STANDARD PAGE HEADING.

TABLES: tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir,
        tstct, modattr.

DATA:   lt_jtab LIKE tadir OCCURS 0 WITH HEADER LINE,
        lt_modact LIKE modact OCCURS 0 WITH HEADER LINE.
DATA:   field1(30) TYPE c,
        call_mode TYPE c,
        v_devclass LIKE tadir-devclass.

DATA: BEGIN OF lt_bdcdata OCCURS 0.
        INCLUDE STRUCTURE bdcdata.
DATA: END OF lt_bdcdata.
************************************************************************
PARAMETERS : p_tcode LIKE tstc-tcode OBLIGATORY.


************************************************************************
SELECT SINGLE * FROM tstc WHERE tcode EQ p_tcode.
IF sy-subrc = 0.
* Проверить на тексты программ
  SELECT SINGLE * FROM tadir WHERE pgmid = 'R3TR'
                               AND object = 'PROG'
                               AND obj_name = tstc-pgmna.
  IF sy-subrc NE 0.
*   Проверить на тексты группы функций
    SELECT SINGLE * FROM trdir WHERE name = tstc-pgmna.
    IF trdir-subc = '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.
  ELSE.
    MOVE : tadir-devclass TO v_devclass.
  ENDIF.

  SELECT * FROM tadir INTO TABLE lt_jtab WHERE pgmid = 'R3TR'
                        AND object = 'SMOD'
                        AND devclass = v_devclass.
  SELECT SINGLE * FROM tstct WHERE sprsl = sy-langu AND
                                   tcode = p_tcode.


  FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
  WRITE:/(19) 'Transaction Code - ',
       20(20) p_tcode,
       45(108) tstct-ttext.
  SKIP.
  IF NOT lt_jtab[] IS INITIAL.
    WRITE:/(152) sy-uline.
    FORMAT COLOR COL_HEADING INTENSIFIED ON.
    WRITE:/1 sy-vline,
           2 'Exit Name',
          21 sy-vline ,
          22 'Description',
          95 sy-vline,
          96 'Project',
          105 sy-vline,
          106 'Status',
          113 sy-vline,
          114 'Создал', 126 sy-vline,
          127 'Изменил', 139 sy-vline,
          140 'Активировал', 152 sy-vline.
    WRITE:/(152) sy-uline.

*   Список модулей расширений
    LOOP AT lt_jtab.
*     Краткий текст расширения
      SELECT SINGLE * FROM modsapt WHERE sprsl = sy-langu AND
                                         name = lt_jtab-obj_name.
*     Код проекта в которой присвоено расширение
      SELECT * INTO TABLE lt_modact
      FROM modact WHERE member = lt_jtab-obj_name.

      FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
      WRITE:/1 sy-vline,
             2 lt_jtab-obj_name HOTSPOT ON,
            21 sy-vline ,
            22 modsapt-modtext,
            95 sy-vline.
      IF lt_modact[] IS INITIAL.
        WRITE: 105 sy-vline,
               113 sy-vline,
               126 sy-vline,
               139 sy-vline,
               152 sy-vline.
      ELSE.
        LOOP AT lt_modact.
          SELECT SINGLE * FROM modattr WHERE name = lt_modact-name.
          WRITE: 96 lt_modact-name HOTSPOT ON,
                 105 sy-vline.
*         Статус
          CASE modattr-status.
            WHEN 'A'. WRITE 106 'Active'.
            WHEN space. WRITE 106 'Deact'.
            WHEN OTHERS. WRITE 106 'PartAct'.
          ENDCASE.
          WRITE: 113 sy-vline,
                 114 modattr-cnam, 126 sy-vline,
                 127 modattr-unam, 139 sy-vline,
                 140 modattr-anam, 152 sy-vline.
        ENDLOOP.
      ENDIF.
    ENDLOOP.
    WRITE:/(152) sy-uline.
    DESCRIBE TABLE lt_jtab.
    SKIP.
    FORMAT COLOR COL_TOTAL INTENSIFIED ON.
    WRITE:/ 'No of Exits:' , sy-tfill.
  ELSE.
    FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
    WRITE:/(152) 'No User Exit exists'.
  ENDIF.
ELSE.
  FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
  WRITE:/(152) 'Transaction Code Does Not Exist'.
ENDIF.

************************************************************************
************************************************************************
AT LINE-SELECTION.
  REFRESH: lt_bdcdata.
  GET CURSOR FIELD field1.
  CASE field1.
*   Перейти к просмотру расширения
    WHEN 'LT_JTAB-OBJ_NAME'.
      PERFORM dynpro USING:
        'X' 'SAPMSMOD' '2010',
        ' ' 'MOD0-NAME' sy-lisel+1(10),
        ' ' 'MODF-CHAM' 'X',
        ' ' 'MODF-HEAS' ' ',
        ' ' 'BDC_OKCODE' '=SHOW'.
      call_mode = 'E'.
      CALL TRANSACTION 'SMOD' USING lt_bdcdata MODE call_mode.

*   Перейти к просмотру проекта
    WHEN 'LT_MODACT-NAME'.
      PERFORM dynpro USING:
        'X' 'SAPMSMOD' '1010',
        ' ' 'MOD0-NAME' sy-lisel+95(8),
        ' ' 'MODF-HEAD' ' ',
        ' ' 'MODF-CHAK' 'X',
        ' ' 'BDC_OKCODE' '=SHOW'.
      call_mode = 'E'.
      CALL TRANSACTION 'CMOD' USING lt_bdcdata MODE call_mode.
  ENDCASE.

************************************************************************
************************************************************************
*&---------------------------------------------------------------------*
*&      Form  DYNPRO
*&---------------------------------------------------------------------*
*                   Генерация полей для BATCH-INPUT
*----------------------------------------------------------------------*
FORM dynpro USING dynbegin name value.
  CLEAR lt_bdcdata.
  IF dynbegin = 'X'.
    MOVE: name TO lt_bdcdata-program,
          value TO lt_bdcdata-dynpro,
          'X' TO lt_bdcdata-dynbegin.
  ELSE.
    MOVE: name TO lt_bdcdata-fnam,
          value TO lt_bdcdata-fval.
  ENDIF.
  APPEND lt_bdcdata.
ENDFORM.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Программа поиска UserExit-ов в транзакциях
« Ответ #1 : Май 29, 2009, 04:37:46 pm »
Пример как это выглядит...

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Программа поиска UserExit-ов в транзакциях
« Ответ #2 : Июнь 01, 2009, 02:02:28 pm »
В общем-то тут надо было с другой стороны подойти и выбрать все расширения которые есть в системе с явками, адресами и паролями, так что чуток докрутил программку (при апгрейдах наверное очень даже пригодиться, чтобы знать кого бить по руками и за какие расширения). Программа базируется на предыдущей версии, так что можно брать эту. Вроде как все работает.
Код: You are not allowed to view links. Register or Login
report yuuk_find_user_exit no standard page heading.

tables: tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir,
        tstct, modattr, modtext.

data:   lt_jtab like tadir occurs 0 with header line,
        lt_modact like modact occurs 0 with header line,
        lt_modattr like modattr occurs 0 with header line.
data:   field1(30) type c,
        call_mode type c,
        v_devclass like tadir-devclass.

data: begin of lt_bdcdata occurs 0.
        include structure bdcdata.
data: end of lt_bdcdata.

************************************************************************
parameters : rb_one radiobutton group grp1 default 'X'
                                           user-command one,
             p_tcode like tstc-tcode.
selection-screen skip 1.
parameters     :rb_two radiobutton group grp1.
select-options :p_modnam for modattr-name no intervals.


************************************************************************
************************************************************************
start-of-selection.
  if rb_one = 'X'.
    perform sel_tcode.
  elseif rb_two = 'X'.
    perform sel_project.
  endif.

************************************************************************
************************************************************************
at line-selection.
  refresh: lt_bdcdata.
  get cursor field field1.
  case field1.
*   Перейти к просмотру расширения
    when 'LT_JTAB-OBJ_NAME'.
      perform dynpro using:
        'X' 'SAPMSMOD' '2010',
        ' ' 'MOD0-NAME' sy-lisel+1(10),
        ' ' 'MODF-CHAM' 'X',
        ' ' 'MODF-HEAS' ' ',
        ' ' 'BDC_OKCODE' '=SHOW'.
      call_mode = 'E'.
      call transaction 'SMOD' using lt_bdcdata mode call_mode.

*   Перейти к просмотру проекта
    when 'LT_MODACT-NAME'.
      perform dynpro using:
        'X' 'SAPMSMOD' '1010',
        ' ' 'MOD0-NAME' sy-lisel+95(8),
        ' ' 'MODF-HEAD' ' ',
        ' ' 'MODF-CHAK' 'X',
        ' ' 'BDC_OKCODE' '=SHOW'.
      call_mode = 'E'.
      call transaction 'CMOD' using lt_bdcdata mode call_mode.
  endcase.

************************************************************************
************************************************************************
at selection-screen output.
  loop at screen.
    if rb_one = 'X'.
      if screen-name = 'P_MODNAM'.
        screen-input = '0'.
      endif.
    elseif rb_two = 'X'.
      if screen-name = 'P_TCODE'.
        screen-input = '0'.
      endif.
    endif.
    modify screen.
  endloop.

************************************************************************
************************************************************************
at selection-screen on value-request for p_modnam-low.
  data: modname type modname,
        dynfields like dynpread occurs 1 with header line,
        funcname type rs38l_fnam.

  clear: dynfields[], dynfields.
  dynfields-fieldname = 'P_MODNAM'.
  append dynfields.
  call function 'DYNP_VALUES_READ'
       exporting
            dyname     = 'YTOV_FIND_USER_EXIT'
            dynumb     = sy-dynnr
       tables
            dynpfields = dynfields
       exceptions
            others     = 0.
  read table dynfields index 1.
  modname = dynfields-fieldvalue.
  call function 'F4_CUSTOMER_PROJECT'
       exporting
            object             = modname
            suppress_selection = space
            display_only       = space
       importing
            result             = modname.
  dynfields-fieldvalue = modname.
  modify dynfields index 1.
  call function 'DYNP_VALUES_UPDATE'
       exporting
            dyname     = 'YTOV_FIND_USER_EXIT'
            dynumb     = sy-dynnr
       tables
            dynpfields = dynfields
       exceptions
            others     = 0.


*&---------------------------------------------------------------------*
*&      Form  DYNPRO
*&---------------------------------------------------------------------*
*                   Генерация полей для BATCH-INPUT
*----------------------------------------------------------------------*
form dynpro using dynbegin name value.
  clear lt_bdcdata.
  if dynbegin = 'X'.
    move: name to lt_bdcdata-program,
          value to lt_bdcdata-dynpro,
          'X' to lt_bdcdata-dynbegin.
  else.
    move: name to lt_bdcdata-fnam,
          value to lt_bdcdata-fval.
  endif.
  append lt_bdcdata.
endform.

*&---------------------------------------------------------------------*
*&      Form  sel_tcode
*&---------------------------------------------------------------------*
*       Выбрать расширения по коду транзакции
*----------------------------------------------------------------------*
form sel_tcode.
  select single * from tstc where tcode = p_tcode.
  if sy-subrc = 0.
*   Проверить на тексты программ
    select single * from tadir where pgmid = 'R3TR'
                                 and object = 'PROG'
                                 and obj_name = tstc-pgmna.
    if sy-subrc ne 0.
*     Проверить на тексты группы функций
      select single * from trdir where name = tstc-pgmna.
      if trdir-subc = '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.
    else.
      move : tadir-devclass to v_devclass.
    endif.

    select * from tadir into table lt_jtab where pgmid = 'R3TR'
                          and object = 'SMOD'
                          and devclass = v_devclass.
    select single * from tstct where sprsl = sy-langu and
                                     tcode = p_tcode.


    format color col_positive intensified off.
    write:/(19) 'Transaction Code - ',
         20(20) p_tcode,
         45(108) tstct-ttext.
    skip.
    if not lt_jtab[] is initial.
      write:/(152) sy-uline.
      format color col_heading intensified on.
      write:/1 sy-vline,
             2 'Exit Name',
            21 sy-vline ,
            22 'Description',
            95 sy-vline,
            96 'Project',
            105 sy-vline,
            106 'Status',
            113 sy-vline,
            114 'Создал', 126 sy-vline,
            127 'Изменил', 139 sy-vline,
            140 'Активировал', 152 sy-vline.
      write:/(152) sy-uline.

*     Список модулей расширений
      loop at lt_jtab.
*       Краткий текст расширения
        select single * from modsapt where sprsl = sy-langu and
                                           name = lt_jtab-obj_name.
*       Код проекта в которой присвоено расширение
        select * into table lt_modact
        from modact where member = lt_jtab-obj_name.

        format color col_normal intensified off.
        write:/1 sy-vline,
               2 lt_jtab-obj_name hotspot on,
              21 sy-vline ,
              22 modsapt-modtext,
              95 sy-vline.
        if lt_modact[] is initial.
          write: 105 sy-vline,
                 113 sy-vline,
                 126 sy-vline,
                 139 sy-vline,
                 152 sy-vline.
        else.
          loop at lt_modact.
            select single * from modattr where name = lt_modact-name.
            write: 96 lt_modact-name hotspot on,
                   105 sy-vline.
*           Статус
            case modattr-status.
              when 'A'. write 106 'Active'.
              when space. write 106 'Deact'.
              when others. write 106 'PartAct'.
            endcase.
            write: 113 sy-vline,
                   114 modattr-cnam, 126 sy-vline,
                   127 modattr-unam, 139 sy-vline,
                   140 modattr-anam, 152 sy-vline.
          endloop.
        endif.
      endloop.
      write:/(152) sy-uline.
      describe table lt_jtab.
      skip.
      format color col_total intensified on.
      write:/ 'No of Exits:' , sy-tfill.
    else.
      format color col_negative intensified on.
      write:/(152) 'No User Exit exists'.
    endif.
  else.
    format color col_negative intensified on.
    write:/(152) 'Transaction Code Does Not Exist'.
  endif.
endform.                    " sel_tcode
*&---------------------------------------------------------------------*
*&      Form  sel_project
*&---------------------------------------------------------------------*
*       Выбрать расширения по проектам
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form sel_project.
* Выбрать проекты
  select * into table lt_modattr
  from modattr where name in p_modnam.

  loop at lt_modattr.
*   Список проектов
    select single * from modtext
    where sprsl = sy-langu and name = lt_modattr-name.
    format color col_positive intensified off.
    write: /(152) sy-uline,
           /1 sy-vline, lt_modattr-name, '-',
            14 modtext-modtext, 77 sy-vline,
            78 'Создал:', lt_modattr-cnam, sy-vline,
            100 'Изменил:', lt_modattr-unam, sy-vline,
            125 'Активировал:', lt_modattr-anam, 152 sy-vline,
            /(152) sy-uline.

*   Список расширений к проекту
    select * into table lt_modact
    from modact where name = lt_modattr-name.
    loop at lt_modact where member <> space.
      format color col_normal intensified off.
      select single * from modsapt where sprsl = sy-langu and
                                     name = lt_modact-member.
      write: / sy-vline, 3 lt_modact-member, 14 '-',
             modsapt-modtext, sy-vline.
      case lt_modattr-status.
        when 'A'. write 79 'Active'.
        when space. write 79 'Deact'.
        when others. write 79 'PartAct'.
      endcase.
      write: 152 sy-vline.
    endloop.
    if sy-subrc <> 0.
      write: / sy-vline, 2(150) sy-uline, 152 sy-vline,
             /.
    else.
      write: /(152) sy-uline,
             /.
    endif.
  endloop.
endform.                    " sel_project

Оффлайн №1

  • Administrator
  • Jr. Member
  • *****
  • Сообщений: 636
  • Репутация: +23/-0
  • Пол: Мужской
  • Судьбы я вызов принимаю прямым пожатием руки
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Программа поиска UserExit-ов в транзакциях
« Ответ #3 : Июнь 01, 2009, 02:19:25 pm »
Вроде как есть стандартное средство S_ALR_87101281 ;)
Мой You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Программа поиска UserExit-ов в транзакциях
« Ответ #4 : Июнь 01, 2009, 11:51:53 pm »
You are not allowed to view links. Register or Login
Вроде как есть стандартное средство S_ALR_87101281 ;)
Ну у меня в 6.0 эта зараза падает, если просмотреть все поля хочется (про поведение в 4.6 расскажу завтра), а из минусов, не очень удобно, так как надо заходить в каждый проект и смотреть какие расширения ему присвоены, у меня же в программке сразу показывает проект, под ним список расширений, а так можно и через CMOD все просмотреть. Так что есть то оно есть, да не совсем оно есть...

Оффлайн №1

  • Administrator
  • Jr. Member
  • *****
  • Сообщений: 636
  • Репутация: +23/-0
  • Пол: Мужской
  • Судьбы я вызов принимаю прямым пожатием руки
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Программа поиска UserExit-ов в транзакциях
« Ответ #5 : Июнь 02, 2009, 07:40:13 am »
You are not allowed to view links. Register or Login
Ну у меня в 6.0 эта зараза падает, если просмотреть все поля хочется (про поведение в 4.6 расскажу завтра)
Ну у меня в 6.0 на GETWA_NOT_ASSIGNED при попытке просмотреть полный список валится, но если руками менять layout и не выбирать для показа поле expand, то без проблем показывает, а в 4.6 - все хорошо.
Насчет плюсов/минусов... так где их нет?
« Последнее редактирование: Июнь 02, 2009, 07:45:20 am от № 1 »
Мой You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Программа поиска UserExit-ов в транзакциях
« Ответ #6 : Июнь 02, 2009, 09:57:00 am »
You are not allowed to view links. Register or Login
Насчет плюсов/минусов... так где их нет?
Так суть как раз в том чтобы выбрать все и что за кем числиться и дать в работу, а тут выбрать не выйдет, так как надо в каждый проект ходить и смотреть присвоенные расширения, у моем же отчете это все на одном экране. Опять же в дамп не падает  ;)

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Программа поиска UserExit-ов в транзакциях
« Ответ #7 : Сентябрь 17, 2009, 05:55:17 pm »
респект.

спасибо - сегодня очень пригодилась, жаль для BADIшек ничего такого нету
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Программа поиска UserExit-ов в транзакциях
« Ответ #8 : Сентябрь 17, 2009, 06:54:44 pm »
You are not allowed to view links. Register or Login
спасибо - сегодня очень пригодилась, жаль для BADIшек ничего такого нету
Да надо будет докрутить и для BADI что-то похожее...

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Программа поиска UserExit-ов в транзакциях
« Ответ #9 : Сентябрь 17, 2009, 07:52:04 pm »
ага, народ просит ;)
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Репутация: +7/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Программа поиска UserExit-ов в транзакциях
« Ответ #10 : Октябрь 07, 2009, 12:02:31 pm »
Я использую You are not allowed to view links. Register or Login
Большинство случаев обрабатывается, в т.ч. и BAdI  ;)

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
На одном из проектов встал вопрос, что из расширений активировано в системе, в каких проектах и кто за этот весь балаган отвечает. Руками выбирать все это дело сложно и не интересно, так что докрутил второй режим работы в данной программе, т.е. показать активные в системе проекты и расширения с ответственными.

Код: You are not allowed to view links. Register or Login
*&---------------------------------------------------------------------*
*& Report  YUUK_FIND_USEREXITS
*&
*&---------------------------------------------------------------------*
*&  Программа поиска UserExit а так же общий обзор пакетов модификаций
*&  разрабатываемых через транзакции CMOD/SMOD
*&---------------------------------------------------------------------*
report yuuk_find_userexits no standard page heading.

tables: tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir,
        tstct, modattr, modtext.

data:   lt_jtab like tadir occurs 0 with header line,
        lt_modact like modact occurs 0 with header line,
        lt_modattr like modattr occurs 0 with header line.
data:   field1(30) type c,
        call_mode type c,
        v_devclass like tadir-devclass.

data: begin of lt_bdcdata occurs 0.
        include structure bdcdata.
data: end of lt_bdcdata.

************************************************************************
parameters : rb_one radiobutton group grp1 default 'X'
                                           user-command one,
             p_tcode like tstc-tcode.
selection-screen skip 1.
parameters     :rb_two radiobutton group grp1.
select-options :p_modnam for modattr-name no intervals.


************************************************************************
************************************************************************
start-of-selection.
  if rb_one = 'X'.
    perform sel_tcode.
  elseif rb_two = 'X'.
    perform sel_project.
  endif.

************************************************************************
************************************************************************
at line-selection.
  refresh: lt_bdcdata.
  get cursor field field1.
  case field1.
*   Перейти к просмотру расширения
    when 'LT_JTAB-OBJ_NAME'.
      perform dynpro using:
        'X' 'SAPMSMOD' '2010',
        ' ' 'MOD0-NAME' sy-lisel+1(10),
        ' ' 'MODF-CHAM' 'X',
        ' ' 'MODF-HEAS' ' ',
        ' ' 'BDC_OKCODE' '=SHOW'.
      call_mode = 'E'.
      call transaction 'SMOD' using lt_bdcdata mode call_mode.

*   Перейти к просмотру проекта
    when 'LT_MODACT-NAME'.
      perform dynpro using:
        'X' 'SAPMSMOD' '1010',
        ' ' 'MOD0-NAME' sy-lisel+95(8),
        ' ' 'MODF-HEAD' ' ',
        ' ' 'MODF-CHAK' 'X',
        ' ' 'BDC_OKCODE' '=SHOW'.
      call_mode = 'E'.
      call transaction 'CMOD' using lt_bdcdata mode call_mode.
  endcase.

************************************************************************
************************************************************************
at selection-screen output.
  loop at screen.
    if rb_one = 'X'.
      if screen-name = 'P_MODNAM-LOW'.
        screen-input = '0'.
      endif.
    elseif rb_two = 'X'.
      if screen-name = 'P_TCODE'.
        screen-input = '0'.
      endif.
    endif.
    modify screen.
  endloop.

************************************************************************
************************************************************************
at selection-screen on value-request for p_modnam-low.
  data: modname type modname,
        dynfields like dynpread occurs 1 with header line,
        funcname type rs38l_fnam.

  clear: dynfields[], dynfields.
  dynfields-fieldname = 'P_MODNAM'.
  append dynfields.
  call function 'DYNP_VALUES_READ'
    exporting
      dyname     = 'YTOV_FIND_USER_EXIT'
      dynumb     = sy-dynnr
    tables
      dynpfields = dynfields
    exceptions
      others     = 0.
  read table dynfields index 1.
  modname = dynfields-fieldvalue.
  call function 'F4_CUSTOMER_PROJECT'
    exporting
      object             = modname
      suppress_selection = space
      display_only       = space
    importing
      result             = modname.
  dynfields-fieldvalue = modname.
  modify dynfields index 1.
  call function 'DYNP_VALUES_UPDATE'
    exporting
      dyname     = 'YTOV_FIND_USER_EXIT'
      dynumb     = sy-dynnr
    tables
      dynpfields = dynfields
    exceptions
      others     = 0.


*&---------------------------------------------------------------------*
*&      Form  DYNPRO
*&---------------------------------------------------------------------*
*                   Генерация полей для BATCH-INPUT
*----------------------------------------------------------------------*
form dynpro using dynbegin name value.
  clear lt_bdcdata.
  if dynbegin = 'X'.
    move: name to lt_bdcdata-program,
          value to lt_bdcdata-dynpro,
          'X' to lt_bdcdata-dynbegin.
  else.
    move: name to lt_bdcdata-fnam,
          value to lt_bdcdata-fval.
  endif.
  append lt_bdcdata.
endform.                    "dynpro

*&---------------------------------------------------------------------*
*&      Form  sel_tcode
*&---------------------------------------------------------------------*
*       Выбрать расширения по коду транзакции
*----------------------------------------------------------------------*
form sel_tcode.
  select single * from tstc where tcode = p_tcode.
  if sy-subrc = 0.
*   Проверить на тексты программ
    select single * from tadir where pgmid = 'R3TR'
                                 and object = 'PROG'
                                 and obj_name = tstc-pgmna.
    if sy-subrc ne 0.
*     Проверить на тексты группы функций
      select single * from trdir where name = tstc-pgmna.
      if trdir-subc = '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.
    else.
      move : tadir-devclass to v_devclass.
    endif.

    select * from tadir into table lt_jtab where pgmid = 'R3TR'
                          and object = 'SMOD'
                          and devclass = v_devclass.
    select single * from tstct where sprsl = sy-langu and
                                     tcode = p_tcode.


    format color col_positive intensified off.
    write:/(19) 'Transaction Code - ',
         20(20) p_tcode,
         45(108) tstct-ttext.
    skip.
    if not lt_jtab[] is initial.
      write:/(152) sy-uline.
      format color col_heading intensified on.
      write:/1 sy-vline,
             2 'Exit Name',
            21 sy-vline ,
            22 'Description',
            95 sy-vline,
            96 'Project',
            105 sy-vline,
            106 'Status',
            113 sy-vline,
            114 'Создал', 126 sy-vline,
            127 'Изменил', 139 sy-vline,
            140 'Активировал', 152 sy-vline.
      write:/(152) sy-uline.

*     Список модулей расширений
      loop at lt_jtab.
*       Краткий текст расширения
        select single * from modsapt where sprsl = sy-langu and
                                           name = lt_jtab-obj_name.
*       Код проекта в которой присвоено расширение
        select * into table lt_modact
        from modact where member = lt_jtab-obj_name.

        format color col_normal intensified off.
        write:/1 sy-vline,
               2 lt_jtab-obj_name hotspot on,
              21 sy-vline ,
              22 modsapt-modtext,
              95 sy-vline.
        if lt_modact[] is initial.
          write: 105 sy-vline,
                 113 sy-vline,
                 126 sy-vline,
                 139 sy-vline,
                 152 sy-vline.
        else.
          loop at lt_modact.
            select single * from modattr where name = lt_modact-name.
            write: 96 lt_modact-name hotspot on,
                   105 sy-vline.
*           Статус
            case modattr-status.
              when 'A'. write 106 'Active'.
              when space. write 106 'Deact'.
              when others. write 106 'PartAct'.
            endcase.
            write: 113 sy-vline,
                   114 modattr-cnam, 126 sy-vline,
                   127 modattr-unam, 139 sy-vline,
                   140 modattr-anam, 152 sy-vline.
          endloop.
        endif.
      endloop.
      write:/(152) sy-uline.
      describe table lt_jtab.
      skip.
      format color col_total intensified on.
      write:/ 'No of Exits:' , sy-tfill.
    else.
      format color col_negative intensified on.
      write:/(152) 'No User Exit exists'.
    endif.
  else.
    format color col_negative intensified on.
    write:/(152) 'Transaction Code Does Not Exist'.
  endif.
endform.                    " sel_tcode
*&---------------------------------------------------------------------*
*&      Form  sel_project
*&---------------------------------------------------------------------*
*       Выбрать расширения по проектам
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form sel_project.
* Выбрать проекты
  select * into table lt_modattr
  from modattr where name in p_modnam.

  loop at lt_modattr.
*   Список проектов
    select single * from modtext
    where sprsl = sy-langu and name = lt_modattr-name.
    format color col_positive intensified off.
    write: /(152) sy-uline,
           /1 sy-vline, lt_modattr-name, '-',
            14 modtext-modtext, 77 sy-vline,
            78 'Создал:', lt_modattr-cnam, sy-vline,
            100 'Изменил:', lt_modattr-unam, sy-vline,
            125 'Активировал:', lt_modattr-anam, 152 sy-vline,
            /(152) sy-uline.

*   Список расширений к проекту
    select * into table lt_modact
    from modact where name = lt_modattr-name.
    loop at lt_modact where member <> space.
      format color col_normal intensified off.
      select single * from modsapt where sprsl = sy-langu and
                                     name = lt_modact-member.
      write: / sy-vline, 3 lt_modact-member, 14 '-',
             modsapt-modtext, sy-vline.
      case lt_modattr-status.
        when 'A'. write 79 'Active'.
        when space. write 79 'Deact'.
        when others. write 79 'PartAct'.
      endcase.
      write: 152 sy-vline.
    endloop.
    if sy-subrc <> 0.
      write: / sy-vline, 2(150) sy-uline, 152 sy-vline,
             /.
    else.
      write: /(152) sy-uline,
             /.
    endif.
  endloop.
endform.                    " sel_project

В общем на рисунках символы текстовых переменных и как выглядит список проектов с активированными расширениями.
« Последнее редактирование: Декабрь 29, 2014, 10:10:35 pm от Uukrul »

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Программа поиска UserExit-ов в транзакциях
« Ответ #12 : Август 28, 2011, 09:12:38 pm »
респект, сам активно пользуюсь... особенно на текущем проекте, тут в системе тоже оказывается эта штука есть :-)
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Sapforum.Biz

Re: Программа поиска UserExit-ов в транзакциях
« Ответ #12 : Август 28, 2011, 09:12:38 pm »