<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>convert structure to internal table &#8211; SAP EWM Help</title>
	<atom:link href="https://www.sapewmhelp.com/question-tag/convert-structure-to-internal-table/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.sapewmhelp.com</link>
	<description>SAP EWM questions answered by experts — ABAP, S/4HANA, warehouse management</description>
	<lastBuildDate>Sat, 30 Aug 2025 16:04:13 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>
	<item>
		<title>Convert Structure data to e-mail body in SAP ABAP</title>
		<link>https://www.sapewmhelp.com/question/convert-structure-data-to-e-mail-body-in-sap-abap/</link>
					<comments>https://www.sapewmhelp.com/question/convert-structure-data-to-e-mail-body-in-sap-abap/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sat, 30 Aug 2025 16:03:19 +0000</pubDate>
				<guid isPermaLink="false">https://www.sapewmhelp.com/?post_type=question&#038;p=7676</guid>

					<description><![CDATA[Convert any structure to Internal table format, Field text and values Conver Body to HTML template Send Email with HTML body]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Convert any structure to Internal table format, Field text and values</p>



<div class="hcb_wrap">
<pre class="prism line-numbers lang-plain"><code>  data: stru_descr   type ref to cl_abap_structdescr.
  data: dummy.
  data: data_structure type abap_abstypename.
  data: lt_components type abap_compdescr_tab.
  data: ls_email_data type zemail_data.
  data: ls_fieldvalue(60000) type c.   " Nvbug 1909188
  field-symbols: &lt;value&gt; type any,
                 &lt;component&gt; type abap_compdescr.

  stru_descr ?= cl_abap_typedescr=&gt;describe_by_data( i_str_data ).
  data_structure = stru_descr-&gt;absolute_name.
  split data_structure at '=' into dummy data_structure.
  append lines of stru_descr-&gt;components to lt_components.
  loop at lt_components   assigning &lt;component&gt; WHERE type_kind ne 'h' .

    assign component &lt;component&gt;-name of structure i_str_data to &lt;value&gt;.
    ls_email_data-fieldname = &lt;component&gt;-name.
    write &lt;value&gt; to  ls_fieldvalue.
    condense ls_fieldvalue.
    ls_email_data-structure = data_structure .
    ls_email_data-fieldvalue = ls_fieldvalue.
    append ls_email_data to et_mail_data.

  endloop.
</code></pre>
</div>



<p class="wp-block-paragraph">Conver Body to HTML template</p>



<div class="hcb_wrap">
<pre class="prism line-numbers lang-plain"><code>SELECT SINGLE * FROM zemail_temp
    INTO ls_zemail_temp
    WHERE templ = i_templ
      AND langu = i_langu.
  IF sy-subrc &lt;&gt; 0.
    SELECT SINGLE * FROM zemail_temp
      INTO ls_zemail_temp
      WHERE templ = i_templ
        AND langu = ' ' .
    CHECK sy-subrc EQ 0.
  ENDIF.


  xdocument = ls_zemail_temp-temp_data.
  encoding = ls_zemail_temp-encoding.

  TRY.
      btf           = cl_btf=&gt;get_reference( ).
      btf_document  = btf-&gt;create_document( sy-langu ).
      btf_document-&gt;set_content( text = xdocument  encoding = encoding ).
      lv_crm_doc    = zcl_email_btf_document=&gt;get_reference( ).
      lv_crm_doc-&gt;set_document( btf_document ).
      lv_crm_doc-&gt;collect_fields_tidy( IMPORTING  ev_error  = lv_error_string    er_field_adm = lo_admin ).
      lo_admin      = lv_crm_doc-&gt;collect_fields(  ).
      lt_fields     = lo_admin-&gt;get_all_fields( ).
      lv_crm_doc-&gt;collect_links_tidy(  IMPORTING er_link_adm = lv_link_adm   ev_error    = lv_error_string ).
      lt_links      = lv_link_adm-&gt;get_all_links(  cl_btf_link=&gt;co_element_a ).
      lt_img      = lv_link_adm-&gt;get_all_links(  cl_btf_link=&gt;co_element_img ).
      IF NOT lt_img IS INITIAL.
        APPEND LINES OF lt_img TO lt_links.
      ENDIF.
    CATCH cx_btf_runtime_error INTO l_exception.
    CATCH cx_btf_parameter_error INTO lp_exception.

  ENDTRY.


  LOOP AT lt_fields INTO ls_field.
    CLEAR: lv_name.
    lv_name =  ls_field-field-&gt;get_name( ).
    LOOP AT mail_data INTO ls_mail_data WHERE  structure = ls_zemail_temp-structure AND
                                               fieldname = lv_name.

      ls_field-field-&gt;set_value(  ls_mail_data-fieldvalue  ).

      TRY.
          ls_field-field-&gt;set_replace( t_yes ).
          lv_replace_flag = 'X'.

        CATCH cx_btf_parameter_error .
      ENDTRY.
    ENDLOOP.
  ENDLOOP.
  IF lv_replace_flag = 'X'.
    TRY.
        lv_crm_doc-&gt;replace_fields_tidy(  EXPORTING     ir_field_adm = lo_admin
                                          IMPORTING     ev_error     = lv_error_string ).
      CATCH cx_btf_runtime_error.
      CATCH cx_btf_parameter_error.
    ENDTRY.
  ENDIF.


  LOOP AT lt_links INTO ls_link.
    lv_name =  ls_link-link-&gt;get_link_in( ).
    IF lv_name(6) = 'about:'.
      LOOP AT mail_data INTO ls_mail_data WHERE    structure = ls_zemail_temp-structure AND
                                                  fieldname = lv_name+6.
        CHECK ls_mail_data-aboutlink IS NOT INITIAL.
        ls_link-link-&gt;set_link_out( ls_mail_data-aboutlink ).
        ls_link-link-&gt;set_link_changemode( cl_btf_link=&gt;co_changemode_replace ).
        lv_link_flag = 'X'.


      ENDLOOP.
    ELSEIF lv_name(5) = 'data:'.
      READ TABLE mail_data INTO ls_mail_data WITH KEY structure = ls_zemail_temp-structure
                                                  fieldname = lv_name+5.
      IF sy-subrc = 0.
        DATA(lv_img) = |data:image/bmp;base64,{ ls_mail_data-fieldvalue }|.
        ls_link-link-&gt;set_link_out( lv_img ).
        ls_link-link-&gt;set_link_changemode( cl_btf_link=&gt;co_changemode_replace ).
        lv_link_flag = 'X'.
      ENDIF.
    ELSE.
      ls_link-link-&gt;set_link_out( lv_string ).
    ENDIF.


  ENDLOOP.

  IF lv_link_flag = 'X'.

    TRY.
        lv_crm_doc-&gt;replace_links_tidy( EXPORTING   ir_link_adm = lv_link_adm
                                        IMPORTING   ev_error    = lv_error_string ).
      CATCH cx_btf_runtime_error .
    ENDTRY.
  ENDIF.




  btf_document-&gt;get_content( IMPORTING    text     = xdocument     encoding = encoding ).

  xdocument_length = xstrlen( xdocument ).

  CALL FUNCTION 'CRM_IC_XML_XSTRING2STRING'
    EXPORTING
      inxstring = xdocument
    IMPORTING
      outstring = cdocument.


  REPLACE ALL OCCURRENCES OF '&lt;br&gt;' IN cdocument WITH '&lt;br&gt;'.</code></pre>
</div>



<p class="wp-block-paragraph">Send Email with HTML body</p>



<div class="hcb_wrap">
<pre class="prism line-numbers lang-plain"><code>  DATA  :   btf                         TYPE REF TO if_btf.
  DATA  :   btf_document                TYPE REF TO if_btf_document.
  DATA  :   lv_crm_doc                  TYPE REF TO zcl_email_btf_document.
  DATA  :   l_exception                 TYPE REF TO cx_btf_runtime_error.
  DATA  :   ls_zemail_temp              TYPE zemail_temp.
  DATA  :   xdocument                   TYPE xstring.
  DATA  :   encoding                    TYPE string.
  DATA  :   lp_exception                TYPE REF TO cx_btf_parameter_error.
  DATA  :   lo_admin                    TYPE REF TO zcl_email_btf_field_adm.
  DATA  :   lv_error_string             TYPE string.
  DATA  :   lt_fields                   TYPE zcrmt_im_btf_field_table.
  DATA  :   ls_field                    TYPE zcrmt_im_btf_field.
  DATA  :   lv_name                     TYPE string.
  DATA  :   lv_replace_flag             TYPE flag.
  DATA  :   lv_link_flag                TYPE flag.
  DATA  :   lv_link_adm                 TYPE REF TO zcl_email_btf_link_adm.
  DATA  :   lt_links                    TYPE zcrmt_im_btf_link_table.
  DATA  :   lt_img                      TYPE zcrmt_im_btf_link_table.
  DATA  :   ls_link                     TYPE zcrmt_im_btf_link.
  DATA  :   codepage                    TYPE cpcodepage.
  DATA  :   cdocument                   TYPE string.
  DATA  :   cdocument_row(1000)         TYPE c.
  DATA  :   cdocument_table             LIKE TABLE OF cdocument_row.
  DATA  :   cdocument_length            TYPE i.
  DATA  :   cdocument_offset            TYPE i.
  DATA  :   xdocument_length            TYPE i.
  DATA  :   ls_recepients               TYPE zmail_recepients.
  DATA  :   ls_mail_data                TYPE zemail_data.
  DATA  :   ls_attachments              TYPE zemail_attachment.
  DATA  :   l_attachment_type           TYPE so_obj_tp.
  DATA  :   l_attachment_typ1           TYPE text255.
  DATA  :   l_attach_type_len           TYPE i.
  DATA  :   l_attachment_subject        TYPE so_obj_des.
  DATA  :   l_attachment_size           TYPE so_obj_len.
  DATA  :   l_att_content_hex           TYPE solix_tab.
  DATA  :   lv_length                   TYPE i.
  DATA  :   l_dummy                     TYPE c.
  DATA  :   lt_email_address            TYPE bcsy_smtpa.
  DATA  :   lv_type                     TYPE so_obj_tp VALUE 'HTM'.
  DATA  :   lt_mail_text                TYPE bcsy_text.
  DATA  :   lt_header                   TYPE bcsy_text.
  DATA  :   l_send_request              TYPE REF TO cl_bcs.
  DATA  :   l_document                  TYPE REF TO cl_document_bcs.
  DATA  :   l_sender                    TYPE REF TO if_sender_bcs.
  DATA  :   l_recipient                 TYPE REF TO if_recipient_bcs.
  DATA  :   l_exception_info            TYPE REF TO if_os_exception_info.
  DATA  :   l_bcs_exception             TYPE REF TO cx_bcs.
  DATA  :   lv_num_rows                 TYPE i.
  DATA  :   lv_text_length              TYPE so_obj_len.
  DATA  :   lv_sender_address           TYPE ad_smtpadr.
  DATA  :   l_uname                     TYPE sy-uname.
  DATA  :   lv_reciever_address         TYPE ad_smtpadr.
  DATA  :   lv_subject                  TYPE so_obj_des.
  DATA : lv_text_line        TYPE soli,
         l_attachment_header TYPE  soli_tab.

  SELECT SINGLE * FROM  zemail_temp INTO ls_zemail_temp WHERE templ    = i_templ AND langu = i_langu.
  IF sy-subrc &lt;&gt; 0.
    SELECT  SINGLE * FROM  zemail_temp INTO ls_zemail_temp WHERE templ    = i_templ AND langu = ' ' .
  ENDIF.


  CHECK sy-subrc EQ 0.

  xdocument = ls_zemail_temp-temp_data.
  encoding = ls_zemail_temp-encoding.

  TRY.
      btf           = cl_btf=&gt;get_reference( ).
      btf_document  = btf-&gt;create_document( sy-langu ).
      btf_document-&gt;set_content( text = xdocument  encoding = encoding ).
      lv_crm_doc    = zcl_email_btf_document=&gt;get_reference( ).
      lv_crm_doc-&gt;set_document( btf_document ).
      lv_crm_doc-&gt;collect_fields_tidy( IMPORTING  ev_error  = lv_error_string    er_field_adm = lo_admin ).
      lo_admin      = lv_crm_doc-&gt;collect_fields(  ).
      lt_fields     = lo_admin-&gt;get_all_fields( ).
      lv_crm_doc-&gt;collect_links_tidy(  IMPORTING er_link_adm = lv_link_adm   ev_error    = lv_error_string ).
      lt_links      = lv_link_adm-&gt;get_all_links(  cl_btf_link=&gt;co_element_a ).
      lt_img      = lv_link_adm-&gt;get_all_links(  cl_btf_link=&gt;co_element_img ).
      IF NOT lt_img IS INITIAL.
        APPEND LINES OF lt_img TO lt_links.
      ENDIF.
    CATCH cx_btf_runtime_error INTO l_exception.
    CATCH cx_btf_parameter_error INTO lp_exception.

  ENDTRY.


  LOOP AT lt_fields INTO ls_field.
    CLEAR: lv_name.
    lv_name =  ls_field-field-&gt;get_name( ).
    LOOP AT mail_data INTO ls_mail_data WHERE  structure = ls_zemail_temp-structure AND
                                               fieldname = lv_name.

      ls_field-field-&gt;set_value(  ls_mail_data-fieldvalue  ).

      TRY.
          ls_field-field-&gt;set_replace( t_yes ).
          lv_replace_flag = 'X'.

        CATCH cx_btf_parameter_error .
      ENDTRY.
    ENDLOOP.
  ENDLOOP.
  IF lv_replace_flag = 'X'.
    TRY.
        lv_crm_doc-&gt;replace_fields_tidy(  EXPORTING     ir_field_adm = lo_admin
                                          IMPORTING     ev_error     = lv_error_string ).
      CATCH cx_btf_runtime_error.
      CATCH cx_btf_parameter_error.
    ENDTRY.
  ENDIF.


  LOOP AT lt_links INTO ls_link.
    lv_name =  ls_link-link-&gt;get_link_in( ).
    CHECK lv_name(6) = 'about:'.
    LOOP AT mail_data INTO ls_mail_data WHERE    structure = ls_zemail_temp-structure AND
                                                fieldname = lv_name+6.
      CHECK ls_mail_data-aboutlink IS NOT INITIAL.
      ls_link-link-&gt;set_link_out( ls_mail_data-aboutlink ).
      ls_link-link-&gt;set_link_changemode( cl_btf_link=&gt;co_changemode_replace ).
      lv_link_flag = 'X'.
    ENDLOOP.


  ENDLOOP.

  IF lv_link_flag = 'X'.

    TRY.
        lv_crm_doc-&gt;replace_links_tidy( EXPORTING   ir_link_adm = lv_link_adm
                                        IMPORTING   ev_error    = lv_error_string ).
      CATCH cx_btf_runtime_error .
    ENDTRY.
  ENDIF.




  btf_document-&gt;get_content( IMPORTING    text     = xdocument     encoding = encoding ).

  xdocument_length = xstrlen( xdocument ).

  CALL FUNCTION 'CRM_IC_XML_XSTRING2STRING'
    EXPORTING
      inxstring = xdocument
    IMPORTING
      outstring = cdocument.

  REPLACE ALL OCCURRENCES OF '&lt;' IN cdocument WITH '&lt;'.
  REPLACE ALL OCCURRENCES OF '&gt;' IN cdocument WITH '&gt;'.

  CALL FUNCTION 'SCMS_STRING_TO_FTEXT'
    EXPORTING
      text      = cdocument
    TABLES
      ftext_tab = lt_mail_text.



  TRY.
*     Create persistent send request
      l_send_request = cl_bcs=&gt;create_persistent( ).

*     Create document
      DESCRIBE TABLE lt_mail_text LINES lv_num_rows.
      lv_num_rows = lv_num_rows * 255.
      MOVE lv_num_rows TO lv_text_length.
      lv_subject =  mail_subject.
      l_document = cl_document_bcs=&gt;create_document(
                          i_type        = lv_type
                          i_text        = lt_mail_text
                          i_length      = lv_text_length
                          i_subject     = lv_subject
                          i_importance  = '1' ).            "#EC *



*    Add attachment for the mail
      LOOP AT mail_attachments INTO ls_attachments.
        CLEAR : l_attachment_type,
                l_attachment_subject,
                l_attachment_size,
                l_att_content_hex,
                l_attachment_header,
                lv_length.

        SPLIT ls_attachments-file_name AT '.' INTO l_dummy l_attachment_typ1.
        l_attachment_type = l_attachment_typ1.

        l_attach_type_len = strlen( l_attachment_typ1 ).
        IF l_attach_type_len GT 3.
          CONCATENATE '&lt;(&gt;&amp;&lt; )&gt;SO_FILENAME='  ls_attachments-file_name INTO lv_text_line.
          APPEND lv_text_line TO l_attachment_header.
        ENDIF.

        TRANSLATE l_attachment_type TO UPPER CASE.
        l_attachment_subject = ls_attachments-file_name.
        CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
          EXPORTING
            buffer        = ls_attachments-filedata
          IMPORTING
            output_length = lv_length
          TABLES
            binary_tab    = l_att_content_hex.
        l_attachment_size = lv_length.
        TRY.
            CALL METHOD l_document-&gt;add_attachment
              EXPORTING
                i_attachment_type    = l_attachment_type
                i_attachment_subject = l_attachment_subject
                i_attachment_size    = l_attachment_size
                i_att_content_hex    = l_att_content_hex.
          CATCH cx_document_bcs .
        ENDTRY.
      ENDLOOP.



*     Add document to send request
      CALL METHOD l_send_request-&gt;set_document( l_document ).


*     Get sender object
      IF i_sender IS INITIAL.
        lv_sender_address = sy-uname.
      ELSEIF NOT i_sender-uname IS INITIAL.
        lv_sender_address = i_sender-uname.
      ELSEIF NOT i_sender-email IS INITIAL.
        lv_sender_address = i_sender-email.
      ENDIF.

      IF lv_sender_address CA '@'.
        TRANSLATE lv_sender_address TO UPPER CASE.
        l_sender = cl_cam_address_bcs=&gt;create_internet_address( lv_sender_address ).
      ELSE.
        l_uname = lv_sender_address .
        l_sender = cl_sapuser_bcs=&gt;create( l_uname ).
      ENDIF.

*     Add sender
      CALL METHOD l_send_request-&gt;set_sender
        EXPORTING
          i_sender = l_sender.

*     Create recipient
      LOOP AT to_mail_recipients INTO ls_recepients .

        IF ls_recepients-email  IS NOT INITIAL.
          TRANSLATE ls_recepients-email TO UPPER CASE.
          lv_reciever_address = ls_recepients-email.
          l_recipient = cl_cam_address_bcs=&gt;create_internet_address( lv_reciever_address ).
        ELSE.
          l_uname = ls_recepients-uname.
          l_recipient = cl_sapuser_bcs=&gt;create( l_uname ).
        ENDIF.


*       Add recipient with its respective attributes to send request
        CALL METHOD l_send_request-&gt;add_recipient
          EXPORTING
            i_recipient  = l_recipient
            i_express    = ' '
            i_copy       = ' '
            i_blind_copy = ' '.

      ENDLOOP.

      LOOP AT cc_mail_recipients INTO ls_recepients .

        IF ls_recepients-email  IS NOT INITIAL.
          TRANSLATE ls_recepients-email TO UPPER CASE.
          lv_reciever_address = ls_recepients-email.
          l_recipient = cl_cam_address_bcs=&gt;create_internet_address( lv_reciever_address ).
        ELSE.
          l_uname = ls_recepients-uname.
          l_recipient = cl_sapuser_bcs=&gt;create( l_uname ).
        ENDIF.


*       Add recipient with its respective attributes to send request
        CALL METHOD l_send_request-&gt;add_recipient
          EXPORTING
            i_recipient  = l_recipient
            i_express    = ' '
            i_copy       = 'X'
            i_blind_copy = ' '.

      ENDLOOP.

      LOOP AT bcc_mail_recipients INTO ls_recepients .

        IF ls_recepients-email  IS NOT INITIAL.
          TRANSLATE ls_recepients-email TO UPPER CASE.
          lv_reciever_address = ls_recepients-email.
          l_recipient = cl_cam_address_bcs=&gt;create_internet_address( lv_reciever_address ).
        ELSE.
          l_uname = ls_recepients-uname.
          l_recipient = cl_sapuser_bcs=&gt;create( l_uname ).
        ENDIF.


*       Add recipient with its respective attributes to send request
        CALL METHOD l_send_request-&gt;add_recipient
          EXPORTING
            i_recipient  = l_recipient
            i_express    = ' '
            i_copy       = ' '
            i_blind_copy = 'X'.

      ENDLOOP.

      l_send_request-&gt;set_message_subject( mail_subject ).

*     Send document
      CALL METHOD l_send_request-&gt;send( ).

      IF i_send = 'X'.

        COMMIT WORK .
      ENDIF.

    CATCH cx_bcs INTO l_bcs_exception.
      EXIT.
  ENDTRY.</code></pre>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.sapewmhelp.com/question/convert-structure-data-to-e-mail-body-in-sap-abap/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
