Fix jump for VIEW and TOBJ

This commit is contained in:
Christian Guenter 2019-05-16 15:26:29 +02:00 committed by Lars Hvam
parent 9fade89856
commit 0d54997b44
2 changed files with 115 additions and 59 deletions

View File

@ -239,42 +239,22 @@ CLASS ZCL_ABAPGIT_OBJECT_TOBJ IMPLEMENTATION.
METHOD zif_abapgit_object~jump.
DATA: ls_bcdata TYPE bdcdata,
lt_bcdata TYPE STANDARD TABLE OF bdcdata.
DATA: lv_object_name TYPE e071-obj_name.
ls_bcdata-program = 'SAPMSVIM'.
ls_bcdata-dynpro = '0050'.
ls_bcdata-dynbegin = 'X'.
APPEND ls_bcdata TO lt_bcdata.
lv_object_name = ms_item-obj_name.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'VIMDYNFLDS-VIEWNAME'.
ls_bcdata-fval = substring( val = ms_item-obj_name
len = strlen( ms_item-obj_name ) - 1 ).
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'VIMDYNFLDS-ELEM_GEN'.
ls_bcdata-fval = abap_true.
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'BDC_OKCODE'.
ls_bcdata-fval = '=SHOW'.
APPEND ls_bcdata TO lt_bcdata.
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
STARTING NEW TASK 'GIT'
CALL FUNCTION 'TR_OBJECT_JUMP_TO_TOOL'
EXPORTING
tcode = 'SE54'
mode_val = 'E'
TABLES
using_tab = lt_bcdata
iv_pgmid = 'R3TR'
iv_object = ms_item-obj_type
iv_obj_name = lv_object_name
EXCEPTIONS
OTHERS = 1.
jump_not_possible = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from ABAP4_CALL_TRANSACTION, TOBJ' ).
zcx_abapgit_exception=>raise( |Jump not possible. Subrc={ sy-subrc } |
&& |from TR_OBJECT_JUMP_TO_TOOL| ).
ENDIF.
ENDMETHOD.

View File

@ -6,6 +6,39 @@ CLASS zcl_abapgit_object_view DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
PROTECTED SECTION.
PRIVATE SECTION.
TYPES: tty_dd26v TYPE STANDARD TABLE OF dd26v
WITH NON-UNIQUE DEFAULT KEY,
tty_dd27p TYPE STANDARD TABLE OF dd27p
WITH NON-UNIQUE DEFAULT KEY,
tty_dd28j TYPE STANDARD TABLE OF dd28j
WITH NON-UNIQUE DEFAULT KEY,
tty_dd28v TYPE STANDARD TABLE OF dd28v
WITH NON-UNIQUE DEFAULT KEY.
CONSTANTS: BEGIN OF co_viewclass,
help TYPE viewclass VALUE 'H',
database TYPE viewclass VALUE 'D',
projection TYPE viewclass VALUE 'P',
structure TYPE viewclass VALUE 'S',
maintenance TYPE viewclass VALUE 'C',
entity TYPE viewclass VALUE 'E',
view_variant TYPE viewclass VALUE 'V',
append TYPE viewclass VALUE 'A',
external TYPE viewclass VALUE 'X',
replication TYPE viewclass VALUE 'R',
END OF co_viewclass.
METHODS:
read_view
EXPORTING
es_dd25v TYPE dd25v
es_dd09l TYPE dd09l
et_dd26v TYPE zcl_abapgit_object_view=>tty_dd26v
et_dd27p TYPE zcl_abapgit_object_view=>tty_dd27p
et_dd28j TYPE zcl_abapgit_object_view=>tty_dd28j
et_dd28v TYPE zcl_abapgit_object_view=>tty_dd28v
RAISING
zcx_abapgit_exception.
ENDCLASS.
@ -162,46 +195,60 @@ CLASS ZCL_ABAPGIT_OBJECT_VIEW IMPLEMENTATION.
METHOD zif_abapgit_object~jump.
DATA: ls_dd25v TYPE dd25v.
read_view(
IMPORTING
es_dd25v = ls_dd25v ).
CASE ls_dd25v-viewclass.
WHEN co_viewclass-view_variant.
CALL FUNCTION 'RS_TOOL_ACCESS'
EXPORTING
operation = 'SHOW'
object_name = ms_item-obj_name
object_type = ms_item-obj_type
in_new_window = abap_true
EXCEPTIONS
not_executed = 1
invalid_object_type = 2
OTHERS = 3.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error from RS_TOOL_ACCESS. Subrc={ sy-subrc }| ).
ENDIF.
WHEN OTHERS.
jump_se11( iv_radio = 'RSRD1-VIMA'
iv_field = 'RSRD1-VIMA_VAL' ).
ENDCASE.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: lv_name TYPE ddobjname,
ls_dd25v TYPE dd25v,
DATA: ls_dd25v TYPE dd25v,
ls_dd09l TYPE dd09l,
lt_dd26v TYPE TABLE OF dd26v,
lt_dd27p TYPE TABLE OF dd27p,
lt_dd28j TYPE TABLE OF dd28j,
lt_dd28v TYPE TABLE OF dd28v.
lt_dd26v TYPE tty_dd26v,
lt_dd27p TYPE tty_dd27p,
lt_dd28j TYPE tty_dd28j,
lt_dd28v TYPE tty_dd28v.
FIELD-SYMBOLS: <ls_dd27p> LIKE LINE OF lt_dd27p.
lv_name = ms_item-obj_name.
CALL FUNCTION 'DDIF_VIEW_GET'
EXPORTING
name = lv_name
state = 'A'
langu = mv_language
read_view(
IMPORTING
dd25v_wa = ls_dd25v
dd09l_wa = ls_dd09l
TABLES
dd26v_tab = lt_dd26v
dd27p_tab = lt_dd27p
dd28j_tab = lt_dd28j
dd28v_tab = lt_dd28v
EXCEPTIONS
illegal_input = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from DDIF_VIEW_GET' ).
ENDIF.
es_dd25v = ls_dd25v
es_dd09l = ls_dd09l
et_dd26v = lt_dd26v
et_dd27p = lt_dd27p
et_dd28j = lt_dd28j
et_dd28v = lt_dd28v ).
IF ls_dd25v IS INITIAL.
RETURN. " does not exist in system
ENDIF.
@ -252,4 +299,33 @@ CLASS ZCL_ABAPGIT_OBJECT_VIEW IMPLEMENTATION.
iv_name = 'DD28V_TABLE' ).
ENDMETHOD.
METHOD read_view.
DATA: lv_name TYPE ddobjname.
lv_name = ms_item-obj_name.
CALL FUNCTION 'DDIF_VIEW_GET'
EXPORTING
name = lv_name
state = 'A'
langu = mv_language
IMPORTING
dd25v_wa = es_dd25v
dd09l_wa = es_dd09l
TABLES
dd26v_tab = et_dd26v
dd27p_tab = et_dd27p
dd28j_tab = et_dd28j
dd28v_tab = et_dd28v
EXCEPTIONS
illegal_input = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from DDIF_VIEW_GET' ).
ENDIF.
ENDMETHOD.
ENDCLASS.