6

Email Template with Table in Email Body (SAP_Basis release 750 or above and S/4)

 1 year ago
source link: https://blogs.sap.com/2023/05/10/email-template-with-table-in-email-body-sap_basis-release-750-or-above-and-s-4/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
May 10, 2023 5 minute read

Email Template with Table in Email Body (SAP_Basis release 750 or above and S/4)

Introduction: In this article, I’ll demonstrate, how we can draw an HTML table in an E-mail body by using an E-mail template with all the styles we can do in Microsoft Word and a simple way to do this.

In SAP_BASIS 750 and above releases or in S/4 systems, we have an Email template feature available along with a CDS view functionality.

Please visit the blog https://blogs.sap.com/2019/10/12/e-mail-templates-in-s4-hana/  to get the initial overview of the email template.

Step 1: We can create an Email template in the object navigator by navigating to the Email template option shown as per the image below.

Email_template.png
Ztest-template.png

Step 2: Next, simply create Email content (Email Body) in MS Word, along with a table including a header and only one blank row for table data.

snap432.png

Step 3: Now save the document in .htm format as per below.

snap428.png

Step 4: Next open the e-mail template and choose the ‘Load local file’ option.

snap429.png

Step 5: Moving further, identify where the blank table row is in the Body HTML content.

snap430.png

Step 6: Copy cell attributes to have in the code. Remove the blank table row <tr>…..</tr> along with its all cells and maintain a placeholder e.g. IT_FLIGHTS in Email Body.

snap433.png

Step 7: Replace IT_FLIGHTS in the code as per snippet.

DATA(lv_cell_attrib) = ` width=85 valign=top style='width:77.95pt;border-top:none;border-left:`
                         && `none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;`
                         && `mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;`
                         && `mso-border-alt:solid windowtext .5pt;background:white;mso-background-themecolor:`
                         && `background1;padding:0in 5.4pt 0in 5.4pt'>`
                         && `<p class=MsoNormal align=center style='text-align:center'><span`
                         && `style='mso-bidi-font-family:Calibri'><o:p>`.

  LOOP AT lt_sflights ASSIGNING FIELD-SYMBOL(<fs_sflights>).
    lv_content = |{ lv_content }<tr>|.
    lv_content = |{ lv_content }<td{ lv_cell_attrib && <fs_sflights>-carrid }</o:p></span></p></td>|.
    lv_content = |{ lv_content }<td{ lv_cell_attrib && <fs_sflights>-connid }</o:p></span></p></td>|.
    lv_content = |{ lv_content }<td{ lv_cell_attrib && <fs_sflights>-fldate }</o:p></span></p></td>|.
    lv_content = |{ lv_content }<td{ lv_cell_attrib && <fs_sflights>-price }</o:p></span></p></td>|.
    lv_content = |{ lv_content }<td{ lv_cell_attrib && <fs_sflights>-planetype }</o:p></span></p></td>|.
    lv_content = |{ lv_content }<td{ lv_cell_attrib && <fs_sflights>-paymentsum }</o:p></span></p></td>|.
    lv_content = |{ lv_content }</tr>|.
  ENDLOOP.

REPLACE 'IT_FLIGHTS' WITH lv_content INTO lv_body_html.

Step 8: Next trigger an email to see the result. We can clearly see all the details are present in table format in the email body.

snap431.png

Code Snippet: Please refer complete code as below.

PARAMETERS : p_email TYPE ad_smtpadr.   "[email protected]
CONSTANTS:
  lc_priority    TYPE bcs_docimp VALUE '1',
  lc_template_id TYPE smtg_tmpl_id VALUE 'ZTEST'.

DATA: lv_content TYPE string.

SELECT carrid,
        connid,
        fldate,
        price,
        planetype,
        paymentsum
        FROM sflight
        INTO TABLE @DATA(lt_sflights)
        UP TO 10 ROWS.
