Menu

How to Attach Executable SAP Transaction Links to E-Mails

DevWorkbench    Tuesday August 12th, 2014   

Example program to send executable e-mail attachments

REPORT ztestemailexec.
 
DATA lt_objcont TYPE STANDARD TABLE OF solisti1.
DATA lt_objcont_bin TYPE STANDARD TABLE OF solisti1.
DATA ls_objcont TYPE solisti1.
DATA lt_receivers TYPE STANDARD TABLE OF somlreci1.
DATA ls_receivers TYPE somlreci1.
DATA ls_document_data LIKE sodocchgi1.
 
DATA lv_body_length TYPE i.
DATA lv_attc_length TYPE i.
 
DATA lt_packing_list TYPE STANDARD TABLE OF sopcklsti1.
DATA ls_packing_list TYPE sopcklsti1.
 
* These are required to build the attachment
DATA lt_shortcut TYPE soli_tab.
DATA lv_param TYPE text255.
 
* Fill the document header
ls_document_data-obj_name 'Test'.
ls_document_data-obj_descr 'E-mail with executable Link'.
 
* Fill the mail content
ls_objcont-line 'E-mail with executable attachment'.
APPEND ls_objcont TO lt_objcont.
 
* Email body is done - create the packing list entry
* E-mail body starts at first line
ls_packing_list-body_start 1.
DESCRIBE TABLE lt_objcont LINES lv_body_length.
ls_packing_list-body_num lv_body_length. * The doc type for the e-mail body now is defined here
ls_packing_list-doc_type 'RAW'.
* The remaining fields stay empty for the first line
APPEND ls_packing_list TO lt_packing_list.
 
* Now we build the executable SAP Shortcut
CALL FUNCTION 'SWN_CREATE_SHORTCUT'
  EXPORTING
    i_transaction           '*IE03'
    i_parameter             'RM63E-EQUNR=ABCDE123'
  IMPORTING
    shortcut_table          lt_shortcut
  EXCEPTIONS
    inconsistent_parameters 1
    OTHERS                  2.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
 
APPEND LINES OF lt_shortcut TO lt_objcont.
 
* Create the packing list entry for the attachment
CLEAR ls_packing_list.
ls_packing_list-head_start 1.
ls_packing_list-head_num 1.
* The attachment starts where the e-mail body stopped
ls_packing_list-body_start + lv_body_length.
DESCRIBE TABLE lt_objcont LINES lv_attc_length.
* Substract the length of the email body from total
lv_attc_length lv_attc_length lv_body_length.
ls_packing_list-body_num lv_attc_length.
* Fill the rest of the fields for the attachment
ls_packing_list-doc_type 'SAP'.
ls_packing_list-obj_name 'Transaction.SAP'.
ls_packing_list-obj_descr 'Transaction.SAP'.
ls_packing_list-doc_size 255 * lv_attc_length.
APPEND ls_packing_list TO lt_packing_list.
 
* Fill the receiver list
ls_receivers-receiver 'someguy@example.xyz'.
ls_receivers-rec_type 'U'.
APPEND ls_receivers TO lt_receivers.
 
* Create the e-mail with the attachment and send it
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
  EXPORTING
    document_data              ls_document_data
    commit_work                'X'
  TABLES
    packing_list               lt_packing_list
    contents_txt               lt_objcont
    receivers                  lt_receivers
  EXCEPTIONS
    too_many_receivers         1
    document_not_sent          2
    document_type_not_exist    3
    operation_no_authorization 4
    parameter_error            5
    x_error                    6
    enqueue_error              7
    OTHERS                     8.
Isy-subrc <> 0.
  WRITE 'Email could not be sent.'.
  WRITE sy-subrc.
ELSE.
  WRITE 'Email was sent!'.
ENDIF.