src/zgoog_i_bqtr_gen_repl_objl_im1.prog.abap (308 lines of code) (raw):
**********************************************************************
* Copyright 2024 Google LLC *
* *
* Licensed under the Apache License, Version 2.0 (the "License"); *
* you may not use this file except in compliance with the License. *
* You may obtain a copy of the License at *
* https://www.apache.org/licenses/LICENSE-2.0 *
* Unless required by applicable law or agreed to in writing, *
* software distributed under the License is distributed on an *
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, *
* either express or implied. *
* See the License for the specific language governing permissions *
* and limitations under the License. *
**********************************************************************
CLASS lcl_tool IMPLEMENTATION.
METHOD get_data.
DATA: ls_data TYPE mty_data.
IF p_psel = abap_true.
ls_data-trkey = p_trkey.
ls_data-dsname = p_dsnam.
ls_data-ds = COND #( WHEN p_rcds = 'X' THEN p_cds ELSE p_odp ).
ls_data-iobj = p_iobj.
ls_data-logsy = p_logsy.
ls_data-appl = p_appl.
ls_data-odso = p_adso.
ls_data-chain = p_chain.
ls_data-trig = p_trig.
ls_data-info = p_info.
ls_data-active = p_activ.
IF p_mandt = abap_true.
ls_data-mfnam = p_mfnam.
ENDIF.
APPEND ls_data TO mt_data.
CLEAR: ls_data.
ELSE.
lcl_file_handler=>csv_to_itab( EXPORTING iv_file = p_upath
CHANGING ct_table = mt_data
).
ENDIF.
ENDMETHOD.
METHOD create.
DATA: lt_return TYPE bapiret2_t.
DATA: lv_sy_subrc TYPE sy-subrc.
DATA: ls_tlogo_adso TYPE zgoog_cl_bqtr_gen_bw_object=>t_tlogo.
DATA: lv_odso_name TYPE rsoadsonm.
DATA: ls_tlogo_ds TYPE zgoog_cl_bqtr_gen_bw_object=>t_tlogo.
DATA: lv_ds_name TYPE string.
DATA: ls_tlogo_trnf TYPE zgoog_cl_bqtr_gen_bw_object=>t_tlogo.
DATA: lv_dtp TYPE rsbkdtpnm.
lv_ds_name = iv_ds.
zgoog_cl_bqtr_gen_bw_object=>create_bw_ds(
EXPORTING
iv_ds = lv_ds_name
iv_dsnam = iv_dsname
iv_logsys = iv_logsy
iv_applnm = iv_appl
IMPORTING
es_tlogo = ls_tlogo_ds
ev_sy_subrc = lv_sy_subrc
et_return = lt_return ).
lv_odso_name = iv_odso.
add_status( iv_ds = iv_ds
iv_description = 'BW Data Source'
iv_value = |{ iv_dsname } with ODP Provider { lv_ds_name } |
it_return = lt_return ).
IF ls_tlogo_ds IS NOT INITIAL.
zgoog_cl_bqtr_gen_bw_object=>create_odso(
EXPORTING
iv_iobj = iv_iobj
iv_adsonm = lv_odso_name
iv_odpname = ls_tlogo_ds-odpname
iv_logsys = iv_logsy
IMPORTING
es_tlogo = ls_tlogo_adso
ev_sy_subrc = lv_sy_subrc
et_return = lt_return ).
add_status( iv_ds = iv_ds
iv_description = 'Data Store Object (ODSO)'
iv_value = CONV #( lv_odso_name )
it_return = lt_return ).
IF ls_tlogo_adso IS NOT INITIAL.
zgoog_cl_bqtr_gen_bw_object=>create_trnf_odso(
EXPORTING
iv_mass_tr_key = iv_trkey
iv_data_source = lv_ds_name
iv_tlogo_ds = ls_tlogo_ds
iv_tlogo_adso = ls_tlogo_adso
iv_iobj = iv_iobj
iv_mandt_fval = iv_mfnam
IMPORTING
es_tlogo = ls_tlogo_trnf
ev_sy_subrc = lv_sy_subrc
et_return = lt_return ).
add_status( iv_ds = iv_ds
iv_description = 'Data Transformation (RSDS)'
iv_value = |RSDS { lv_ds_name }/{ iv_logsy } -> ODSO { lv_odso_name }|
it_return = lt_return ).
IF ls_tlogo_trnf IS NOT INITIAL.
zgoog_cl_bqtr_gen_bw_object=>create_dtp_legacy(
EXPORTING
iv_tlogo_ds = ls_tlogo_ds
iv_tlogo_adso = ls_tlogo_adso
iv_tlogo_trnf = ls_tlogo_trnf
IMPORTING
ev_dtpnm = lv_dtp
ev_sy_subrc = lv_sy_subrc
et_return = lt_return ).
add_status( iv_ds = iv_ds
iv_description = 'Data Transfer Process'
iv_value = |{ lv_ds_name }/{ iv_logsy } -> { lv_dtp }|
it_return = lt_return ).
IF lv_dtp IS NOT INITIAL.
zgoog_cl_bqtr_gen_bw_object=>create_trigger(
EXPORTING
iv_trigger = CONV #( iv_trig )
IMPORTING
ev_sy_subrc = lv_sy_subrc
et_return = lt_return
).
add_status( iv_ds = iv_ds
iv_description = 'Process Chain Trigger'
iv_value = |{ iv_trig }|
it_return = lt_return ).
IF lv_sy_subrc = 0.
zgoog_cl_bqtr_gen_bw_object=>create_process_chain(
EXPORTING
iv_chain = iv_chain
iv_infoara = iv_info
iv_active = iv_active
iv_streaming = space
iv_trigger = CONV #( iv_trig )
iv_dtp_load = CONV #( lv_dtp )
iv_adso = CONV #( ls_tlogo_adso-objnm )
IMPORTING
ev_sy_subrc = lv_sy_subrc
et_return = lt_return
).
add_status( iv_ds = iv_ds
iv_description = 'Process Chain'
iv_value = |{ iv_chain }|
it_return = lt_return ).
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD cleanup.
DATA: lt_return TYPE bapiret2_t.
DATA: lv_sy_subrc TYPE sy-subrc.
CONSTANTS: lc_delete TYPE c VALUE 'D'.
IF p_schai = abap_true OR p_sall = abap_true.
zgoog_cl_bqtr_gen_bw_object=>delete_process_chain(
EXPORTING
iv_chain = iv_chain
IMPORTING
ev_sy_subrc = lv_sy_subrc
et_return = lt_return ).
add_status( iv_ds = iv_ds
iv_description = 'Process Chain'
iv_value = |{ iv_chain }|
iv_category = lc_delete
it_return = lt_return ).
ENDIF.
IF p_strig = abap_true OR p_sall = abap_true.
zgoog_cl_bqtr_gen_bw_object=>delete_trigger(
EXPORTING
iv_trigger = iv_trig
IMPORTING
ev_sy_subrc = lv_sy_subrc
et_return = lt_return ).
add_status( iv_ds = iv_ds
iv_description = 'Process Chain Trigger'
iv_value = |{ iv_trig }|
iv_category = lc_delete
it_return = lt_return ).
ENDIF.
IF p_sbwds = abap_true OR p_sall = abap_true.
zgoog_cl_bqtr_gen_bw_object=>delete_bw_ds(
EXPORTING
iv_name = CONV #( iv_dsname )
iv_logsys = iv_logsy
IMPORTING
ev_sy_subrc = lv_sy_subrc
et_return = lt_return ).
add_status( iv_ds = iv_ds
iv_description = 'BW Data Source (including Dependencies)'
iv_value = CONV #( iv_ds )
iv_category = lc_delete
it_return = lt_return ).
ENDIF.
IF p_sadso = abap_true OR p_sall = abap_true.
zgoog_cl_bqtr_gen_bw_object=>delete_odso(
EXPORTING
iv_adsonm = CONV #( iv_odso )
iv_iobj = iv_iobj
IMPORTING
ev_sy_subrc = lv_sy_subrc
et_return = lt_return ).
add_status( iv_ds = iv_ds
iv_description = 'Data Store Object (ODSO)'
iv_value = CONV #( iv_odso )
iv_category = lc_delete
it_return = lt_return ).
ENDIF.
ENDMETHOD.
METHOD add_status.
DATA: ls_output TYPE mty_output,
lv_error TYPE boolean.
ls_output-description = iv_description.
ls_output-value = iv_value.
ls_output-cds = iv_ds.
LOOP AT it_return ASSIGNING FIELD-SYMBOL(<ls_return>) WHERE type IS NOT INITIAL.
IF <ls_return>-type = 'E'.
lv_error = abap_true.
ls_output-status = icon_red_light.
ELSEIF <ls_return>-type = 'S' OR <ls_return>-type = 'I'.
ls_output-status = icon_green_light.
ELSEIF <ls_return>-type = 'W'.
ls_output-status = icon_yellow_light.
ENDIF.
ls_output-type = <ls_return>-type.
IF <ls_return>-type IS NOT INITIAL.
MESSAGE ID <ls_return>-id TYPE <ls_return>-type NUMBER <ls_return>-number
WITH <ls_return>-message_v1
<ls_return>-message_v2
<ls_return>-message_v3
<ls_return>-message_v4
INTO ls_output-error.
APPEND ls_output TO mt_output.
ENDIF.
ENDLOOP.
IF lv_error IS INITIAL.
ls_output-type = 'S'.
ls_output-status = icon_green_light.
IF iv_category = 'C'.
ls_output-error = 'Successfully created!'.
ELSEIF iv_category = 'D'.
ls_output-error = 'Successfully deleted!'.
ENDIF.
APPEND ls_output TO mt_output.
ENDIF.
ENDMETHOD.
METHOD display.
INCLUDE: <icon>.
DATA: lo_alv TYPE REF TO cl_salv_table.
DATA: lo_settings TYPE REF TO cl_salv_tree_settings.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = lo_alv " Basis Class Simple ALV Tables
CHANGING
t_table = mt_output
).
DATA: lo_functions TYPE REF TO cl_salv_functions_list.
lo_functions = lo_alv->get_functions( ).
lo_functions->set_all( abap_true ).
DATA: lo_columns TYPE REF TO cl_salv_columns_table,
lo_column TYPE REF TO cl_salv_column_table.
lo_columns = lo_alv->get_columns( ).
lo_columns->set_optimize( 'X' ).
lo_column ?= lo_columns->get_column( 'DESCRIPTION' ).
lo_column->set_short_text( 'Desc' ).
lo_column->set_long_text( 'Description' ).
lo_column ?= lo_columns->get_column( 'VALUE' ).
lo_column->set_short_text( 'Name' ).
lo_column->set_long_text( 'Artifact Name' ).
lo_column ?= lo_columns->get_column( 'CDS' ).
lo_column->set_short_text( 'Source' ).
lo_column ?= lo_columns->get_column( 'STATUS' ).
lo_column->set_short_text( 'Status' ).
lo_column->set_icon( if_salv_c_bool_sap=>true ).
lo_column->set_alignment( if_salv_c_alignment=>centered ).
lo_column->set_output_length( 20 ).
lo_column ?= lo_columns->get_column( 'ERROR' ).
lo_column->set_short_text( 'Error' ).
lo_column ?= lo_columns->get_column( 'TYPE' ).
lo_column->set_visible( value = if_salv_c_bool_sap=>false ).
lo_alv->display( ).
CATCH cx_salv_msg.
CATCH cx_salv_not_found.
CATCH cx_root INTO DATA(lo_exp).
DATA(lv_msg) = lo_exp->get_text( ).
MESSAGE lv_msg TYPE 'E'.
LEAVE LIST-PROCESSING.
ENDTRY.
ENDMETHOD.
METHOD run.
FIELD-SYMBOLS: <ls_data> TYPE mty_data.
get_data( ).
LOOP AT mt_data ASSIGNING <ls_data>.
IF p_clean = abap_true.
cleanup( iv_trkey = <ls_data>-trkey
iv_dsname = <ls_data>-dsname
iv_ds = <ls_data>-ds
iv_logsy = <ls_data>-logsy
iv_appl = <ls_data>-appl
iv_odso = <ls_data>-odso
iv_iobj = <ls_data>-iobj
iv_chain = <ls_data>-chain
iv_trig = <ls_data>-trig
iv_info = <ls_data>-info
).
ELSE.
create( iv_trkey = <ls_data>-trkey
iv_dsname = <ls_data>-dsname
iv_ds = <ls_data>-ds
iv_logsy = <ls_data>-logsy
iv_appl = <ls_data>-appl
iv_odso = <ls_data>-odso
iv_iobj = <ls_data>-iobj
iv_chain = <ls_data>-chain
iv_trig = <ls_data>-trig
iv_info = <ls_data>-info
iv_mfnam = <ls_data>-mfnam
iv_active = <ls_data>-active
).
ENDIF.
ENDLOOP.
display( ).
ENDMETHOD.
ENDCLASS.