From b7b867c3ac83bb08c374b1d87b0f560bba21e027 Mon Sep 17 00:00:00 2001 From: NicoleG <95621896+D047539@users.noreply.github.com> Date: Tue, 18 Jan 2022 10:38:08 +0100 Subject: [PATCH] AIFC additional interface validation checks (#5267) --- src/objects/zcl_abapgit_object_aifc.clas.abap | 79 ++++++++++++++++++- 1 file changed, 76 insertions(+), 3 deletions(-) diff --git a/src/objects/zcl_abapgit_object_aifc.clas.abap b/src/objects/zcl_abapgit_object_aifc.clas.abap index 95535459b..d898ff59e 100644 --- a/src/objects/zcl_abapgit_object_aifc.clas.abap +++ b/src/objects/zcl_abapgit_object_aifc.clas.abap @@ -87,6 +87,13 @@ CLASS zcl_abapgit_object_aifc DEFINITION VALUE(rv_success) TYPE abap_bool RAISING zcx_abapgit_exception. + METHODS execute_checks + IMPORTING + !io_xml TYPE REF TO zif_abapgit_xml_input + RETURNING + VALUE(rv_success) TYPE abap_bool + RAISING + zcx_abapgit_exception. PRIVATE SECTION. TYPES: @@ -279,6 +286,10 @@ CLASS ZCL_ABAPGIT_OBJECT_AIFC IMPLEMENTATION. ENDIF. TRY. + IF execute_checks( io_xml ) = abap_false. + zcx_abapgit_exception=>raise( 'AIF interface checks failed' ). + ENDIF. + io_xml->read( EXPORTING iv_name = `Content_table` CHANGING @@ -302,7 +313,7 @@ CLASS ZCL_ABAPGIT_OBJECT_AIFC IMPLEMENTATION. CREATE DATA lr_table TYPE HANDLE lr_tabledescr. ASSIGN lr_table->* TO . IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( iv_text = 'Fieldsymbol not assigned' ). + zcx_abapgit_exception=>raise( 'Fieldsymbol not assigned' ). ENDIF. io_xml->read( EXPORTING @@ -346,11 +357,11 @@ CLASS ZCL_ABAPGIT_OBJECT_AIFC IMPLEMENTATION. iv_package = iv_package ). - IF authorization_check( io_log = ii_log ) = abap_false. + IF authorization_check( ii_log ) = abap_false. RETURN. ENDIF. - IF validate_interface( is_ifkeys = ls_ifkey ) = abap_false. + IF validate_interface( ls_ifkey ) = abap_false. RETURN. ENDIF. @@ -520,4 +531,66 @@ CLASS ZCL_ABAPGIT_OBJECT_AIFC IMPLEMENTATION. MOVE-CORRESPONDING ls_data_to_clear TO . ENDLOOP. ENDMETHOD. + + + METHOD execute_checks. + DATA ls_ifkeys TYPE ty_aif_key_s. + + DATA lr_tabledescr TYPE REF TO cl_abap_tabledescr. + DATA lr_structdescr TYPE REF TO cl_abap_structdescr. + DATA lr_table TYPE REF TO data. + FIELD-SYMBOLS TYPE STANDARD TABLE. + FIELD-SYMBOLS TYPE any. + FIELD-SYMBOLS: TYPE any. + + DATA: lx_dyn_call_error TYPE REF TO cx_sy_dyn_call_error. + DATA: lx_root TYPE REF TO cx_root. + + lr_structdescr ?= cl_abap_typedescr=>describe_by_name( p_name = '/AIF/T_FINF' ). + lr_tabledescr = cl_abap_tabledescr=>create( p_line_type = lr_structdescr ). + + CREATE DATA lr_table TYPE HANDLE lr_tabledescr. + ASSIGN lr_table->* TO . + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( 'Fieldsymbol not assigned' ). + ENDIF. + + TRY. + io_xml->read( EXPORTING + iv_name = '/AIF/T_FINF' + CHANGING + cg_data = ). + + READ TABLE ASSIGNING INDEX 1. + IF sy-subrc = 0. + ASSIGN COMPONENT 'NS' OF STRUCTURE TO . + IF sy-subrc = 0. + ls_ifkeys-ns = . + ENDIF. + + ASSIGN COMPONENT 'IFNAME' OF STRUCTURE TO . + IF sy-subrc = 0. + ls_ifkeys-ifname = . + ENDIF. + + ASSIGN COMPONENT 'IFVERSION' OF STRUCTURE TO . + IF sy-subrc = 0. + ls_ifkeys-ifver = . + ENDIF. + + CALL METHOD mo_abapgit_util->('/AIF/IF_ABAPGIT_AIFC_UTIL~EXECUTE_CHECKS') + EXPORTING + is_ifkeys = ls_ifkeys + is_finf = + RECEIVING + rv_success = rv_success. + ENDIF. + + CATCH cx_sy_dyn_call_error INTO lx_dyn_call_error. + zcx_abapgit_exception=>raise( iv_text = 'AIFC not supported' + ix_previous = lx_dyn_call_error ). + CATCH cx_root INTO lx_root. + zcx_abapgit_exception=>raise_with_text( lx_root ). + ENDTRY. + ENDMETHOD. ENDCLASS.