*&---------------------------------------------------------------------* *& Report zbw_trfn_tester *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT zbw_trfn_tester_standalone. CLASS zcl_bw_trfn_tester_ui DEFINITION DEFERRED. CLASS zcl_bw_trfn_tester DEFINITION DEFERRED. CLASS zcx_bw_trfn_tester DEFINITION INHERITING FROM cx_static_check FINAL CREATE PUBLIC . PUBLIC SECTION. PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. CLASS zcx_bw_trfn_tester IMPLEMENTATION. ENDCLASS. CLASS zcl_bw_trfn_tester DEFINITION CREATE PUBLIC . PUBLIC SECTION. "!

"! Create global DDIC Tables if not exists CLASS-METHODS create_global_ddic. "!

"! "! @parameter pa_trfnid |

Transformation ID

"! @raising zcx_bw_trfn_tester |

Invalid TRFN ID

METHODS constructor IMPORTING iv_strfn TYPE sobj_name iv_ttrfn TYPE sobj_name RAISING zcx_bw_trfn_tester. "!

"! Calculate program ID based on TRFN ID "! @parameter rv_progid |

METHODS caluclate_program_id RETURNING VALUE(rv_progid) TYPE string. "!

"! Test new scenario - input->calculation->compare result with provided result data "! @parameter ir_source_user_table |

Source table to compare

"! @parameter ir_result_user_table |

Result table to compare

METHODS test_new_scenario IMPORTING iv_source_ddic_table TYPE string OPTIONAL iv_result_ddic_table TYPE string OPTIONAL ir_source_user_table TYPE REF TO data OPTIONAL ir_result_user_table TYPE REF TO data OPTIONAL. "!

"! Get data from DDIC table name "! @parameter iv_table_name |

DDIC Table name

"! @parameter et_table |

Table data

METHODS get_data_from_table IMPORTING iv_table_name TYPE string EXPORTING et_table TYPE ANY TABLE. "!

"! "! @parameter rr_log |

Log reference

METHODS create_log RETURNING VALUE(rr_log) TYPE REF TO cl_rsbm_log_cursor_step_dtp. "!

"! "! @parameter iv_source_ddic_table |

DDIC source table name

"! @parameter iv_result_ddic_table |

DDIC result table name

"! @parameter er_src_str_trfn |

Source TRFN structure

"! @parameter er_res_str_trfn |

Result TRFN structure

"! @parameter er_src_tab_trfn |

Source TRFN table

"! @parameter er_source_table |

User source table

"! @parameter er_result_table |

User result table to compare

METHODS create_data_references IMPORTING iv_source_ddic_table TYPE string iv_result_ddic_table TYPE string EXPORTING er_src_str_trfn TYPE REF TO data er_res_str_trfn TYPE REF TO data er_src_tab_trfn TYPE REF TO data er_source_table TYPE REF TO data er_result_table TYPE REF TO data. "!

"! "! @parameter ir_trfn_result |

TRFN result data

"! @parameter ir_user_result |

User result data

"! @parameter iv_user_table_name |

User result DDIC table name

METHODS compare_trfn_to_user_table IMPORTING ir_trfn_result TYPE REF TO cl_rsbk_data_segment ir_user_result TYPE REF TO data iv_user_table_name TYPE string. "!

"! Create type based on basic description "! @parameter iv_intype |

"! @parameter iv_leng |

"! @parameter iv_decim |

"! @parameter rv_type |

CLASS-METHODS create_type IMPORTING iv_intype TYPE string iv_leng TYPE ddleng iv_decim TYPE decimals RETURNING VALUE(rv_type) TYPE REF TO cl_abap_datadescr. PROTECTED SECTION. DATA: gv_trfnid TYPE rstranid, gv_dtp TYPE rsbkdtpnm. PRIVATE SECTION. ENDCLASS. CLASS zcl_bw_trfn_tester_ui DEFINITION FINAL CREATE PUBLIC . PUBLIC SECTION. CLASS-METHODS: "!

"! Create user data package "! @parameter iv_stemp |

"! @parameter iv_svnam |

"! @parameter iv_repid |

"! @parameter iv_type |

"! @parameter iv_ttrfn |

"! @parameter iv_strfn |

"! @parameter iv_scttb |

"! @parameter iv_ttttb |

"! @parameter er_data_pkg |

create_data_package IMPORTING iv_stemp TYPE tabname iv_svnam TYPE char20 iv_repid TYPE sy-repid iv_type TYPE char3 iv_ttrfn TYPE sobj_name iv_strfn TYPE sobj_name iv_scttb TYPE abap_bool iv_ttttb TYPE abap_bool RETURNING VALUE(er_data_pkg) TYPE REF TO data. CLASS-METHODS: "!

"! Load saved data from database "! @parameter iv_type |

"! @parameter iv_svnam |

"! @parameter iv_repid |

"! @parameter er_data_pkg |

load_variant IMPORTING iv_type TYPE char3 iv_svnam TYPE char20 iv_repid TYPE sy-repid RETURNING VALUE(er_data_pkg) TYPE REF TO data. CLASS-METHODS: "!

"! Show table with different values "! @parameter ir_user_result |

"! @parameter ir_trfn_result |

