ERP(SAP)

[ABAP] CBO 개발 리스트 조회

가시가되어 2025. 4. 24. 14:10

[ABAP]  CBO 개발 리스트 조회

 

🔍 프로그램 목적

SAP 시스템의 TADIR 테이블에서 사용자 정의 개발 객체(주로 Z/Y 이름공간)를 조회하고, 그 객체들의 유형에 따라 분류하여 프로그램 목록, 트랜잭션 목록, 웹 오브젝트 등을 추출하여 별도의 내부 테이블로 구성합니다.  이 프로그램을 ALV 출력으로 확장하거나, 사용자 정의 보고서로 전환하거나, 범용 유틸리티화할 수도 있어요. 어떤 방향으로 확장하여 사용할 수도 있습니다.

 

🧱 주요 테이블 및 필드

  • TADIR: 개발 오브젝트의 메타데이터 저장 (PGMID, DEVCLASS, OBJECT, OBJ_NAME 등)
  • TRDIR: 프로그램(Report) 관련 메타데이터 (NAME, SUBC, UCCHECK 등)

 

📌 소스코드 - FORM select_data

FORM select_data .

  DATA: lv_name LIKE trdir-name.
  DATA: ls_pro     TYPE tadir,
      ls_trdir   TYPE trdir.

  CLEAR: gt_display, r_dev, gt_program, gt_pro, gt_tcode, gt_table,
         gt_object.
  REFRESH: gt_display, r_dev, gt_program, gt_table, gt_object,
           gt_tcode, gt_pro.

  IF s_dev[] IS INITIAL.
    SELECT devclass object obj_name AS program INTO TABLE gt_pro
           FROM tadir
           WHERE pgmid = 'R3TR'
*           AND DEVCLASS IN S_DEV.
              AND ( devclass LIKE  'Z%' OR
                    devclass LIKE  'Y%' )
              AND delflag NE 'X'.
  ELSE.
    SELECT devclass object obj_name AS program INTO TABLE gt_pro
           FROM tadir
           WHERE pgmid = 'R3TR'
             AND devclass IN s_dev
             AND delflag NE 'X'.
  ENDIF.


LOOP AT gt_pro.

  CASE gt_pro-object.

    "------------------------------------------
    " 프로그램 (PROG) 처리
    "------------------------------------------
    WHEN c_prog.

      " 임시 구조(gt_program1)에 프로그램 정보 저장
      MOVE: gt_pro-devclass TO gt_program1-devclass,
            gt_pro-program  TO gt_program1-program.

      " 프로그램 설명 가져오기
      PERFORM find_program_name USING gt_program1-program
                         CHANGING gt_program1-ctext.
      APPEND gt_program1.
      CLEAR gt_program1.

      " 실제 프로그램 존재 여부 확인 (TRDIR 조회)
      SELECT SINGLE name uccheck INTO (lv_name, ls_trdir-uccheck)
        FROM trdir
        WHERE name = gt_pro-program
          AND ( subc = '1' OR subc = 'M' ).

      IF sy-subrc = 0.
        MOVE: gt_pro-devclass   TO gt_program-devclass,
              gt_pro-program    TO gt_program-program,
              ls_trdir-uccheck  TO gt_program-uccheck.

        " 프로그램 설명 다시 저장
        PERFORM find_program_name USING gt_program-program
                           CHANGING gt_program-ctext.
        APPEND gt_program.
        CLEAR gt_program.
      ENDIF.

    "------------------------------------------
    " Web Dynpro (W3MI) 처리
    "------------------------------------------
    WHEN c_w3mi.
      MOVE: gt_pro-devclass TO gt_object-devclass,
            gt_pro-program  TO gt_object-obj_name.
      APPEND gt_object.
      CLEAR gt_object.

    "------------------------------------------
    " 트랜잭션 코드 (TRAN) 처리
    "------------------------------------------
    WHEN c_tran.
      MOVE: gt_pro-devclass TO gt_tcode-devclass,
            gt_pro-program  TO gt_tcode-tcode.
      APPEND gt_tcode.
      CLEAR gt_tcode.

    "------------------------------------------
    " 그 외 항목 무시
    "------------------------------------------
    WHEN OTHERS.
      CONTINUE.

  ENDCASE.

ENDLOOP.

