Drunken Lion

USER EXIT_BADI 간단정리 본문

SAP/ABAP

USER EXIT_BADI 간단정리

DrkLion 2008. 7. 30. 18:29

<<  USER-EXIT  >>

[tcode] - [ 설 명 ]

CMOD   - Project Management of Sap Enhancements

             : 프로젝트를 생성한다.

SMOD   - SAP Enhancements

             : User-Exit Enhancements를 설정할 수 있다.

(component를 생성하여 소스코드로 설정)

※ 설명 : Standard Program에서 약간의 modification을 할 수 있게 하는 것으로,

              SAP에서 User-Exit point를 제공한다.

USER-EXIT 첨부자료,

             USER-EXIT_개요.gul        

                                                     (출처: ??)

             USER-EXIT이란(SDN 영어).doc

User Exit Examples.doc

                                                     (출처: SDN, SAP HELP)

===================================================================

<<  BAdIs (Business Add-Ins)  >>

[tcode] - [ 설 명 ]

SE18      - BAdI Builder: Initial Screen for Definitions

             : BAdI 를 정의한다.(보통 정의되어 있다.)

 

SE19      - BAdI Builder: Initial Screen for Implementations

             : BAdI 를 적용한다.

※ 설명 : BAdIs USER-EXIT과 비슷한 역할을 하지만, 클래스로 이루어져 있다.

       선언부(Definition)와 적용부(Implementation)로 나뉜다.

BAdI 첨부자료,

             Business Add-Ins(BADIs).gul

                                                     (출처: 아리샘)

             Implementing a BADI(SDN 영어).pdf

             BAdI(SDN 영어).doc

                                                     (출처: SDN, SAP HELP)

             Business Add-Ins사용예.doc

                                                     (출처: ??)


※ 트랜잭션시 해당되는 BAdI 를 검색하는 방법 (출처 : SDN)

우선, 창을 2개 띄우고

 

첫번째 창에서

1> SE24로 가서 CL_EXITHANDLER 라는 클래스를 연다.

2> GET_INSTANCE 를 더블클릭한다.

3> 소스 코드 28행 정도에서 sy-subrc가 포함되어 있는 줄을 breakpoint 설정한다.

 

두번째 창에서

4> SAP standard transaction을 실행한다.

5> exit 로직이 필요한 곳에서 버튼을 누르면 breakpoint가 걸리며 debugging 이 시작된다.

6> Field names 란에 exit_name이라 치면 그 당시의 BAdI 이름이 나온다.

7> F8 을 눌러가며 해당하는 BAdI를 찾아 SE18에서 확인한다.

 

원문

====================================================================

Follow the below steps to find out what all BADI's are called when you press any button in any transaction.

1) Goto se24 (Display class cl_exithandler)
2) Double click on the method GET_INSTANCE.
3) Put a break point at Line no.25 (CASE sy-subrc).

Now
4) Execute SAP standard transaction
5) Press the required button for which you need to write an exit logic, the execution will stop at the break point.
6) Check the values of variable 'exit_name', it will give you the BADI name called at that time.
7) This way you will find all the BADIs called on click of any button in any transaction.



<<  관련 CBO 프로그램 ( 출처 : SDN )  >>

 

프로그램 명 :  ZSEARCH_BADI_USER_EXIT

 

프로그램 설명 :

             각 트랜잭션 코드나 프로그램에 있는

             USER-EXIT BAdI(Business Add-In)를 찾아서 list-up 하는 프로그램

            

             USER-EXIT 클릭 -> SAP Enhancements(SMOD)로 연결

             BAdI        클릭 -> BAdI Builder: Definition (SE18)로 연결

 

소스코드 :

 

====================================================================

*Hi, you can use this code to search badi/user exits for tc or program name

*&---------------------------------------------------------------------*
*& Report ZSEARCH_BADI_USER_EXIT
*&
*&---------------------------------------------------------------------*
*&
*& Wyszukiwanie User exit i Badi na podstawie numeru transakcji
*&
*&---------------------------------------------------------------------*

REPORT zsearch_badi_user_exit.

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-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.




출처: http://kr.blog.yahoo.com/cykim1973/

'SAP > ABAP' 카테고리의 다른 글

셀렉션 스크린에 List Box 만들기  (0) 2008.08.19
SD 관련 T-code  (0) 2008.08.05
HELP 에 추가로 달기  (0) 2008.07.16
[USER_EXIT] 로그인 시 EXIT.  (0) 2008.07.14
BADI 검색 프로그램  (0) 2008.06.05