show_differences IMPORTING ir_user_result TYPE REF TO data ir_trfn_result TYPE REF TO data. PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. CLASS zcl_bw_trfn_tester_ui IMPLEMENTATION. METHOD create_data_package. TYPES: BEGIN OF ty_type_input, input_name TYPE string, input_length TYPE ddleng, input_dec TYPE decimals, input_inntype TYPE inttype. TYPES: END OF ty_type_input. DATA: lt_type_result TYPE STANDARD TABLE OF ty_type_input, lt_fcat TYPE slis_t_fieldcat_alv, ls_comp TYPE cl_abap_structdescr=>component, lt_comp TYPE cl_abap_structdescr=>component_table, lt_data_fcat_src TYPE slis_t_fieldcat_alv, lr_data_src TYPE REF TO data, lr_src_str_trfn TYPE REF TO data, lr_res_str_trfn TYPE REF TO data, lr_src_tab_trfn TYPE REF TO data. FIELD-SYMBOLS: TYPE STANDARD TABLE. CLEAR: lt_type_result,lt_fcat,ls_comp,lt_comp,lt_data_fcat_src. FREE: lr_data_src. UNASSIGN . IF iv_scttb = abap_true AND iv_type = 'SRC' OR iv_ttttb = abap_true AND iv_type = 'RES'. SELECT SINGLE tranid FROM rstran INTO @DATA(lv_trfn_id) WHERE sourcename = @iv_strfn AND targetname = @iv_ttrfn AND objvers = 'A' AND objstat = 'ACT'. TRY. DATA(lobj_rstran_miantain) = NEW cl_rstran_maintain( i_tranid = lv_trfn_id ). CATCH cx_rstran_not_found. CATCH cx_rstran_input_invalid. CATCH cx_rstran_cancelled. CATCH cx_rstran_not_authorized. CATCH cx_rstran_already_exist. CATCH cx_rstran_display_only. CATCH cx_rstran_error_with_message. ENDTRY. lobj_rstran_miantain->get_progid( IMPORTING e_progid = DATA(lv_progid) ). CONCATENATE '\PROGRAM=GP' lv_progid '\CLASS=LCL_TRANSFORM\TYPE=_TY_S_SC_1' INTO DATA(lv_src_trfn_str_type). CONCATENATE '\PROGRAM=GP' lv_progid '\CLASS=LCL_TRANSFORM\TYPE=_TY_S_TG_1' INTO DATA(lv_res_trfn_str_type). CREATE DATA lr_src_str_trfn TYPE (lv_src_trfn_str_type). CREATE DATA lr_res_str_trfn TYPE (lv_res_trfn_str_type). FIELD-SYMBOLS: TYPE any. ASSIGN lr_src_str_trfn->* TO . DESCRIBE FIELD TYPE DATA(typ1) COMPONENTS DATA(comp1). DATA : lt_tabdescr TYPE abap_compdescr_tab, lr_table_descr TYPE REF TO cl_abap_structdescr. IF iv_type = 'SRC'. lr_table_descr ?= cl_abap_typedescr=>describe_by_data_ref( lr_src_str_trfn ). ELSEIF iv_type = 'RES'. lr_table_descr ?= cl_abap_typedescr=>describe_by_data_ref( lr_res_str_trfn ). ENDIF. lt_tabdescr[] = lr_table_descr->components[]. lt_type_result = CORRESPONDING #( lt_tabdescr MAPPING input_dec = decimals input_inntype = type_kind input_length = length input_name = name ). ELSEIF iv_stemp IS NOT INITIAL. SELECT fieldname, rollname, leng, decimals,inttype FROM dd03l INTO TABLE @DATA(lt_dd03l) WHERE as4local = 'A' AND tabname = @iv_stemp. IF sy-subrc <> 0. MESSAGE 'Error during type select' TYPE 'E'. ENDIF. lt_type_result = CORRESPONDING #( lt_dd03l MAPPING input_name = fieldname input_inntype = inttype input_length = leng input_dec = decimals ). ELSE. DO 10 TIMES. lt_type_result = VALUE #( BASE lt_type_result ( input_name = '' ) ). ENDDO. ENDIF. lt_fcat = VALUE slis_t_fieldcat_alv( ( seltext_m = 'Name' fieldname = 'INPUT_NAME' outputlen = '20' edit = abap_true ) ( seltext_m = 'Type' fieldname = 'INPUT_INNTYPE' outputlen = '5' edit = abap_true ) ( seltext_m = 'Lenght' fieldname = 'INPUT_LENGTH' outputlen = '5' edit = abap_true ) ( seltext_m = 'Decimals' fieldname = 'INPUT_DEC' outputlen = '5' edit = abap_true ) ). CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = iv_repid it_fieldcat = lt_fcat i_screen_start_column = 1 i_screen_start_line = 1 i_screen_end_column = 60 i_screen_end_line = 10 i_callback_user_command = 'USER_COMMAND' TABLES t_outtab = lt_type_result EXCEPTIONS program_error = 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. DELETE lt_type_result WHERE input_name IS INITIAL. CHECK lt_type_result IS NOT INITIAL. LOOP AT lt_type_result REFERENCE INTO DATA(lr_type_input). ls_comp-name = lr_type_input->input_name. ls_comp-type = zcl_bw_trfn_tester=>create_type( iv_intype = CONV #( lr_type_input->input_inntype ) iv_leng = lr_type_input->input_length iv_decim = lr_type_input->input_dec ). APPEND ls_comp TO lt_comp. lt_data_fcat_src = VALUE #( BASE lt_data_fcat_src ( seltext_m = lr_type_input->input_name fieldname = to_upper( lr_type_input->input_name ) edit = abap_true ) ). ENDLOOP. TRY. DATA(lr_type_str) = cl_abap_structdescr=>create( p_components = lt_comp ). CATCH cx_sy_struct_creation. MESSAGE 'Error suring str creation' TYPE 'E'. ENDTRY. TRY. DATA(lr_type_table) = cl_abap_tabledescr=>create( lr_type_str ). CATCH cx_sy_table_creation . ENDTRY. CREATE DATA: lr_data_src TYPE HANDLE lr_type_table. ASSIGN lr_data_src->* TO . IF sy-subrc <> 0. MESSAGE 'Error during type creation' TYPE 'E'. ENDIF. DO 10 TIMES. APPEND INITIAL LINE TO . ENDDO. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = iv_repid it_fieldcat = lt_data_fcat_src i_screen_start_column = 1 i_screen_start_line = 1 i_screen_end_column = 60 i_screen_end_line = 10 i_callback_user_command = 'USER_COMMAND' TABLES t_outtab = EXCEPTIONS program_error = 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. LOOP AT ASSIGNING FIELD-SYMBOL(). DO. ASSIGN COMPONENT sy-index OF STRUCTURE TO FIELD-SYMBOL(). IF sy-subrc <> 0. EXIT. ENDIF. IF IS NOT INITIAL. DATA(lv_not_clear_line) = abap_true. ENDIF. ENDDO. IF lv_not_clear_line = abap_false. DELETE . ENDIF. CLEAR lv_not_clear_line. ENDLOOP. DELETE ADJACENT DUPLICATES FROM COMPARING ALL FIELDS. er_data_pkg = lr_data_src. IF iv_svnam IS NOT INITIAL. DATA: lr_dat_tab TYPE REF TO data, lr_dat_str TYPE REF TO data, lr_typ_tab TYPE REF TO data, lr_typ_str TYPE REF TO data. zcl_bw_trfn_tester=>create_global_ddic( ). CREATE DATA lr_typ_tab TYPE STANDARD TABLE OF ('ZBWTRFN_VAR_TYPE'). CREATE DATA lr_typ_str TYPE ('ZBWTRFN_VAR_TYPE'). CREATE DATA lr_dat_tab TYPE STANDARD TABLE OF ('ZBWTRFN_VAR_DAT'). CREATE DATA lr_dat_str TYPE ('ZBWTRFN_VAR_DAT'). FIELD-SYMBOLS: TYPE STANDARD TABLE, TYPE any, TYPE STANDARD TABLE, TYPE any. ASSIGN lr_typ_tab->* TO . ASSIGN lr_typ_str->* TO . ASSIGN lr_dat_tab->* TO . ASSIGN lr_dat_str->* TO . LOOP AT lt_type_result REFERENCE INTO DATA(lr_type_res_src). ASSIGN COMPONENT 'TEMPLATE_TABLE' OF STRUCTURE TO FIELD-SYMBOL(). = iv_stemp. ASSIGN COMPONENT 'VARIANT' OF STRUCTURE TO FIELD-SYMBOL(). = iv_svnam. ASSIGN COMPONENT 'DATA_TYPE' OF STRUCTURE TO FIELD-SYMBOL(). = iv_type. ASSIGN COMPONENT 'FIELDNM' OF STRUCTURE TO FIELD-SYMBOL(). = lr_type_res_src->input_name. ASSIGN COMPONENT 'LENGTH' OF STRUCTURE TO FIELD-SYMBOL(). = lr_type_res_src->input_length. ASSIGN COMPONENT 'DECIM' OF STRUCTURE TO FIELD-SYMBOL(). = lr_type_res_src->input_dec. ASSIGN COMPONENT 'TYPE' OF STRUCTURE TO FIELD-SYMBOL(). = lr_type_res_src->input_inntype. APPEND TO . ENDLOOP. TRY. INSERT ('ZBWTRFN_VAR_TYPE') FROM TABLE @ . CATCH cx_sy_open_sql_db. MESSAGE 'Error during variant insert' TYPE 'E'. ENDTRY. LOOP AT ASSIGNING FIELD-SYMBOL(). DATA(lv_rnr) = sy-tabix. DO lines( lt_type_result ) TIMES. ASSIGN COMPONENT sy-index OF STRUCTURE TO FIELD-SYMBOL(). IF sy-subrc <> 0. MESSAGE 'Error component assign' TYPE 'E'. ENDIF. READ TABLE lt_type_result INDEX sy-index REFERENCE INTO lr_type_res_src. IF sy-subrc = 0. ASSIGN COMPONENT 'ROWNR' OF STRUCTURE TO FIELD-SYMBOL(). = lv_rnr. ASSIGN COMPONENT 'TEMPLATE_TABLE' OF STRUCTURE TO FIELD-SYMBOL(). = iv_stemp. ASSIGN COMPONENT 'VARIANT' OF STRUCTURE TO FIELD-SYMBOL(). = iv_svnam. ASSIGN COMPONENT 'DATA_TYPE' OF STRUCTURE TO FIELD-SYMBOL(). = iv_type. ASSIGN COMPONENT 'FIELDNM' OF STRUCTURE TO FIELD-SYMBOL(). = lr_type_res_src->input_name. ASSIGN COMPONENT 'VALUE' OF STRUCTURE TO FIELD-SYMBOL(). = . APPEND TO . ENDIF. ENDDO. ENDLOOP. INSERT ('ZBWTRFN_VAR_DAT') FROM TABLE @. IF sy-subrc <> 0. MESSAGE 'Error during assign' TYPE 'E'. ENDIF. ENDIF. ENDMETHOD. METHOD load_variant. TYPES: BEGIN OF ty_type_input, input_type_name TYPE string, input_type TYPE string. TYPES: END OF ty_type_input. DATA: lt_type_result TYPE STANDARD TABLE OF ty_type_input, lt_fcat TYPE slis_t_fieldcat_alv, ls_comp TYPE cl_abap_structdescr=>component, lt_comp TYPE cl_abap_structdescr=>component_table, lt_data_fcat_src TYPE slis_t_fieldcat_alv, lr_data_src TYPE REF TO data, lr_dat_tab TYPE REF TO data, lr_dat_str TYPE REF TO data, lr_typ_tab TYPE REF TO data, lr_typ_str TYPE REF TO data. zcl_bw_trfn_tester=>create_global_ddic( ). CREATE DATA lr_typ_tab TYPE STANDARD TABLE OF ('ZBWTRFN_VAR_TYPE'). CREATE DATA lr_typ_str TYPE ('ZBWTRFN_VAR_TYPE'). CREATE DATA lr_dat_tab TYPE STANDARD TABLE OF ('ZBWTRFN_VAR_DAT'). CREATE DATA lr_dat_str TYPE ('ZBWTRFN_VAR_DAT'). FIELD-SYMBOLS: TYPE STANDARD TABLE, TYPE any, TYPE STANDARD TABLE, TYPE any. ASSIGN lr_typ_tab->* TO . ASSIGN lr_typ_str->* TO . ASSIGN lr_dat_tab->* TO . ASSIGN lr_dat_str->* TO . FIELD-SYMBOLS: TYPE STANDARD TABLE. CLEAR: lt_type_result,lt_fcat,ls_comp,lt_comp,lt_data_fcat_src. FREE: lr_data_src. UNASSIGN . DATA: lr_saved_str TYPE REF TO data. FIELD-SYMBOLS: TYPE any. zcl_bw_trfn_tester=>create_global_ddic( ). SELECT * FROM ('ZBWTRFN_VAR_TYPE') INTO TABLE @ WHERE variant = @iv_svnam AND data_type = @iv_type. IF sy-subrc <> 0. MESSAGE 'Error during select' TYPE 'E'. ENDIF. LOOP AT ASSIGNING . ASSIGN COMPONENT 'FIELDNM' OF STRUCTURE TO FIELD-SYMBOL(). ASSIGN COMPONENT 'TYPE' OF STRUCTURE TO FIELD-SYMBOL(). ASSIGN COMPONENT 'LENGTH' OF STRUCTURE TO FIELD-SYMBOL(). ASSIGN COMPONENT 'DECIM' OF STRUCTURE TO FIELD-SYMBOL(). ls_comp-name = . ls_comp-type = zcl_bw_trfn_tester=>create_type( iv_intype = CONV #( ) iv_leng = iv_decim = ) . APPEND ls_comp TO lt_comp. ENDLOOP. TRY. DATA(lr_type_str) = cl_abap_structdescr=>create( p_components = lt_comp ). CATCH cx_sy_struct_creation. MESSAGE 'Error suring str creation' TYPE 'E'. ENDTRY. TRY. DATA(lr_type_table) = cl_abap_tabledescr=>create( lr_type_str ). CATCH cx_sy_table_creation . ENDTRY. CREATE DATA: lr_data_src TYPE HANDLE lr_type_table. ASSIGN lr_data_src->* TO . IF sy-subrc <> 0. MESSAGE 'Error during assign' TYPE 'E'. ENDIF. CREATE DATA lr_saved_str TYPE HANDLE lr_type_str. ASSIGN lr_saved_str->* TO . IF sy-subrc <> 0. MESSAGE 'Error during assign' TYPE 'E'. ENDIF. SELECT * FROM ('ZBWTRFN_VAR_DAT') INTO TABLE @ WHERE variant = @iv_svnam AND data_type = @iv_type. IF sy-subrc <> 0. MESSAGE 'Error during variant select' TYPE 'E'. ENDIF. DATA(lv_groupby) = 'ROWNR'. LOOP AT ASSIGNING FIELD-SYMBOL() GROUP BY lv_groupby. LOOP AT GROUP ASSIGNING . ASSIGN COMPONENT 'FIELDNM' OF STRUCTURE TO FIELD-SYMBOL(). ASSIGN COMPONENT 'ROWNR' OF STRUCTURE TO FIELD-SYMBOL(). ASSIGN COMPONENT 'VALUE' OF STRUCTURE TO FIELD-SYMBOL(). ASSIGN COMPONENT OF STRUCTURE TO FIELD-SYMBOL(). IF sy-subrc <> 0. MESSAGE 'Error during type select' TYPE 'E'. ENDIF. = . IF = 1. lt_data_fcat_src = VALUE #( BASE lt_data_fcat_src ( seltext_m = fieldname = to_upper( ) edit = abap_true ) ). ENDIF. ENDLOOP. APPEND TO . CLEAR . ENDLOOP. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = iv_repid it_fieldcat = lt_data_fcat_src i_screen_start_column = 1 i_screen_start_line = 1 i_screen_end_column = 60 i_screen_end_line = 10 i_callback_user_command = 'USER_COMMAND' TABLES t_outtab = EXCEPTIONS program_error = 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. er_data_pkg = lr_data_src. ENDMETHOD. METHOD show_differences. FIELD-SYMBOLS: TYPE STANDARD TABLE, TYPE STANDARD TABLE. ASSIGN ir_trfn_result->* TO . ASSIGN ir_user_result->* TO . ENDMETHOD. ENDCLASS. CLASS zcl_bw_trfn_tester IMPLEMENTATION. METHOD constructor. SELECT SINGLE tranid FROM rstran INTO @DATA(lv_trfn_id) WHERE sourcename = @iv_strfn AND targetname = @iv_ttrfn AND objvers = 'A' AND objstat = 'ACT'. IF sy-subrc = 0. gv_trfnid = lv_trfn_id. ELSE. RAISE EXCEPTION TYPE zcx_bw_trfn_tester. ENDIF. SELECT SINGLE dtp FROM rsbkdtp WHERE src = @iv_strfn AND tgt = @iv_ttrfn INTO @DATA(lv_dtp). IF sy-subrc = 0. gv_dtp = lv_dtp. ELSE. RAISE EXCEPTION TYPE zcx_bw_trfn_tester. ENDIF. ENDMETHOD. METHOD caluclate_program_id. TRY. DATA(lobj_rstran_miantain) = NEW cl_rstran_maintain( i_tranid = gv_trfnid ). CATCH cx_rstran_not_found. CATCH cx_rstran_input_invalid. CATCH cx_rstran_cancelled. CATCH cx_rstran_not_authorized. CATCH cx_rstran_already_exist. CATCH cx_rstran_display_only. CATCH cx_rstran_error_with_message. ENDTRY. lobj_rstran_miantain->get_progid( IMPORTING e_progid = DATA(lv_progid) ). rv_progid = |GP{ lv_progid }|. ENDMETHOD. METHOD test_new_scenario. DATA: lobj_trfn_prog TYPE REF TO object. FIELD-SYMBOLS: TYPE STANDARD TABLE, TYPE STANDARD TABLE, TYPE any, TYPE STANDARD TABLE, TYPE any. create_data_references( EXPORTING iv_source_ddic_table = iv_source_ddic_table iv_result_ddic_table = iv_result_ddic_table IMPORTING er_src_str_trfn = DATA(lr_src_str_trfn) er_res_str_trfn = DATA(lr_res_str_trfn) er_src_tab_trfn = DATA(lr_src_tab_trfn) er_source_table = DATA(lr_source_table) er_result_table = DATA(lr_result_table) ). IF iv_source_ddic_table IS NOT INITIAL. ASSIGN lr_source_table->* TO . IF sy-subrc = 0. get_data_from_table( EXPORTING iv_table_name = iv_source_ddic_table IMPORTING et_table = ). ENDIF. ELSE. ASSIGN ir_source_user_table->* TO . IF sy-subrc <> 0. MESSAGE 'Error during assign' TYPE 'E'. ENDIF. ENDIF. IF iv_result_ddic_table IS NOT INITIAL. ASSIGN lr_result_table->* TO . IF sy-subrc = 0. get_data_from_table( EXPORTING iv_table_name = iv_result_ddic_table IMPORTING et_table = ). ENDIF. ELSE. ASSIGN ir_result_user_table->* TO . IF sy-subrc <> 0. MESSAGE 'Error during assign' TYPE 'E'. ENDIF. ENDIF. ASSIGN lr_src_str_trfn->* TO . IF sy-subrc <> 0. MESSAGE 'Error during assign' TYPE 'E'. ENDIF. ASSIGN lr_res_str_trfn->* TO . IF sy-subrc <> 0. MESSAGE 'Error during assign' TYPE 'E'. ENDIF. ASSIGN lr_src_tab_trfn->* TO . IF sy-subrc <> 0. MESSAGE 'Error during assign' TYPE 'E'. ENDIF. = CORRESPONDING #( ). DATA(lro_inbound) = NEW cl_rsbk_data( ). DATA(lro_outbound) = NEW cl_rsbk_data( ). lro_inbound->add_segment_from_reference( EXPORTING i_r_s_data = lr_src_str_trfn RECEIVING r_r_segment = DATA(lro_segment_inbound) ). lro_outbound->add_segment_from_reference( i_r_s_data = lr_res_str_trfn ). lro_segment_inbound->insert_table( i_r_t_data = lr_src_tab_trfn ). DATA(lro_log) = create_log( ). DATA(lv_program_id) = caluclate_program_id( ). CONCATENATE '\PROGRAM=' lv_program_id '\CLASS=LCL_TRANSFORM' INTO DATA(lv_trfn_prog). CREATE OBJECT lobj_trfn_prog TYPE (lv_trfn_prog). CALL METHOD lobj_trfn_prog->('EXECUTE') EXPORTING i_master_data_exist = '' i_r_inbound = lro_inbound i_r_log = lro_log * i_r_request = l_r_request * i_r_trfn_cmd = me IMPORTING e_r_outbound = lro_outbound. TRY. DATA(lro_segment_outbound) = lro_outbound->get_segment( i_segid = 001 ). CATCH cx_rs_not_found. MESSAGE 'Outbound segment do not exist' TYPE 'E'. ENDTRY. compare_trfn_to_user_table( ir_trfn_result = lro_segment_outbound ir_user_result = ir_result_user_table iv_user_table_name = iv_result_ddic_table ). ENDMETHOD. METHOD get_data_from_table. SELECT * ##SUBRC_OK FROM (iv_table_name) INTO TABLE @et_table UP TO 50000 ROWS. ENDMETHOD. METHOD create_log. DATA: lobj_dtp TYPE REF TO cl_rsbk_dtp. DATA(lro_dp_log) = NEW cl_rsbm_log_dtp_dp( i_requid = '' i_datapakid = 1 i_no_db = '' i_runid = 1 ). lobj_dtp = cl_rsbk_dtp=>factory( gv_dtp ). TRY. lobj_dtp->if_rsbk_dtp_maintain~set_simulation( i_simulation = abap_true ). CATCH cx_rs_failed. MESSAGE 'Set DTP to simmulation mode failed' TYPE 'E'. ENDTRY. TRY. DATA(lr_request) = lobj_dtp->create_request( ). CATCH cx_rs_not_found. MESSAGE 'Request not found' TYPE 'E'. CATCH cx_rs_foreign_lock. MESSAGE 'Foregin lock' TYPE 'E'. CATCH cx_rs_failed. MESSAGE 'Create request failed' TYPE 'E'. ENDTRY. TRY. lro_dp_log->create_dp( EXPORTING i_r_request = lr_request i_datapakid = 1 i_runid = 1 i_no_db = abap_true RECEIVING r_ref_dplog = lro_dp_log ). CATCH cx_rs_existing. MESSAGE 'Data package exists' TYPE 'E'. CATCH cx_rs_para_not_exist. MESSAGE 'Parameter do not exist' TYPE 'E'. CATCH cx_rs_foreign_lock. MESSAGE 'Foregin lock' TYPE 'E'. ENDTRY. TRY. cl_rsbm_error_handler=>factory( EXPORTING i_request = lr_request->get_requid( ) i_no_monitor = lr_request->get_no_monitor( ) i_errorhandling = lr_request->get_errorhandling( ) i_number_at_err = lr_request->get_number_at_err( ) i_t_step = lr_request->get_t_stepid( ) RECEIVING r_r_errorhandler = DATA(lr_error_hanlder) ). CATCH cx_rs_access_error. MESSAGE 'Access error during error handler factory' TYPE 'E'. ENDTRY. rr_log = NEW cl_rsbm_log_cursor_step_dtp( i_r_errorlog = lr_error_hanlder i_stepid = '2-' i_r_dp_log = lro_dp_log i_requid = '3' ). ENDMETHOD. METHOD create_data_references. DATA(lv_programid) = caluclate_program_id( ). CONCATENATE '\PROGRAM=' lv_programid '\CLASS=LCL_TRANSFORM\TYPE=_ty_s_SC_1' INTO DATA(lv_src_trfn_str_type). CONCATENATE '\PROGRAM=' lv_programid '\CLASS=LCL_TRANSFORM\TYPE=_TY_S_TG_1' INTO DATA(lv_res_trfn_str_type). CONCATENATE '\PROGRAM=' lv_programid '\CLASS=LCL_TRANSFORM\TYPE=_TY_T_SC_1' INTO DATA(lv_src_trfn_tab_type). CREATE DATA er_src_str_trfn TYPE (lv_src_trfn_str_type). CREATE DATA er_res_str_trfn TYPE (lv_res_trfn_str_type). CREATE DATA er_src_tab_trfn TYPE (lv_src_trfn_tab_type). IF iv_source_ddic_table IS NOT INITIAL. CREATE DATA er_source_table TYPE STANDARD TABLE OF (iv_source_ddic_table). ENDIF. IF iv_result_ddic_table IS NOT INITIAL. CREATE DATA er_result_table TYPE STANDARD TABLE OF (iv_result_ddic_table). ENDIF. ENDMETHOD. METHOD compare_trfn_to_user_table. DATA: lv_where TYPE string, lv_no_changes TYPE flag, lr_trfn_no_tech TYPE REF TO data, lr_user_result TYPE REF TO data, ls_comp TYPE cl_abap_structdescr=>component, lt_comp TYPE cl_abap_structdescr=>component_table. FIELD-SYMBOLS: TYPE STANDARD TABLE, TYPE STANDARD TABLE, TYPE STANDARD TABLE. DATA(lt_component) = ir_trfn_result->get_fieldlist( i_with_recno = rs_c_false ). LOOP AT lt_component REFERENCE INTO DATA(lr_component) WHERE fieldname <> 'SID' AND fieldname <> 'DATAPAKID' AND fieldname <> 'RECORD' AND fieldname <> 'REQTSN'. ls_comp-name = lr_component->fieldname. ls_comp-type = create_type( iv_intype = CONV #( lr_component->inttype ) iv_leng = lr_component->leng iv_decim = lr_component->decimals ). APPEND ls_comp TO lt_comp. ENDLOOP. TRY. DATA(lr_type_str) = cl_abap_structdescr=>create( p_components = lt_comp ). CATCH cx_sy_struct_creation. MESSAGE 'Error suring str creation' TYPE 'E'. ENDTRY. TRY. DATA(lr_type_table) = cl_abap_tabledescr=>create( lr_type_str ). CATCH cx_sy_table_creation . ENDTRY. CREATE DATA: lr_trfn_no_tech TYPE HANDLE lr_type_table. ASSIGN lr_trfn_no_tech->* TO . IF sy-subrc <> 0. MESSAGE 'Error during assign' TYPE 'E'. ENDIF. DATA(lr_trfn_result) = ir_trfn_result->get_data( ). ASSIGN lr_trfn_result->* TO . IF sy-subrc <> 0. MESSAGE 'Error during assign' TYPE 'E'. ENDIF. MOVE-CORRESPONDING TO . IF iv_user_table_name IS NOT INITIAL. SELECT fieldname, keyflag FROM dd03l INTO TABLE @DATA(lt_dd03l) WHERE tabname = @iv_user_table_name. IF sy-subrc <> 0. MESSAGE 'No fields found for result table' TYPE 'E'. ENDIF. CREATE DATA lr_user_result TYPE STANDARD TABLE OF (iv_user_table_name). ASSIGN lr_user_result->* TO . IF sy-subrc <> 0. MESSAGE 'Error during assign' TYPE 'E'. ENDIF. LOOP AT lt_dd03l REFERENCE INTO DATA(lr_dd03l) WHERE keyflag = abap_true. IF lv_where IS INITIAL. lv_where = |{ lr_dd03l->fieldname } = @-{ lr_dd03l->fieldname } |. ELSE. lv_where = |{ lv_where } and { lr_dd03l->fieldname } = @-{ lr_dd03l->fieldname }|. ENDIF. ENDLOOP. TRY. SELECT * FROM (iv_user_table_name) FOR ALL ENTRIES IN @ WHERE (lv_where) INTO TABLE @. IF sy-subrc <> 0. MESSAGE 'Error during select' TYPE 'E'. ENDIF. CATCH cx_sy_dynamic_osql_semantics. MESSAGE ' Error during result table check' TYPE 'E'. ENDTRY. ELSE. ASSIGN ir_user_result->* TO . IF sy-subrc <> 0. MESSAGE 'Error during assign' TYPE 'E'. ENDIF. ENDIF. SORT . SORT . cl_demo_output=>display( data = name = 'Result' ). CALL FUNCTION 'CTVB_COMPARE_TABLES_3' EXPORTING it_table_old = it_table_new = iv_key_count = lines( lt_dd03l ) * iv_key_table = IMPORTING * et_table_del = * et_table_add = * et_table_mod = ev_no_changes = lv_no_changes. IF lv_no_changes = abap_true. MESSAGE 'Result is compatible with table data' TYPE 'S'. ELSE. MESSAGE 'Tables are different' TYPE 'I' DISPLAY LIKE 'W'. ENDIF. ENDMETHOD. METHOD create_type. DATA(lv_plength) = ( CONV int4( iv_leng ) + 1 ) / 2. rv_type = COND #( WHEN iv_intype = 'STRING' THEN cl_abap_elemdescr=>get_string( ) WHEN iv_intype = 'XSTRING' THEN cl_abap_elemdescr=>get_xstring( ) WHEN iv_intype = 'I' THEN cl_abap_elemdescr=>get_i( ) WHEN iv_intype = 'F' THEN cl_abap_elemdescr=>get_f( ) WHEN iv_intype = 'D' THEN cl_abap_elemdescr=>get_d( ) WHEN iv_intype = 'T' THEN cl_abap_elemdescr=>get_t( ) WHEN iv_intype = 'C' THEN cl_abap_elemdescr=>get_c( p_length = CONV #( iv_leng ) ) WHEN iv_intype = 'N' THEN cl_abap_elemdescr=>get_n( p_length = CONV #( iv_leng ) ) WHEN iv_intype = 'X' THEN cl_abap_elemdescr=>get_x( p_length = CONV #( iv_leng ) ) WHEN iv_intype = 'P' THEN cl_abap_elemdescr=>get_p( p_length = CONV #( lv_plength ) p_decimals = CONV #( iv_decim ) ) ). ENDMETHOD. 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 = 'ZBWTRFN_VAR_DAT' fieldname = 'CLNT' position ='0001' keyflag = abap_true datatype = 'CHAR' leng = '000003' ) ( tablename = 'ZBWTRFN_VAR_DAT' fieldname = 'VARIANT' position ='0002' keyflag = abap_true datatype = 'CHAR' leng = '000030' ) ( tablename = 'ZBWTRFN_VAR_DAT' fieldname = 'TEMPLATE_TABLE' position ='0003' keyflag = abap_true datatype = 'CHAR' leng = '000030' ) ( tablename = 'ZBWTRFN_VAR_DAT' fieldname = 'DATA_TYPE' position ='0004' keyflag = abap_true datatype = 'CHAR' leng = '000010' ) ( tablename = 'ZBWTRFN_VAR_DAT' fieldname = 'FIELDNM' position ='0005' keyflag = abap_true datatype = 'CHAR' leng = '000030' ) ( tablename = 'ZBWTRFN_VAR_DAT' fieldname = 'ROWNR' position ='0006' keyflag = abap_true datatype = 'INT4' leng = '10' ) ( tablename = 'ZBWTRFN_VAR_DAT' fieldname = 'VALUE' position ='0007' keyflag = abap_false datatype = 'CHAR' leng = '255' ) ( tablename = 'ZBWTRFN_VAR_TYPE' fieldname = 'CLNT' position ='0001' keyflag = abap_true datatype = 'CHAR' leng = '000003' ) ( tablename = 'ZBWTRFN_VAR_TYPE' fieldname = 'VARIANT' position ='0002' keyflag = abap_true datatype = 'CHAR' leng = '000030' ) ( tablename = 'ZBWTRFN_VAR_TYPE' fieldname = 'TEMPLATE_TABLE' position ='0003' keyflag = abap_true datatype = 'CHAR' leng = '000030' ) ( tablename = 'ZBWTRFN_VAR_TYPE' fieldname = 'DATA_TYPE' position ='0004' keyflag = abap_true datatype = 'CHAR' leng = '000010' ) ( tablename = 'ZBWTRFN_VAR_TYPE' fieldname = 'LENGTH' position ='0005' keyflag = abap_true datatype = 'NUMC' leng = '000006' ) ( tablename = 'ZBWTRFN_VAR_TYPE' fieldname = 'DECIM' position ='0006' keyflag = abap_true datatype = 'NUMC' leng = '000006' ) ( tablename = 'ZBWTRFN_VAR_TYPE' fieldname = 'FIELDNM' position ='0007' keyflag = abap_true datatype = 'CHAR' leng = '000030' ) ( tablename = 'ZBWTRFN_VAR_TYPE' fieldname = 'TYPE' position ='0008' keyflag = abap_true datatype = 'CHAR' leng = '000001' ) ). LOOP AT lt_tables REFERENCE INTO DATA(lr_tables) GROUP BY lr_tables->tablename REFERENCE INTO DATA(lr_table_gropup). LOOP AT GROUP lr_table_gropup REFERENCE INTO DATA(lr_table). CLEAR lv_exist. IF sy-index = 0. ls_dd09l-tabname = lr_table->tablename. ls_dd09l-as4local = 'A'. ls_dd09l-tabkat = '1'. ls_dd09l-tabart = 'APPL1'. ls_dd09l-bufallow = 'N'. ls_dd02v-tabname = lr_table->tablename. ls_dd02v-ddlanguage = 'E'. ls_dd02v-tabclass = 'TRANSP'. ls_dd02v-ddtext = 'Generated by ZBW TRFN Tester'. ls_dd02v-contflag = 'L'. ls_dd02v-exclass = '1'. ENDIF. SELECT SINGLE @abap_true ##SUBRC_OK FROM dd02l INTO @lv_exist WHERE tabname = @lr_table->tablename AND as4local = 'A'. CHECK lv_exist = abap_false. lv_objname = lr_table->tablename. APPEND INITIAL LINE TO lt_dd03p ASSIGNING . -tabname = lr_table->tablename. -fieldname = lr_table->fieldname. -position = lr_table->position. -keyflag = lr_table->keyflag. -datatype = lr_table->datatype. -leng = lr_table->leng. ENDLOOP. 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. ENDLOOP. ENDMETHOD. ENDCLASS. TABLES sscrfields. TYPES: BEGIN OF ty_type_input, input_type_name TYPE string, input_type TYPE string. TYPES: END OF ty_type_input. DATA: lr_data_src TYPE REF TO data, lr_data_res TYPE REF TO data. PARAMETERS: pa_strfn TYPE rstran-sourcename OBLIGATORY, pa_ttrfn TYPE rstran-targetname OBLIGATORY. SELECTION-SCREEN SKIP. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. PARAMETERS: pa_new RADIOBUTTON GROUP rgr1 USER-COMMAND uc1 DEFAULT 'X', pa_ovn RADIOBUTTON GROUP rgr1, pa_pte RADIOBUTTON GROUP rgr1. SELECTION-SCREEN END OF BLOCK b1. SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002 . PARAMETERS: pa_scttb RADIOBUTTON GROUP rgr2 MODIF ID g1 USER-COMMAND uc2 DEFAULT 'X', pa_stabl RADIOBUTTON GROUP rgr2 MODIF ID g1, pa_sownd RADIOBUTTON GROUP rgr2 MODIF ID g1, pa_lsdat RADIOBUTTON GROUP rgr2 MODIF ID g1. PARAMETERS: pa_stabn TYPE dd02l-tabname MODIF ID g12. PARAMETERS: pa_stemp TYPE dd02l-tabname MODIF ID g20. PARAMETERS: pa_svnam TYPE char20 MODIF ID g17. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON (25) TEXT-003 USER-COMMAND create_input MODIF ID g13. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON (29) TEXT-007 USER-COMMAND load_input MODIF ID g16. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK b2. SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-004 . PARAMETERS: pa_rcttb RADIOBUTTON GROUP rgr3 MODIF ID g3 USER-COMMAND uc3 DEFAULT 'X', pa_rtabl RADIOBUTTON GROUP rgr3 MODIF ID g3, pa_rownd RADIOBUTTON GROUP rgr3 MODIF ID g3, pa_lrdat RADIOBUTTON GROUP rgr3 MODIF ID g3. PARAMETERS: pa_rtabn TYPE dd02l-tabname MODIF ID g14. PARAMETERS: pa_rtemp TYPE dd02l-tabname MODIF ID g21. PARAMETERS: pa_rvnam TYPE char20 MODIF ID g19. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON (25) TEXT-005 USER-COMMAND create_result MODIF ID g15. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON (29) TEXT-008 USER-COMMAND load_result MODIF ID g18. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK b3. SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE TEXT-006 . PARAMETERS: pa_ctrfn TYPE string MODIF ID g2. SELECTION-SCREEN END OF BLOCK b4. AT SELECTION-SCREEN. CASE sscrfields-ucomm. WHEN 'CREATE_INPUT'. lr_data_src = zcl_bw_trfn_tester_ui=>create_data_package( iv_stemp = pa_stemp iv_svnam = pa_svnam iv_ttrfn = pa_ttrfn iv_strfn = pa_strfn iv_repid = sy-repid iv_scttb = pa_scttb iv_ttttb = pa_rcttb iv_type = 'SRC' ). WHEN 'CREATE_RESULT'. lr_data_res = zcl_bw_trfn_tester_ui=>create_data_package( iv_stemp = pa_rtemp iv_svnam = pa_rvnam iv_ttrfn = pa_ttrfn iv_strfn = pa_strfn iv_repid = sy-repid iv_scttb = pa_scttb iv_ttttb = pa_rcttb iv_type = 'RES' ). WHEN 'LOAD_INPUT'. lr_data_src = zcl_bw_trfn_tester_ui=>load_variant( iv_type = 'SRC' iv_svnam = pa_svnam iv_repid = sy-repid ). WHEN 'LOAD_RESULT'. lr_data_res = zcl_bw_trfn_tester_ui=>load_variant( iv_type = 'RES' iv_svnam = pa_rvnam iv_repid = sy-repid ). ENDCASE. FORM user_command USING ucomm LIKE sy-ucomm selfield TYPE slis_selfield. DATA: lo_grid TYPE REF TO cl_gui_alv_grid. IF lo_grid IS INITIAL. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = lo_grid. ENDIF. IF lo_grid IS NOT INITIAL. lo_grid->check_changed_data( ). ENDIF. ENDFORM. AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. IF screen-name = 'PA_OVN' OR screen-name = 'PA_PTE'. screen-input = '0'. MODIFY SCREEN. ENDIF. IF pa_new = abap_true. IF screen-group1 = 'G1'. screen-active = '1'. ELSEIF screen-group1 = 'G2'. screen-active = '0'. ENDIF. MODIFY SCREEN. ENDIF. IF pa_ovn = abap_true. IF screen-group1 = 'G2'. screen-active = '1'. ELSEIF screen-group1 = 'G1' OR screen-group1 = 'G12' OR screen-group1 = 'G13' OR screen-group1 = 'G3' OR screen-group1 = 'G14' OR screen-group1 = 'G15' OR screen-group1 = 'G20' OR screen-group1 = 'G21'. screen-active = '0'. ENDIF. MODIFY SCREEN. ENDIF. IF pa_pte = abap_true. IF screen-group1 = 'G4'. screen-active = '1'. ELSEIF screen-group1 = 'G1' OR screen-group1 = 'G12' OR screen-group1 = 'G13' OR screen-group1 = 'G3' OR screen-group1 = 'G14' OR screen-group1 = 'G15'. screen-active = '0'. ENDIF. MODIFY SCREEN. ENDIF. IF pa_scttb = abap_true. IF screen-group1 = 'G13'. screen-active = '1'. ELSEIF screen-group1 = 'G16' OR screen-group1 = 'G12' OR screen-group1 = 'G20'. screen-active = '0'. ENDIF. MODIFY SCREEN. ENDIF. IF pa_stabl = abap_true. IF screen-group1 = 'G12'. screen-active = '1'. ELSEIF screen-group1 = 'G13' OR screen-group1 = 'G16' OR screen-group1 = 'G17' OR screen-group1 = 'G20'. screen-active = '0'. ENDIF. MODIFY SCREEN. ENDIF. IF pa_sownd = abap_true. IF screen-group1 = 'G13'. screen-active = '1'. ELSEIF screen-group1 = 'G12' OR screen-group1 = 'G16'. screen-active = '0'. ENDIF. MODIFY SCREEN. ENDIF. IF pa_rtabl = abap_true. IF screen-group1 = 'G14'. screen-active = '1'. ELSEIF screen-group1 = 'G15' OR screen-group1 = 'G18' OR screen-group1 = 'G19' OR screen-group1 = 'G21'. screen-active = '0'. ENDIF. MODIFY SCREEN. ENDIF. IF pa_rownd = abap_true. IF screen-group1 = 'G15'. screen-active = '1'. ELSEIF screen-group1 = 'G14' OR screen-group1 = 'G18'. screen-active = '0'. ENDIF. MODIFY SCREEN. ENDIF. IF pa_rcttb = abap_true. IF screen-group1 = 'G15'. screen-active = '1'. ELSEIF screen-group1 = 'G14' OR screen-group1 = 'G18' OR screen-group1 = 'G21'. screen-active = '0'. ENDIF. MODIFY SCREEN. ENDIF. IF pa_lsdat = abap_true. IF screen-group1 = 'G16'. screen-active = '1'. ELSEIF screen-group1 = 'G13' OR screen-group1 = 'G12' OR screen-group1 = 'G20' OR screen-group1 = 'G21'. screen-active = '0'. ENDIF. MODIFY SCREEN. ENDIF. IF pa_lrdat = abap_true. IF screen-group1 = 'G18'. screen-active = '1'. ELSEIF screen-group1 = 'G14' OR screen-group1 = 'G15' OR screen-group1 = 'G21'. screen-active = '0'. ENDIF. MODIFY SCREEN. ENDIF. ENDLOOP. END-OF-SELECTION. TRY. DATA(lobj_trfn_tester) = NEW zcl_bw_trfn_tester( iv_strfn = pa_strfn iv_ttrfn = pa_ttrfn ). CATCH zcx_bw_trfn_tester. MESSAGE 'Tranformation do not exist or not active' TYPE 'I' DISPLAY LIKE 'E'. EXIT. ENDTRY. IF pa_new = abap_true. IF lr_data_src IS NOT BOUND OR lr_data_res IS NOT BOUND. MESSAGE 'Please choose both - source and target data' TYPE 'I' DISPLAY LIKE 'E'. EXIT. ENDIF. lobj_trfn_tester->test_new_scenario( iv_source_ddic_table = CONV #( pa_stabn ) iv_result_ddic_table = CONV #( pa_rtabn ) ir_source_user_table = lr_data_src ir_result_user_table = lr_data_res ). ENDIF. CHECK pa_ctrfn IS INITIAL. **************************************************** INTERFACE lif_abapmerge_marker. * abapmerge 0.14.7 - 2022-07-04T15:46:43.164Z ENDINTERFACE. ****************************************************