diff --git a/src/z_fm_test_data_param_value.xslt.source.xml b/src/z_fm_test_data_param_value.xslt.source.xml new file mode 100644 index 0000000..84c02af --- /dev/null +++ b/src/z_fm_test_data_param_value.xslt.source.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/z_fm_test_data_param_value.xslt.xml b/src/z_fm_test_data_param_value.xslt.xml new file mode 100644 index 0000000..12c67fe --- /dev/null +++ b/src/z_fm_test_data_param_value.xslt.xml @@ -0,0 +1,12 @@ + + + + + + Z_FM_TEST_DATA_PARAM_VALUE + E + Serialization/Deserialization of test data + + + + diff --git a/src/z_fm_test_data_param_value2.xslt.source.xml b/src/z_fm_test_data_param_value2.xslt.source.xml new file mode 100644 index 0000000..ce2b539 --- /dev/null +++ b/src/z_fm_test_data_param_value2.xslt.source.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/z_fm_test_data_param_value2.xslt.xml b/src/z_fm_test_data_param_value2.xslt.xml new file mode 100644 index 0000000..56f71ba --- /dev/null +++ b/src/z_fm_test_data_param_value2.xslt.xml @@ -0,0 +1,12 @@ + + + + + + Z_FM_TEST_DATA_PARAM_VALUE2 + E + Serialization/Deserialization of test data + + + + diff --git a/src/zcl_fm_test_data_apack.clas.abap b/src/zcl_fm_test_data_apack.clas.abap index 20ecda9..090a55a 100644 --- a/src/zcl_fm_test_data_apack.clas.abap +++ b/src/zcl_fm_test_data_apack.clas.abap @@ -33,7 +33,7 @@ CLASS ZCL_FM_TEST_DATA_APACK IMPLEMENTATION. target_package = '' ) ( group_id = 'github.com/sandraros' artifact_id = 'FM-params-RTTS' - version = '0.2' + version = '1.0' git_url = 'https://github.com/sandraros/FM-params-RTTS.git' target_package = '' ) ( group_id = 'github.com/sandraros' diff --git a/src/zcl_fm_test_data_serialize.clas.abap b/src/zcl_fm_test_data_serialize.clas.abap index abc5603..8ae4327 100644 --- a/src/zcl_fm_test_data_serialize.clas.abap +++ b/src/zcl_fm_test_data_serialize.clas.abap @@ -78,6 +78,7 @@ CLASS zcl_fm_test_data_serialize DEFINITION PROTECTED SECTION. PRIVATE SECTION. + CLASS-DATA: params_rtts TYPE zcl_fm_params_rtts=>ty_params_rtts. CLASS-METHODS get_parameter IMPORTING @@ -109,6 +110,11 @@ CLASS zcl_fm_test_data_serialize DEFINITION VALUE(result) TYPE abap_func_parmbind RAISING zcx_fm_test_data. + CLASS-METHODS use_value_of_actual_type + IMPORTING + parameter TYPE abap_func_parmbind + RETURNING + value(result) TYPE REF TO data. ENDCLASS. @@ -119,6 +125,12 @@ CLASS zcl_fm_test_data_serialize IMPLEMENTATION. METHOD serialize. + TRY. + params_rtts = zcl_fm_params_rtts=>get( funcname = test_data->fm_name ). + CATCH zcx_fm_params_rtts. + RAISE EXCEPTION TYPE zcx_fm_test_data EXPORTING text = |Interface error for "{ test_data->fm_name }"|. + ENDTRY. + DATA(serializable_test_data) = VALUE ty_test_data( header = VALUE #( fm_name = test_data->fm_name @@ -157,6 +169,8 @@ CLASS zcl_fm_test_data_serialize IMPLEMENTATION. serializable_test_data-error = error->get_text( ). ENDTRY. + test_data_xml = replace( val = test_data_xml sub = ` asx:root="ROOT" xmlns:asx="http://www.sap.com/abapxml"` with = `` occ = 0 ). + ENDMETHOD. @@ -238,9 +252,10 @@ CLASS zcl_fm_test_data_serialize IMPLEMENTATION. " store the value TRY. - CALL TRANSFORMATION id + CALL TRANSFORMATION z_fm_test_data_param_value2 SOURCE XML parameter-dynamically_defined_value RESULT data = . + CATCH cx_root INTO error. RAISE EXCEPTION TYPE zcx_fm_test_data EXPORTING previous = error. ENDTRY. @@ -279,23 +294,29 @@ CLASS zcl_fm_test_data_serialize IMPLEMENTATION. METHOD get_parameter. + DATA: ref_parameter TYPE REF TO data, + error TYPE REF TO cx_root. FIELD-SYMBOLS TYPE any. result-name = parameter-name. result-kind = parameter-kind. - ASSIGN parameter-value->* TO . + data(ref_parameter_value) = use_value_of_actual_type( parameter ). + ASSIGN ref_parameter_value->* TO . + TRY. " to omit the BOM, get RESULT into type XSTRING, but drawback is that it's UTF-8 to be later converted to string. - CALL TRANSFORMATION id - SOURCE data = - RESULT XML result-dynamically_defined_value + CALL TRANSFORMATION z_fm_test_data_param_value + SOURCE root = + RESULT XML data(XSTRING) OPTIONS initial_components = 'suppress' "data_refs = 'heap-or-create' xml_header = 'no'. - CATCH cx_root INTO DATA(error). + CATCH cx_root INTO error. RAISE EXCEPTION TYPE zcx_fm_test_data EXPORTING previous = error. ENDTRY. + result-dynamically_defined_value = xstring. + ENDMETHOD. @@ -305,7 +326,9 @@ CLASS zcl_fm_test_data_serialize IMPLEMENTATION. result-name = parameter-name. - ASSIGN parameter-value->* TO . + data(ref_parameter_value) = use_value_of_actual_type( parameter ). + ASSIGN ref_parameter_value->* TO . + DATA(srtti_type) = zcl_srtti_typedescr=>create_by_data_object( ). TRY. " to omit the BOM, get RESULT into type XSTRING, but drawback is that it's UTF-8 to be later converted to string. @@ -321,4 +344,28 @@ CLASS zcl_fm_test_data_serialize IMPLEMENTATION. ENDMETHOD. + METHOD use_value_of_actual_type. + DATA: ref_parameter TYPE REF TO data, + error TYPE REF TO cx_root. + FIELD-SYMBOLS TYPE any. + + ASSIGN parameter-value->* TO . + + TRY. + ASSIGN params_rtts[ name = parameter-name ] TO FIELD-SYMBOL(). + IF sy-subrc = 0. + CREATE DATA ref_parameter TYPE HANDLE -type. + ASSIGN ref_parameter->* TO FIELD-SYMBOL(). + = . + ASSIGN TO . + result = ref_parameter. + ELSE. + result = parameter-value. + ENDIF. + CATCH cx_root INTO error. + result = parameter-value. + ENDTRY. + + ENDMETHOD. + ENDCLASS.