ENDFORM.                    " SELECT_DATA

 

  • 초기화 및 조건 필터링
    • gt_pro 등 여러 내부 테이블 초기화
    • 조건이 없는 경우 Z*, Y* 개발클래스 대상
  • TADIR 테이블 조회
    • PGMID = 'R3TR' 이고 삭제되지 않은(DELFLAG NE 'X') 오브젝트를 필터링하여 gt_pro에 저장
    • OBJ_NAME은 program이라는 별칭으로 사용됨
  • 오브젝트 유형 분류 및 처리
    • OBJECT 값에 따라 CASE 문으로 분류
      • PROG: 프로그램으로 간주, TRDIR에서 프로그램 존재 및 타입 확인
      • W3MI: WebDynpro 관련 오브젝트
      • TRAN: 트랜잭션 코드
      • 기타 오브젝트는 무시 (CONTINUE)
  • 프로그램 설명 조회
    • PERFORM find_program_name 서브루틴을 통해 설명(ctext) 저장
    • 프로그램 존재 여부는 TRDIR에서 SUBC = 1 또는 M 조건으로 확인

📌 DATA 선언

CONSTANTS: c_tran(4) VALUE 'TRAN'.
CONSTANTS: c_tabl(4) VALUE 'TABL'.
CONSTANTS: c_prog(4) VALUE 'PROG'.
CONSTANTS: c_w3mi(4) VALUE 'W3MI'.

DATA: BEGIN OF gt_transaction OCCURS 0,
        program LIKE tadir-obj_name,
        tcode   LIKE tstc-tcode,
      END OF gt_transaction.


DATA: BEGIN OF gt_smw0 OCCURS 0,
        program  LIKE tadir-obj_name,
        objid    LIKE wwwdata-objid,
        text     LIKE wwwdata-text,
        devclass LIKE tadir-devclass,
      END OF gt_smw0.



DATA: BEGIN OF gt_pro OCCURS 0,
        devclass  LIKE tadir-devclass,
        object    LIKE tadir-object,
        program   LIKE tadir-obj_name,
        ctext(70),
      END OF gt_pro.


DATA: BEGIN OF gt_display OCCURS 0,
        devclass   LIKE tdevc-devclass,
        program    LIKE tadir-obj_name,
        tcode      LIKE tstc-tcode,
        objid      LIKE wwwdata-objid,
        ctext(70),
        text(70),
        screen(4),
        bicon(4),
        zmark,
        uccheck(1),
        count      TYPE i,
      END OF gt_display.


DATA: BEGIN OF gt_program OCCURS 0,
        devclass  LIKE tadir-devclass,
        program   LIKE tadir-obj_name,
        ctext(70),
        uccheck   LIKE trdir-uccheck,
      END OF gt_program.

DATA: BEGIN OF gt_program1 OCCURS 0,
        devclass  LIKE tadir-devclass,
        program   LIKE tadir-obj_name,
        ctext(70),
      END OF gt_program1.

DATA: BEGIN OF gt_object OCCURS 0,
        devclass LIKE tadir-devclass,
        program  LIKE tadir-obj_name,
        obj_name LIKE tadir-obj_name,
      END OF gt_object.

DATA: BEGIN OF gt_screen OCCURS 0,
        program  LIKE tadir-obj_name,
        objid    LIKE wwwdata-objid,
        text     LIKE wwwdata-text,
        devclass LIKE tadir-devclass,
      END OF gt_screen.


DATA: BEGIN OF gt_table OCCURS 0,
        devclass LIKE tadir-devclass,
        program  LIKE tadir-obj_name,
        obj_name LIKE tadir-obj_name,
      END OF gt_table.


DATA: BEGIN OF gt_tcode OCCURS 0,
        devclass LIKE tadir-devclass,
        program  LIKE tadir-obj_name,
        tcode    LIKE tstc-tcode,
      END OF gt_tcode.

DATA: BEGIN OF table_names OCCURS 0,
        program LIKE tadir-obj_name,
        tabname LIKE dd02l-tabname,
        tabtext LIKE dd02t-ddtext,
      END OF table_names.


DATA: BEGIN OF gt_main OCCURS 0,
        devclass     LIKE tadir-devclass,
        main_program LIKE tadir-obj_name,
        sub_program  LIKE tadir-obj_name,
      END OF gt_main.

DATA: program  LIKE tadir-obj_name,
      devclass LIKE tadir-devclass.

RANGES: r_dev FOR tdevc-devclass.

 


📌 소스코드 - FORM find_program_name

FORM find_program_name  USING    programme_name
                        CHANGING programme_text.

  READ TEXTPOOL programme_name INTO i_programme_texts LANGUAGE sy-langu.

  READ TABLE i_programme_texts WITH KEY 'R'.
  IF sy-subrc EQ 0.
    programme_text = i_programme_texts-entry.
    DELETE i_programme_texts INDEX sy-tabix.
  ENDIF.
ENDFORM.                    " FIND_PROGRAM_NAME