diff --git a/src/#mbtools#cl_command__show.clas.abap b/src/#mbtools#cl_command__show.clas.abap
index a60a186..0c8736e 100644
--- a/src/#mbtools#cl_command__show.clas.abap
+++ b/src/#mbtools#cl_command__show.clas.abap
@@ -57,6 +57,12 @@ CLASS /mbtools/cl_command__show DEFINITION
RETURNING
VALUE(rs_tadir_key) TYPE /mbtools/if_definitions=>ty_tadir_key.
+ CLASS-METHODS get_report_from_tcode
+ IMPORTING
+ !iv_tcode TYPE csequence
+ RETURNING
+ VALUE(rs_report) TYPE srepovari.
+
ENDCLASS.
@@ -146,34 +152,41 @@ CLASS /mbtools/cl_command__show IMPLEMENTATION.
METHOD get_object_from_tcode.
DATA:
- lv_tcode TYPE tstc-tcode,
- lv_param TYPE tstcp-param,
- lt_param TYPE string_table,
- ls_report TYPE srepovari,
- ls_mtdkey TYPE seocpdkey,
- lv_object TYPE c LENGTH 120.
-
- lv_tcode = iv_object_name.
-
- rs_tadir_key-pgmid = 'R3TR'.
+ lv_param TYPE tstcp-param,
+ lt_param TYPE string_table,
+ ls_report TYPE srepovari,
+ ls_mtdkey TYPE seocpdkey,
+ lv_object_is_tcode TYPE abap_bool,
+ lv_object TYPE c LENGTH 120.
+
+ rs_tadir_key-pgmid = 'R3TR'.
+ rs_tadir_key-object = 'PROG'.
+
+ " Dialog transaction
+ SELECT SINGLE pgmna INTO lv_object FROM tstc WHERE tcode = iv_object_name.
+ IF lv_object IS NOT INITIAL.
+ rs_tadir_key-obj_name = lv_object.
+ RETURN.
+ ENDIF.
- " Report transaction
- CALL FUNCTION 'SRT_GET_REPORT_OF_TCODE'
- EXPORTING
- tcode = lv_tcode
- IMPORTING
- report_structure = ls_report
- EXCEPTIONS
- no_report_transaction = 1
- OTHERS = 2.
- IF sy-subrc = 0 AND ls_report-report IS NOT INITIAL.
- rs_tadir_key-object = 'PROG'.
- rs_tadir_key-obj_name = ls_report-report.
+ " Report transactions
+ ls_report = get_report_from_tcode( iv_object_name ).
+ IF ls_report-report IS NOT INITIAL.
+ CASE ls_report-reporttype.
+ WHEN ''.
+ rs_tadir_key-obj_name = ls_report-report.
+ WHEN 'TR'.
+ " It is very unlikely to have a parameter t-code for another parameter t-code
+ " and SAP discourages it with warning so this is sufficient
+ rs_tadir_key-obj_name = get_report_from_tcode( ls_report-report )-report.
+ WHEN OTHERS.
+ MESSAGE 'It is a generated report' TYPE 'I'.
+ ENDCASE.
RETURN.
ENDIF.
" Parameter Transaction
- SELECT SINGLE param INTO lv_param FROM tstcp WHERE tcode = lv_tcode.
+ SELECT SINGLE param INTO lv_param FROM tstcp WHERE tcode = iv_object_name.
IF sy-subrc <> 0.
RETURN.
ENDIF.
@@ -182,11 +195,10 @@ CLASS /mbtools/cl_command__show IMPLEMENTATION.
FIND REGEX '\\PROGRAM=(.+)\\CLASS' IN TABLE lt_param SUBMATCHES lv_object.
IF sy-subrc <> 0.
- FIND REGEX 'RS38M-PROGRAMM=(.+)' IN TABLE lt_param SUBMATCHES lv_object ##SUBRC_OK.
+ FIND REGEX 'RS38M-PROGRAMM=(.+)' IN TABLE lt_param SUBMATCHES lv_object.
ENDIF.
- IF lv_object IS NOT INITIAL.
- rs_tadir_key-object = 'PROG'.
+ IF sy-subrc = 0.
rs_tadir_key-obj_name = lv_object.
RETURN.
ENDIF.
@@ -203,9 +215,8 @@ CLASS /mbtools/cl_command__show IMPLEMENTATION.
IF ls_mtdkey-cpdname IS NOT INITIAL.
rs_tadir_key-object = 'PROG'.
rs_tadir_key-obj_name = cl_oo_classname_service=>get_method_include( ls_mtdkey ).
- ELSE.
- RETURN.
ENDIF.
+ RETURN.
ENDIF.
FIND REGEX 'TABLENAME=(.+)' IN TABLE lt_param SUBMATCHES lv_object.
@@ -243,6 +254,45 @@ CLASS /mbtools/cl_command__show IMPLEMENTATION.
RETURN.
ENDIF.
+ " if skip initial screen is checked and it is assigned to t-code
+ FIND REGEX '\/\*([\w|\/]+)' IN TABLE lt_param SUBMATCHES lv_object.
+ IF sy-subrc = 0.
+ lv_object_is_tcode = abap_true.
+ ELSE.
+ " if skip initial screen is not checked
+ FIND REGEX '\/N([\w|\/]+)' IN TABLE lt_param SUBMATCHES lv_object.
+ IF sy-subrc = 0.
+ lv_object_is_tcode = abap_true.
+ ENDIF.
+ ENDIF.
+
+ IF lv_object_is_tcode = abap_true.
+ rs_tadir_key-object = 'PROG'.
+ rs_tadir_key-obj_name = get_report_from_tcode( lv_object )-report.
+ RETURN.
+ ENDIF.
+
+ ENDMETHOD.
+
+
+ METHOD get_report_from_tcode.
+
+ DATA lv_tcode TYPE tstc-tcode.
+
+ lv_tcode = iv_tcode.
+
+ CALL FUNCTION 'SRT_GET_REPORT_OF_TCODE'
+ EXPORTING
+ tcode = lv_tcode
+ IMPORTING
+ report_structure = rs_report
+ EXCEPTIONS
+ no_report_transaction = 1
+ OTHERS = 2.
+ IF sy-subrc <> 0.
+ CLEAR rs_report.
+ ENDIF.
+
ENDMETHOD.
diff --git a/src/#mbtools#cl_command__show.clas.testclasses.abap b/src/#mbtools#cl_command__show.clas.testclasses.abap
new file mode 100644
index 0000000..bb9de95
--- /dev/null
+++ b/src/#mbtools#cl_command__show.clas.testclasses.abap
@@ -0,0 +1,120 @@
+
+CLASS ltcl_command_show DEFINITION FOR TESTING RISK LEVEL HARMLESS
+ DURATION SHORT FINAL.
+
+ PRIVATE SECTION.
+ METHODS:
+ test
+ IMPORTING
+ iv_tcode TYPE csequence
+ iv_type TYPE csequence
+ iv_name TYPE csequence,
+ dialog_transaction FOR TESTING,
+ report_transaction FOR TESTING,
+ oo_transaction FOR TESTING,
+ variant_transaction FOR TESTING,
+ parameter_transaction FOR TESTING.
+
+ENDCLASS.
+
+CLASS /mbtools/cl_command__show DEFINITION LOCAL FRIENDS ltcl_command_show.
+
+CLASS ltcl_command_show IMPLEMENTATION.
+
+ METHOD test.
+
+ DATA lv_tcode TYPE tstc-tcode.
+ DATA ls_act TYPE /mbtools/if_definitions=>ty_tadir_key.
+
+ SELECT SINGLE tcode INTO lv_tcode FROM tstc WHERE tcode = iv_tcode.
+ CHECK sy-subrc = 0.
+
+ ls_act = /mbtools/cl_command__show=>get_object_from_tcode( iv_tcode ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = ls_act-object
+ exp = iv_type ).
+ cl_abap_unit_assert=>assert_equals(
+ act = ls_act-obj_name
+ exp = iv_name ).
+
+ ENDMETHOD.
+
+ METHOD dialog_transaction.
+
+ test(
+ iv_tcode = 'SE16'
+ iv_type = 'PROG'
+ iv_name = 'SAPLSETB' ).
+
+ ENDMETHOD.
+
+ METHOD report_transaction.
+
+ test(
+ iv_tcode = 'SE91'
+ iv_type = 'PROG'
+ iv_name = 'RSMESSAGES' ).
+
+ ENDMETHOD.
+
+ METHOD oo_transaction.
+
+ " OO transactional model
+ test(
+ iv_tcode = 'SE20'
+ iv_type = 'PROG'
+ iv_name = 'CL_ENHANCEMENTS===============CM001' ).
+
+ " Local OO transactional model
+ test(
+ iv_tcode = 'SE30'
+ iv_type = 'PROG'
+ iv_name = 'SATRA_START' ).
+
+ ENDMETHOD.
+
+ METHOD variant_transaction.
+
+ test(
+ iv_tcode = 'SU0'
+ iv_type = 'PROG'
+ iv_name = 'SAPMSUU0O' ).
+
+ ENDMETHOD.
+
+ METHOD parameter_transaction.
+
+ test(
+ iv_tcode = 'SCC4'
+ iv_type = 'VIEW'
+ iv_name = 'T000' ).
+
+ test(
+ iv_tcode = 'SEGW'
+ iv_type = 'PROG'
+ iv_name = '/IWBEP/R_SBUI_SERVICE_BUILDER' ).
+
+ test(
+ iv_tcode = 'SE80'
+ iv_type = 'PROG'
+ iv_name = 'SAPMSEU0' ).
+
+ test(
+ iv_tcode = 'RBDAPP01'
+ iv_type = 'PROG'
+ iv_name = 'RBDAPP01' ).
+
+ test(
+ iv_tcode = 'SE16T000'
+ iv_type = 'TABL'
+ iv_name = 'T000' ).
+
+ test(
+ iv_tcode = 'STRORG'
+ iv_type = 'WDYA'
+ iv_name = 'CTS_ORGANIZER' ).
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/#mbtools#cl_command__show.clas.xml b/src/#mbtools#cl_command__show.clas.xml
index 409f5b0..82f328f 100644
--- a/src/#mbtools#cl_command__show.clas.xml
+++ b/src/#mbtools#cl_command__show.clas.xml
@@ -12,6 +12,7 @@
X
K
/MBTOOLS/BC_CL
+ X
-