*&---------------------------------------------------------------------* *& Include ZABAPGIT_TADIR *&---------------------------------------------------------------------* *----------------------------------------------------------------------* * CLASS lcl_tadir DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_tadir DEFINITION FINAL. PUBLIC SECTION. CLASS-METHODS: read IMPORTING iv_package TYPE tadir-devclass RETURNING VALUE(rt_tadir) TYPE ty_tadir_tt RAISING lcx_exception, read_single IMPORTING iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR' iv_object TYPE tadir-object iv_obj_name TYPE tadir-obj_name RETURNING VALUE(rs_tadir) TYPE tadir, get_object_package IMPORTING iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR' iv_object TYPE tadir-object iv_obj_name TYPE tadir-obj_name RETURNING VALUE(rv_devclass) TYPE tadir-devclass. PRIVATE SECTION. CLASS-METHODS: check_exists IMPORTING it_tadir TYPE ty_tadir_tt RETURNING VALUE(rt_tadir) TYPE ty_tadir_tt RAISING lcx_exception, build IMPORTING iv_package TYPE tadir-devclass iv_path TYPE string RETURNING VALUE(rt_tadir) TYPE ty_tadir_tt RAISING lcx_exception. ENDCLASS. "lcl_tadir DEFINITION *----------------------------------------------------------------------* * CLASS lcl_tadir IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_tadir IMPLEMENTATION. METHOD read_single. DATA: lv_obj_name TYPE tadir-obj_name. IF iv_object = 'SICF'. CONCATENATE iv_obj_name '%' INTO lv_obj_name. ELSE. lv_obj_name = iv_obj_name. ENDIF. SELECT SINGLE * FROM tadir INTO rs_tadir WHERE pgmid = iv_pgmid AND object = iv_object AND obj_name LIKE lv_obj_name. "#EC CI_SUBRC "#EC CI_GENBUFF ENDMETHOD. "read_single METHOD get_object_package. DATA ls_tadir TYPE tadir. ls_tadir = read_single( iv_pgmid = iv_pgmid iv_object = iv_object iv_obj_name = iv_obj_name ). IF ls_tadir-delflag = 'X'. RETURN. "Mark for deletion -> return nothing ENDIF. rv_devclass = ls_tadir-devclass. ENDMETHOD. "get_object_package. METHOD check_exists. DATA: lv_exists TYPE abap_bool, ls_item TYPE ty_item. FIELD-SYMBOLS: LIKE LINE OF it_tadir. * rows from database table TADIR are not removed for * transportable objects until the transport is released LOOP AT it_tadir ASSIGNING . ls_item-obj_type = -object. ls_item-obj_name = -obj_name. IF lcl_objects=>is_supported( ls_item ) = abap_true. lv_exists = lcl_objects=>exists( ls_item ). IF lv_exists = abap_true. APPEND TO rt_tadir. ENDIF. ELSE. APPEND TO rt_tadir. ENDIF. ENDLOOP. ENDMETHOD. "check_exists METHOD read. * start recursion rt_tadir = build( iv_package = iv_package iv_path = '' ). rt_tadir = check_exists( rt_tadir ). ENDMETHOD. "read METHOD build. DATA: lv_index TYPE i, lt_tadir TYPE ty_tadir_tt, lt_tdevc TYPE STANDARD TABLE OF tdevc, lv_len TYPE i, lv_message TYPE string, lv_path TYPE string, lv_category TYPE seoclassdf-category. FIELD-SYMBOLS: LIKE LINE OF lt_tdevc, LIKE LINE OF rt_tadir. SELECT * FROM tadir INTO CORRESPONDING FIELDS OF TABLE rt_tadir WHERE devclass = iv_package AND object <> 'DEVC' AND object <> 'SOTR' AND object <> 'SFB1' AND object <> 'SFB2' AND delflag = abap_false ORDER BY PRIMARY KEY. "#EC CI_GENBUFF "#EC CI_SUBRC LOOP AT rt_tadir ASSIGNING . lv_index = sy-tabix. -path = iv_path. CASE -object. WHEN 'SICF'. -obj_name = -obj_name(15). WHEN 'INTF'. SELECT SINGLE category FROM seoclassdf INTO lv_category WHERE clsname = -obj_name AND ( version = '1' OR version = '0' ) ##warn_ok. "#EC CI_GENBUFF IF sy-subrc = 0 AND lv_category = seoc_category_webdynpro_class. DELETE rt_tadir INDEX lv_index. ENDIF. ENDCASE. ENDLOOP. * look for subpackages SELECT * FROM tdevc INTO TABLE lt_tdevc WHERE parentcl = iv_package ORDER BY PRIMARY KEY. "#EC CI_SUBRC "#EC CI_GENBUFF LOOP AT lt_tdevc ASSIGNING . lv_len = strlen( iv_package ). IF -devclass(lv_len) <> iv_package. * if abapGit project is installed in package ZZZ, all subpackages should be named * ZZZ_something. This will define the folder name in the zip file to be "something", * similarily with online projects lv_message = 'Unexpected package naming(' && -devclass && ')' ##no_text. MESSAGE lv_message TYPE 'I'. CONTINUE. ENDIF. lv_path = -devclass+lv_len. IF lv_path(1) = '_'. lv_path = lv_path+1. ENDIF. TRANSLATE lv_path TO LOWER CASE. CONCATENATE iv_path lv_path '/' INTO lv_path. lt_tadir = build( iv_package = -devclass iv_path = lv_path ). APPEND LINES OF lt_tadir TO rt_tadir. ENDLOOP. ENDMETHOD. "build ENDCLASS. "lcl_tadir IMPLEMENTATION