Skip to content

Instantly share code, notes, and snippets.

@larshp
Last active July 26, 2017 11:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save larshp/205f3be705167451113ae06f97f52c14 to your computer and use it in GitHub Desktop.
Save larshp/205f3be705167451113ae06f97f52c14 to your computer and use it in GitHub Desktop.
Suppress initial fields in CALL TRANSFORMATION
REPORT zdynamic.
START-OF-SELECTION.
PERFORM easy.
FORM difficult.
DATA: ls_usr02 TYPE usr02,
lv_xml TYPE string,
lv_index TYPE i,
lo_stru TYPE REF TO cl_abap_structdescr,
lt_components TYPE cl_abap_structdescr=>component_table,
lr_dynamic TYPE REF TO data.
FIELD-SYMBOLS: <lv_any> TYPE any,
<ls_target> TYPE any,
<ls_component> LIKE LINE OF lt_components.
ls_usr02-bname = 'FOOBAR'.
* build lt_components containing fields that are not initial
lo_stru ?= cl_abap_structdescr=>describe_by_data( ls_usr02 ).
lt_components = lo_stru->get_components( ).
LOOP AT lt_components ASSIGNING <ls_component>.
lv_index = sy-tabix.
ASSIGN COMPONENT <ls_component>-name OF STRUCTURE ls_usr02 TO <lv_any>.
ASSERT sy-subrc = 0.
IF <lv_any> IS INITIAL.
DELETE lt_components INDEX lv_index.
ENDIF.
ENDLOOP.
lo_stru ?= cl_abap_structdescr=>create( lt_components ).
CREATE DATA lr_dynamic TYPE HANDLE lo_stru.
ASSIGN lr_dynamic->* TO <ls_target>.
MOVE-CORRESPONDING ls_usr02 TO <ls_target>.
CALL TRANSFORMATION id
SOURCE data = <ls_target>
RESULT XML lv_xml.
ENDFORM.
FORM easy.
DATA: ls_usr02 TYPE usr02,
lv_xml TYPE string.
ls_usr02-bname = 'FOOBAR'.
CALL TRANSFORMATION id
OPTIONS initial_components = 'suppress'
SOURCE data = ls_usr02
RESULT XML lv_xml.
BREAK-POINT.
ENDFORM.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment