Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CMP00001 component names are meaningless #12

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/z_fm_test_data_param_value.xslt.source.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" version="1.0">

<xsl:strip-space elements="*"/>

<xsl:template match="/asx:abap/asx:values" xmlns:asx="http://www.sap.com/abapxml">
<xsl:copy-of select="ROOT"/>
</xsl:template>

</xsl:transform>
12 changes: 12 additions & 0 deletions src/z_fm_test_data_param_value.xslt.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_XSLT" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<ATTRIBUTES>
<XSLTDESC>Z_FM_TEST_DATA_PARAM_VALUE</XSLTDESC>
<LANGU>E</LANGU>
<DESCRIPT>Serialization/Deserialization of test data</DESCRIPT>
</ATTRIBUTES>
</asx:values>
</asx:abap>
</abapGit>
15 changes: 15 additions & 0 deletions src/z_fm_test_data_param_value2.xslt.source.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" version="1.0">

<xsl:strip-space elements="*"/>

<xsl:template match="/">
<asx:abap xmlns:asx="http://www.sap.com/abapxml">
<asx:values>
<DATA>
<xsl:copy-of select="value/(*|text())"/>
</DATA>
</asx:values>
</asx:abap>
</xsl:template>

</xsl:transform>
12 changes: 12 additions & 0 deletions src/z_fm_test_data_param_value2.xslt.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_XSLT" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<ATTRIBUTES>
<XSLTDESC>Z_FM_TEST_DATA_PARAM_VALUE2</XSLTDESC>
<LANGU>E</LANGU>
<DESCRIPT>Serialization/Deserialization of test data</DESCRIPT>
</ATTRIBUTES>
</asx:values>
</asx:abap>
</abapGit>
2 changes: 1 addition & 1 deletion src/zcl_fm_test_data_apack.clas.abap
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
61 changes: 54 additions & 7 deletions src/zcl_fm_test_data_serialize.clas.abap
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.

Expand All @@ -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
Expand Down Expand Up @@ -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.


Expand Down Expand Up @@ -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 = <parameter_value>.

CATCH cx_root INTO error.
RAISE EXCEPTION TYPE zcx_fm_test_data EXPORTING previous = error.
ENDTRY.
Expand Down Expand Up @@ -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 <parameter_value> TYPE any.

result-name = parameter-name.
result-kind = parameter-kind.

ASSIGN parameter-value->* TO <parameter_value>.
data(ref_parameter_value) = use_value_of_actual_type( parameter ).
ASSIGN ref_parameter_value->* TO <parameter_value>.

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 = <parameter_value>
RESULT XML result-dynamically_defined_value
CALL TRANSFORMATION z_fm_test_data_param_value
SOURCE root = <parameter_value>
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.


Expand All @@ -305,7 +326,9 @@ CLASS zcl_fm_test_data_serialize IMPLEMENTATION.

result-name = parameter-name.

ASSIGN parameter-value->* TO <parameter_value>.
data(ref_parameter_value) = use_value_of_actual_type( parameter ).
ASSIGN ref_parameter_value->* TO <parameter_value>.

DATA(srtti_type) = zcl_srtti_typedescr=>create_by_data_object( <parameter_value> ).
TRY.
" to omit the BOM, get RESULT into type XSTRING, but drawback is that it's UTF-8 to be later converted to string.
Expand All @@ -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 <parameter_value> TYPE any.

ASSIGN parameter-value->* TO <parameter_value>.

TRY.
ASSIGN params_rtts[ name = parameter-name ] TO FIELD-SYMBOL(<param_rtts>).
IF sy-subrc = 0.
CREATE DATA ref_parameter TYPE HANDLE <param_rtts>-type.
ASSIGN ref_parameter->* TO FIELD-SYMBOL(<fm_parameter_value>).
<fm_parameter_value> = <parameter_value>.
ASSIGN <fm_parameter_value> TO <parameter_value>.
result = ref_parameter.
ELSE.
result = parameter-value.
ENDIF.
CATCH cx_root INTO error.
result = parameter-value.
ENDTRY.

ENDMETHOD.

ENDCLASS.