IF sy-subrc EQ 0.

  DATA(lo_email_api_ref) = cl_smtg_email_api=>get_instance( iv_template_id = lc_template_id ).
  DATA(lo_send_request_ref) = cl_bcs=>create_persistent( ).
  DATA(i_cds_key) = VALUE if_smtg_email_template=>ty_gt_data_key( ).

  " Get the RawHTML Content and Replace the palceholder with the INV Details in the email
  lo_email_api_ref->render( EXPORTING
                              iv_language = sy-langu
                              it_data_key = i_cds_key
                            IMPORTING
                              ev_subject = DATA(lv_subject)
                              ev_body_html = DATA(lv_body_html) ).

  DATA(lv_cell_attrib) = ` width=85 valign=top style='width:77.95pt;border-top:none;border-left:`
                         && `none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;`
                         && `mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;`
                         && `mso-border-alt:solid windowtext .5pt;background:white;mso-background-themecolor:`
                         && `background1;padding:0in 5.4pt 0in 5.4pt'>`
                         && `<p class=MsoNormal align=center style='text-align:center'><span`
                         && `style='mso-bidi-font-family:Calibri'><o:p>`.

  LOOP AT lt_sflights ASSIGNING FIELD-SYMBOL(<fs_sflights>).
    lv_content = |{ lv_content }<tr>|.
    lv_content = |{ lv_content }<td{ lv_cell_attrib && <fs_sflights>-carrid }</o:p></span></p></td>|.
    lv_content = |{ lv_content }<td{ lv_cell_attrib && <fs_sflights>-connid }</o:p></span></p></td>|.
    lv_content = |{ lv_content }<td{ lv_cell_attrib && <fs_sflights>-fldate }</o:p></span></p></td>|.
    lv_content = |{ lv_content }<td{ lv_cell_attrib && <fs_sflights>-price }</o:p></span></p></td>|.
    lv_content = |{ lv_content }<td{ lv_cell_attrib && <fs_sflights>-planetype }</o:p></span></p></td>|.
    lv_content = |{ lv_content }<td{ lv_cell_attrib && <fs_sflights>-paymentsum }</o:p></span></p></td>|.
    lv_content = |{ lv_content }</tr>|.
  ENDLOOP.

  REPLACE 'IT_FLIGHTS' WITH lv_content INTO lv_body_html.

  DATA(lv_body_html_soli) = cl_bcs_convert=>string_to_soli( lv_body_html ).  " Build HTML for Sending
  DATA(lo_multipart_ref) = NEW cl_gbt_multirelated_service( ).

  lo_multipart_ref->set_main_html(
      EXPORTING
        content     = lv_body_html_soli
        description = 'flightDetails' ).

*Create & Set the Email Document
  DATA(lo_doc_bcs_ref) = cl_document_bcs=>create_from_multirelated(
          EXPORTING
            i_subject          = CONV so_obj_des( lv_subject )               "Set the Email Subject
            i_importance       = lc_priority
            i_multirel_service = lo_multipart_ref ).

  lo_send_request_ref->set_document( lo_doc_bcs_ref  ).

*Populate sender name
  DATA(lo_sender_ref) = cl_sapuser_bcs=>create( sy-uname ).
  IF lo_sender_ref IS BOUND.
    lo_send_request_ref->set_sender( i_sender = lo_sender_ref ).
  ENDIF.

  DATA(lo_recipient_ref) = cl_cam_address_bcs=>create_internet_address( p_email ).
  IF lo_recipient_ref IS BOUND.
*Add recipient to send request
    lo_send_request_ref->add_recipient(
      EXPORTING
        i_recipient = lo_recipient_ref
        i_express   = abap_true ).
  ENDIF.

* Send email
  DATA(lv_sent_to_all) = lo_send_request_ref->send( ).

* If e-mail is successful then do commit work
  IF lv_sent_to_all = abap_true.
    COMMIT WORK AND WAIT.
  ENDIF.
ENDIF.

This concludes the functionality.

Thank you for reading the article. I truly hope you liked it. Please feel free to share your thoughts and suggestions.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK