<< 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 (출처: ?? (재무파트 김수명 수석보 - 2000 년 작성)) 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.