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.