*&---------------------------------------------------------------------*
*& Report zbw_hcpr_cp
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zbw_hcpr_cp.
CLASS zcl_bw_hcpr_cp DEFINITION DEFERRED.
CLASS zcl_bw_hcpr_cp DEFINITION
FINAL
CREATE PUBLIC.
PUBLIC SECTION.
TYPES: BEGIN OF ty_hcpr,
hcprnm TYPE c LENGTH 30,
vers TYPE c LENGTH 10,
timt TYPE tzonref-tstampl,
xml_ui TYPE rsrawstring.
TYPES: END OF ty_hcpr.
TYPES: t_ty_hcpr TYPE STANDARD TABLE OF ty_hcpr.
"!
"! Check DDIC
METHODS constructor.
"!
"! Create global table
METHODS create_global_ddic.
"!
"! Create backup
"! @parameter iv_hcprnm | Composite Provider Name
"! @parameter iv_vers | Backup version
METHODS create_backup
IMPORTING iv_hcprnm TYPE char30
iv_vers TYPE char10.
"!
"! Restore Backup
"! @parameter iv_hcprnm | Composite Provider Name
"! @parameter iv_vers | Backup version
METHODS restore_backup
IMPORTING iv_hcprnm TYPE char30
iv_vers TYPE char10.
"!
"! Show context composite provider mapping
"! @parameter iv_hcprnm | Composite Provider Name
"! @parameter iv_vers |
METHODS show_mapping
IMPORTING iv_hcprnm TYPE char30
iv_vers TYPE char10.
"!
"! Activate Composite Provider
"! @parameter iv_hcprnm | Activate HCPR
"! @parameter iv_vers |
METHODS activate_hcpr
IMPORTING iv_hcprnm TYPE char30.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_bw_hcpr_cp IMPLEMENTATION.
METHOD create_global_ddic.
TYPES: BEGIN OF t_tables,
tablename TYPE string.
INCLUDE TYPE dd03p.
TYPES: END OF t_tables.
TYPES: t_ty_tables TYPE STANDARD TABLE OF t_tables WITH EMPTY KEY.
DATA: lv_objname TYPE ddobjname,
lv_rc LIKE sy-subrc,
lv_obj_name TYPE tadir-obj_name,
ls_dd02v TYPE dd02v,
ls_dd09l TYPE dd09l,
lv_exist TYPE abap_bool,
lt_dd03p TYPE STANDARD TABLE OF dd03p WITH EMPTY KEY.
FIELD-SYMBOLS: LIKE LINE OF lt_dd03p.
DATA(lt_tables) = VALUE t_ty_tables(
( tablename = 'ZBW_HCPR_CP' fieldname = 'HCPRNM' position ='0001'
keyflag = abap_true datatype = 'CHAR' leng = '000030' )
( tablename = 'ZBW_HCPR_CP' fieldname = 'VERS' position ='0002'
keyflag = abap_true datatype = 'CHAR' leng = '000010' )
( tablename = 'ZBW_HCPR_CP' fieldname = 'TIMT' position ='0003'
datatype = 'DEC' leng = '000021' decimals = '000007' )
( tablename = 'ZBW_HCPR_CP' fieldname = 'XML_UI' position ='0004'
datatype = 'RSTR' )
).
ls_dd09l-tabname = 'ZBW_HCPR_CP'.
ls_dd09l-as4local = 'A'.
ls_dd09l-tabkat = '1'.
ls_dd09l-tabart = 'APPL1'.
ls_dd09l-bufallow = 'N'.
ls_dd02v-tabname = 'ZBW_HCPR_CP'.
ls_dd02v-ddlanguage = 'E'.
ls_dd02v-tabclass = 'TRANSP'.
ls_dd02v-ddtext = 'Generated by ZBWHCPR_CP'.
ls_dd02v-contflag = 'L'.
ls_dd02v-exclass = '1'.
SELECT SINGLE @abap_true ##SUBRC_OK
FROM dd02l
INTO @lv_exist
WHERE tabname = 'ZBW_HCPR_CP'
AND as4local = 'A'.
CHECK lv_exist = abap_false.
lv_objname = 'ZBW_HCPR_CP'.
lt_dd03p = CORRESPONDING #( lt_tables MAPPING tabname = tablename ).
IF lv_exist = abap_false.
CALL FUNCTION 'DDIF_TABL_PUT'
EXPORTING
name = lv_objname
dd02v_wa = ls_dd02v
dd09l_wa = ls_dd09l
TABLES
dd03p_tab = lt_dd03p
EXCEPTIONS
tabl_not_found = 1
name_inconsistent = 2
tabl_inconsistent = 3
put_failure = 4
put_refused = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL FUNCTION 'DDIF_TABL_ACTIVATE'
EXPORTING
name = lv_objname
auth_chk = abap_false
IMPORTING
rc = lv_rc
EXCEPTIONS
not_found = 1
put_failure = 2
OTHERS = 3.
IF sy-subrc <> 0 OR lv_rc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CLEAR lt_dd03p.
ENDIF.
ENDMETHOD.
METHOD create_backup.
SELECT SINGLE hcprnm, xml_ui
FROM rsohcpr
INTO @DATA(ls_rsohcpr)
WHERE hcprnm = @iv_hcprnm
AND objvers = 'A'.
DATA(ls_hcprtab) = CORRESPONDING ty_hcpr( ls_rsohcpr ).
ls_hcprtab-vers = iv_vers.
GET TIME STAMP FIELD ls_hcprtab-timt .
INSERT ('ZBW_HCPR_CP') FROM @ls_hcprtab.
IF sy-subrc <> 0.
MESSAGE 'Error during backup creation, check version' TYPE 'E'.
ENDIF.
ENDMETHOD.
METHOD restore_backup.
DATA: ls_hcprtab TYPE ty_hcpr.
SELECT SINGLE * FROM
('ZBW_HCPR_CP')
INTO @ls_hcprtab
WHERE hcprnm = @iv_hcprnm
AND vers = @iv_vers.
IF sy-subrc <> 0.
MESSAGE 'Error during backup restore, check version' TYPE 'E'.
ENDIF.
UPDATE rsohcpr
SET xml_ui = @ls_hcprtab-xml_ui
WHERE hcprnm = @ls_hcprtab-hcprnm.
IF sy-subrc <> 0.
MESSAGE 'Error during backup restore, check version' TYPE 'E'.
ENDIF.
ENDMETHOD.
METHOD show_mapping.
TYPES: BEGIN OF ty_output,
infoprovider TYPE rsdodsobject,
source TYPE rsdiobjnm,
target TYPE rsohcprcolnm,
END OF ty_output.
DATA: lv_offset TYPE i,
ls_output TYPE ty_output,
lt_output TYPE STANDARD TABLE OF ty_output,
lt_xml_info TYPE TABLE OF smum_xmltb,
lv_hcpr_xml_def TYPE rsrawstring,
lt_return TYPE STANDARD TABLE OF bapiret2.
SELECT SINGLE xml_ui
FROM ('ZBW_HCPR_CP')
INTO @lv_hcpr_xml_def
WHERE hcprnm = @iv_hcprnm
AND vers = @iv_vers.
IF sy-subrc <> 0.
MESSAGE 'No valid,inactive or supported CompositeProvider' TYPE 'I'.
EXIT.
ENDIF.
CALL FUNCTION 'SMUM_XML_PARSE'
EXPORTING
xml_input = lv_hcpr_xml_def
TABLES
xml_table = lt_xml_info
return = lt_return.
LOOP AT lt_xml_info REFERENCE INTO DATA(lr_xml_info).
IF lr_xml_info->cname = 'entity'.
DATA(lv_cvalue) = lr_xml_info->cvalue.
SEARCH lv_cvalue FOR 'composite'.
lv_offset = sy-fdpos.
lv_offset = lv_offset - 1.
TRY.
ls_output-infoprovider = lr_xml_info->cvalue(lv_offset). "CompositeProvider
CATCH cx_sy_range_out_of_bounds.
ls_output-infoprovider = lr_xml_info->cvalue.
ENDTRY.
ELSEIF
lr_xml_info->cname = 'targetName'.
ls_output-target = lr_xml_info->cvalue.
ELSEIF
lr_xml_info->cname = 'sourceName'.
ls_output-source = lr_xml_info->cvalue.
APPEND ls_output TO lt_output.
ENDIF.
ENDLOOP.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = DATA(lobj_alv)
CHANGING
t_table = lt_output ).
DATA(lobj_columns) = lobj_alv->get_columns( ).
lobj_columns->set_optimize( ).
DATA(lobj_funcs) = lobj_alv->get_functions( ).
lobj_funcs->set_all( ).
lobj_alv->display( ).
CATCH cx_salv_msg INTO DATA(lobj_excep).
MESSAGE lobj_excep TYPE 'E'.
ENDTRY.
ENDMETHOD.
METHOD constructor.
create_global_ddic( ).
ENDMETHOD.
METHOD activate_hcpr.
SUBMIT rsdg_hcpr_activate
WITH r_spcmp = abap_true
WITH so_hcpr = iv_hcprnm.
ENDMETHOD.
ENDCLASS.
DATA: lobj_hcpr_cp TYPE REF TO zcl_bw_hcpr_cp,
lv_timt TYPE tzonref-tstampl,
lv_tz TYPE ttzz-tzone,
lv_answer TYPE c length 1.
PARAMETERS: pa_hcpn TYPE rsohcprnm,
pa_vers TYPE char10.
PARAMETERS: pa_bkp RADIOBUTTON GROUP rg1,
pa_res RADIOBUTTON GROUP rg1,
pa_sho RADIOBUTTON GROUP rg1.
PARAMETERS: pa_act AS CHECKBOX.
end-of-selection.
lobj_hcpr_cp = NEW #( ).
IF pa_bkp = abap_true.
lobj_hcpr_cp->create_backup( iv_hcprnm = pa_hcpn
iv_vers = pa_vers ).
MESSAGE 'Backup done succesfully' TYPE 'S'.
ELSEIF pa_res = abap_true.
SELECT SINGLE timt
FROM ('ZBW_HCPR_CP')
WHERE hcprnm = @pa_hcpn
AND vers = @pa_vers
INTO @lv_timt.
IF sy-subrc <> 0.
MESSAGE 'Error during version restore' TYPE 'E'.
ENDIF.
CALL FUNCTION 'GET_SYSTEM_TIMEZONE'
IMPORTING
timezone = lv_tz
EXCEPTIONS
customizing_missing = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CONVERT TIME STAMP lv_timt TIME ZONE lv_tz
INTO DATE DATA(lv_date) TIME DATA(lv_time).
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = |Version Timestamp: { lv_date DATE = ISO } { lv_time TIME = ISO }.Proceed ?|
IMPORTING
answer = lv_answer
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
IF lv_answer = 1.
lobj_hcpr_cp->restore_backup(
iv_hcprnm = pa_hcpn
iv_vers = pa_vers
).
IF pa_act = abap_true.
lobj_hcpr_cp->activate_hcpr( iv_hcprnm = pa_hcpn ).
ENDIF.
MESSAGE 'Version restored succesfully' TYPE 'S'.
ENDIF.
ELSEIF pa_sho = abap_true.
lobj_hcpr_cp->show_mapping( iv_hcprnm = pa_hcpn
iv_vers = pa_vers ).
ENDIF.
****************************************************
INTERFACE lif_abapmerge_marker.
* abapmerge 0.14.7 - 2022-07-16T13:53:19.349Z
ENDINTERFACE.
****************************************************