From 1ccc94d881c1d6700e207aa97c8855a796f13659 Mon Sep 17 00:00:00 2001 From: Christian Guenter Date: Fri, 4 Aug 2017 06:50:42 +0000 Subject: [PATCH 1/2] #879 --- src/zabapgit_object_dial.prog.abap | 155 ++++++++++++++++++++++ src/zabapgit_object_dial.prog.xml | 25 ++++ src/zabapgit_object_serializing.prog.abap | 1 + 3 files changed, 181 insertions(+) create mode 100644 src/zabapgit_object_dial.prog.abap create mode 100644 src/zabapgit_object_dial.prog.xml diff --git a/src/zabapgit_object_dial.prog.abap b/src/zabapgit_object_dial.prog.abap new file mode 100644 index 000000000..1c8b6c26c --- /dev/null +++ b/src/zabapgit_object_dial.prog.abap @@ -0,0 +1,155 @@ +*&---------------------------------------------------------------------* +*& Include zabapgit_object_dial +*&---------------------------------------------------------------------* + + +CLASS lcl_object_dial DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + + PRIVATE SECTION. + TYPES: BEGIN OF ty_dialog_module, + tdct TYPE tdct, + dia_pars TYPE STANDARD TABLE OF diapar + WITH NON-UNIQUE DEFAULT KEY, + END OF ty_dialog_module. + + METHODS: + _read_tdct + RETURNING + VALUE(rs_tdct) TYPE tdct. + +ENDCLASS. + +CLASS lcl_object_dial IMPLEMENTATION. + + METHOD lif_object~has_changed_since. + + rv_changed = abap_true. + + ENDMETHOD. + + METHOD lif_object~changed_by. + + rv_user = c_user_unknown. + + ENDMETHOD. + + METHOD lif_object~get_metadata. + + rs_metadata = get_metadata( ). + + ENDMETHOD. + + METHOD lif_object~exists. + + DATA: ls_tdct TYPE tdct. + + ls_tdct = _read_tdct( ). + + rv_bool = boolc( ls_tdct IS NOT INITIAL ). + + ENDMETHOD. + + METHOD lif_object~serialize. + + DATA: ls_dialog_module TYPE ty_dialog_module. + + ls_dialog_module-tdct = _read_tdct( ). + + SELECT * FROM diapar + INTO TABLE ls_dialog_module-dia_pars + WHERE dnam = ls_dialog_module-tdct-dnam. + + io_xml->add( iv_name = 'DIAL' + ig_data = ls_dialog_module ). + + ENDMETHOD. + + METHOD lif_object~deserialize. + + DATA: ls_dialog_module TYPE ty_dialog_module. + + io_xml->read( + EXPORTING + iv_name = 'DIAL' + CHANGING + cg_data = ls_dialog_module ). + + CALL FUNCTION 'RS_DIALOG_CREATE' + EXPORTING + dialogname = ls_dialog_module-tdct-dnam + dynpronumber = ls_dialog_module-tdct-dynr + programname = ls_dialog_module-tdct-prog +* It seems that dia_par parameter doesn't do anything, but we can't omit it +* Parameters are inserted below + TABLES + dia_par = ls_dialog_module-dia_pars + EXCEPTIONS + dialog_already_exists = 1 + invalid_name = 2 + OTHERS = 3. + + IF sy-subrc <> 0. + lcx_exception=>raise( |Error deserializing dialogmodule { ms_item-obj_name }| ). + ENDIF. + + " It seems that there's no API for diapar, therefore we manipulate it directly + INSERT diapar FROM TABLE ls_dialog_module-dia_pars. + + ENDMETHOD. + + METHOD lif_object~delete. + + DATA: ls_tdct TYPE tdct. + + " We don't use RS_DIALOG_DELETE because it interacts with the GUI + + ls_tdct = _read_tdct( ). + + PERFORM fu_delete_dialog IN PROGRAM sapmsdia USING ls_tdct. + + ENDMETHOD. + + + METHOD lif_object~jump. + + DATA: objectname TYPE tdct-dnam. + + objectname = ms_item-obj_name. + + CALL FUNCTION 'RS_DIALOG_SHOW' + EXPORTING + objectname = objectname + type = 'VW' + EXCEPTIONS + object_not_found = 1 + OTHERS = 2. + + IF sy-subrc <> 0. + lcx_exception=>raise( |Error from RS_DIALOG_SHOW, DIAL| ). + ENDIF. + + ENDMETHOD. + + METHOD lif_object~compare_to_remote_version. + + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. + + ENDMETHOD. + + + METHOD _read_tdct. + + DATA: dnam TYPE tdct-dnam. + + dnam = ms_item-obj_name. + + SELECT SINGLE * FROM tdct + INTO rs_tdct + WHERE dnam = dnam. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/zabapgit_object_dial.prog.xml b/src/zabapgit_object_dial.prog.xml new file mode 100644 index 000000000..eb942b95c --- /dev/null +++ b/src/zabapgit_object_dial.prog.xml @@ -0,0 +1,25 @@ + + + + + + ZABAPGIT_OBJECT_DIAL + A + X + S + D$ + I + X + D$S + X + + + + R + zabapgit_object_dial + 20 + + + + + diff --git a/src/zabapgit_object_serializing.prog.abap b/src/zabapgit_object_serializing.prog.abap index baed8652b..a1d4a6ac0 100644 --- a/src/zabapgit_object_serializing.prog.abap +++ b/src/zabapgit_object_serializing.prog.abap @@ -10,6 +10,7 @@ INCLUDE zabapgit_object_oo_functions. INCLUDE zabapgit_object_clas. INCLUDE zabapgit_object_dcls. INCLUDE zabapgit_object_ddls. +INCLUDE zabapgit_object_dial. INCLUDE zabapgit_object_doct. INCLUDE zabapgit_object_docv. INCLUDE zabapgit_object_doma. From 88be683c6ad3268952db4ef426992fb3d11dba0b Mon Sep 17 00:00:00 2001 From: Christian Guenter Date: Sun, 6 Aug 2017 17:04:11 +0000 Subject: [PATCH 2/2] tadir_insert | delete via batch input --- src/zabapgit_object_dial.prog.abap | 60 ++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 4 deletions(-) diff --git a/src/zabapgit_object_dial.prog.abap b/src/zabapgit_object_dial.prog.abap index 1c8b6c26c..6b314fc79 100644 --- a/src/zabapgit_object_dial.prog.abap +++ b/src/zabapgit_object_dial.prog.abap @@ -82,6 +82,7 @@ CLASS lcl_object_dial IMPLEMENTATION. dialogname = ls_dialog_module-tdct-dnam dynpronumber = ls_dialog_module-tdct-dynr programname = ls_dialog_module-tdct-prog + suppress_corr_check = abap_false * It seems that dia_par parameter doesn't do anything, but we can't omit it * Parameters are inserted below TABLES @@ -98,17 +99,68 @@ CLASS lcl_object_dial IMPLEMENTATION. " It seems that there's no API for diapar, therefore we manipulate it directly INSERT diapar FROM TABLE ls_dialog_module-dia_pars. + tadir_insert( iv_package ). + ENDMETHOD. METHOD lif_object~delete. - DATA: ls_tdct TYPE tdct. + DATA: ls_bcdata TYPE bdcdata, + lt_bcdata TYPE STANDARD TABLE OF bdcdata. - " We don't use RS_DIALOG_DELETE because it interacts with the GUI + ls_bcdata-program = 'SAPMSDIA'. + ls_bcdata-dynpro = '1010'. + ls_bcdata-dynbegin = 'X'. + APPEND ls_bcdata TO lt_bcdata. - ls_tdct = _read_tdct( ). + CLEAR ls_bcdata. + ls_bcdata-fnam = 'DIAPAR-DNAM'. + ls_bcdata-fval = ms_item-obj_name. + APPEND ls_bcdata TO lt_bcdata. - PERFORM fu_delete_dialog IN PROGRAM sapmsdia USING ls_tdct. + CLEAR ls_bcdata. + ls_bcdata-fnam = 'RS38L-PARM'. + ls_bcdata-fval = abap_true. + APPEND ls_bcdata TO lt_bcdata. + + CLEAR ls_bcdata. + ls_bcdata-fnam = 'BDC_OKCODE'. + ls_bcdata-fval = '=DELF'. + APPEND ls_bcdata TO lt_bcdata. + + CLEAR ls_bcdata. + ls_bcdata-program = 'SAPLSPO1'. + ls_bcdata-dynpro = '0100'. + ls_bcdata-dynbegin = 'X'. + APPEND ls_bcdata TO lt_bcdata. + + CLEAR ls_bcdata. + ls_bcdata-fnam = 'BDC_OKCODE'. + ls_bcdata-fval = '=YES'. + APPEND ls_bcdata TO lt_bcdata. + + ls_bcdata-program = 'SAPMSDIA'. + ls_bcdata-dynpro = '1010'. + ls_bcdata-dynbegin = 'X'. + APPEND ls_bcdata TO lt_bcdata. + + CLEAR ls_bcdata. + ls_bcdata-fnam = 'BDC_OKCODE'. + ls_bcdata-fval = '=BACK'. + APPEND ls_bcdata TO lt_bcdata. + + CALL FUNCTION 'ABAP4_CALL_TRANSACTION' + EXPORTING + tcode = 'SE35' + mode_val = 'E' + TABLES + using_tab = lt_bcdata + EXCEPTIONS + OTHERS = 1. + + IF sy-subrc <> 0. + lcx_exception=>raise( 'error from ABAP4_CALL_TRANSACTION, SE35' ). + ENDIF. ENDMETHOD.