CLASS zcl_abapgit_sotr_handler DEFINITION PUBLIC FINAL CREATE PUBLIC . PUBLIC SECTION. TYPES: ty_sotr_use_tt TYPE STANDARD TABLE OF sotr_use WITH DEFAULT KEY . CLASS-METHODS read_sotr IMPORTING !iv_pgmid TYPE pgmid !iv_object TYPE trobjtype !iv_obj_name TYPE csequence !io_xml TYPE REF TO zif_abapgit_xml_output OPTIONAL EXPORTING !et_sotr TYPE zif_abapgit_definitions=>ty_sotr_tt !et_sotr_use TYPE zif_abapgit_definitions=>ty_sotr_use_tt RAISING zcx_abapgit_exception . CLASS-METHODS create_sotr IMPORTING !iv_package TYPE devclass !io_xml TYPE REF TO zif_abapgit_xml_input RAISING zcx_abapgit_exception . PROTECTED SECTION. CLASS-METHODS get_sotr_usage IMPORTING !iv_pgmid TYPE pgmid !iv_object TYPE trobjtype !iv_obj_name TYPE csequence RETURNING VALUE(rt_sotr_use) TYPE ty_sotr_use_tt. CLASS-METHODS get_sotr_4_concept IMPORTING !iv_concept TYPE sotr_conc RETURNING VALUE(rs_sotr) TYPE zif_abapgit_definitions=>ty_sotr . PRIVATE SECTION. ENDCLASS. CLASS ZCL_ABAPGIT_SOTR_HANDLER IMPLEMENTATION. METHOD create_sotr. DATA: lt_objects TYPE sotr_objects, ls_paket TYPE sotr_pack, lv_object LIKE LINE OF lt_objects, lt_sotr TYPE zif_abapgit_definitions=>ty_sotr_tt, lt_sotr_use TYPE zif_abapgit_definitions=>ty_sotr_use_tt. FIELD-SYMBOLS: LIKE LINE OF lt_sotr. io_xml->read( EXPORTING iv_name = 'SOTR' CHANGING cg_data = lt_sotr ). io_xml->read( EXPORTING iv_name = 'SOTR_USE' CHANGING cg_data = lt_sotr_use ). LOOP AT lt_sotr ASSIGNING . CALL FUNCTION 'SOTR_OBJECT_GET_OBJECTS' EXPORTING object_vector = -header-objid_vec IMPORTING objects = lt_objects EXCEPTIONS object_not_found = 1 OTHERS = 2. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( |error from SOTR_OBJECT_GET_OBJECTS. Subrc = { sy-subrc }| ). ENDIF. READ TABLE lt_objects INDEX 1 INTO lv_object. ASSERT sy-subrc = 0. ls_paket-paket = iv_package. CALL FUNCTION 'SOTR_CREATE_CONCEPT' EXPORTING paket = ls_paket crea_lan = -header-crea_lan alias_name = -header-alias_name object = lv_object entries = -entries concept_default = -header-concept EXCEPTIONS package_missing = 1 crea_lan_missing = 2 object_missing = 3 paket_does_not_exist = 4 alias_already_exist = 5 object_type_not_found = 6 langu_missing = 7 identical_context_not_allowed = 8 text_too_long = 9 error_in_update = 10 no_master_langu = 11 error_in_concept_id = 12 alias_not_allowed = 13 tadir_entry_creation_failed = 14 internal_error = 15 error_in_correction = 16 user_cancelled = 17 no_entry_found = 18 OTHERS = 19. IF sy-subrc <> 0 AND sy-subrc <> 5. zcx_abapgit_exception=>raise( |Error from SOTR_CREATE_CONCEPT. Subrc = { sy-subrc }| ). ENDIF. ENDLOOP. CALL FUNCTION 'SOTR_USAGE_MODIFY' EXPORTING sotr_usage = lt_sotr_use. ENDMETHOD. METHOD get_sotr_4_concept. DATA: ls_header TYPE sotr_head, lt_entries TYPE sotr_text_tt. FIELD-SYMBOLS: LIKE LINE OF lt_entries. CALL FUNCTION 'SOTR_GET_CONCEPT' EXPORTING concept = iv_concept IMPORTING header = ls_header TABLES entries = lt_entries EXCEPTIONS no_entry_found = 1 OTHERS = 2. IF sy-subrc <> 0. RETURN. ENDIF. CLEAR: ls_header-paket, ls_header-crea_name, ls_header-crea_tstut, ls_header-chan_name, ls_header-chan_tstut, ls_header-system_id. LOOP AT lt_entries ASSIGNING . CLEAR: -version, -crea_name, -crea_tstut, -chan_name, -chan_tstut. ENDLOOP. rs_sotr-header = ls_header. rs_sotr-entries = lt_entries. ENDMETHOD. METHOD get_sotr_usage. DATA: lv_obj_name TYPE trobj_name. lv_obj_name = iv_obj_name. " Objects with multiple components IF iv_pgmid = 'LIMU' AND ( iv_object = 'WDYV' OR iv_object = 'WAPP' ). lv_obj_name+30 = '%'. ENDIF. CALL FUNCTION 'SOTR_USAGE_READ' EXPORTING pgmid = iv_pgmid object = iv_object obj_name = lv_obj_name IMPORTING sotr_usage = rt_sotr_use EXCEPTIONS no_entry_found = 1 error_in_pgmid = 2 OTHERS = 3. IF sy-subrc = 0. SORT rt_sotr_use. ENDIF. ENDMETHOD. METHOD read_sotr. FIELD-SYMBOLS TYPE sotr_use. " Known SOTR usage... " LIMU: CPUB, WAPP, WDYV " R3TR: ENHC, ENHO, ENHS, ENSC, SCGR, SMIF, WDYA, WEBI, WEBS et_sotr_use = get_sotr_usage( iv_pgmid = iv_pgmid iv_object = iv_object iv_obj_name = iv_obj_name ). LOOP AT et_sotr_use ASSIGNING WHERE NOT concept IS INITIAL. INSERT get_sotr_4_concept( -concept ) INTO TABLE et_sotr. ENDLOOP. IF io_xml IS BOUND. io_xml->add( iv_name = 'SOTR' ig_data = et_sotr ). io_xml->add( iv_name = 'SOTR_USE' ig_data = et_sotr_use ). ENDIF. ENDMETHOD. ENDCLASS.