Menu

Change the SAP Sender Email Address in ERP

DevWorkbench    Friday April 24th, 2015   

This is the complete coding of a copy of the function module SO_NEW_DOCUMENT_SEND_API1. It will enable you to manually set the sender email address of mails sent from SAP ERP.

If you take this over, make sure to add the correct interface parameters and also make sure to change some of the perform routines to work as external performs (applicable lines of code are marked in red).

FUNCTION z_so_new_document_send_api1.
*"-------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(DOCUMENT_DATA) LIKE SODOCCHGI1 STRUCTURE SODOCCHGI1
*" VALUE(DOCUMENT_TYPE) LIKE SOODK-OBJTP DEFAULT 'RAW'
*" VALUE(PUT_IN_OUTBOX) LIKE SONV-FLAG DEFAULT SPACE
*" VALUE(ORIGINATOR) LIKE SOOS1-RECEXTNAM DEFAULT SPACE
*" VALUE(ORIGINATOR_TYPE) LIKE SOOS1-RECESC DEFAULT 'J'
*" EXPORTING
*" VALUE(SENT_TO_ALL) LIKE SONV-FLAG
*" VALUE(NEW_OBJECT_ID) LIKE SOFOLENTI1-OBJECT_ID
*" TABLES
*" OBJECT_HEADER STRUCTURE SOLISTI1 OPTIONAL
*" OBJECT_CONTENT STRUCTURE SOLISTI1 OPTIONAL
*" CONTENTS_HEX STRUCTURE SOLIX OPTIONAL
*" OBJECT_PARA STRUCTURE SOPARAI1 OPTIONAL
*" OBJECT_PARB STRUCTURE SOPARBI1 OPTIONAL
*" RECEIVERS STRUCTURE SOMLRECI1
*" EXCEPTIONS
*" TOO_MANY_RECEIVERS
*" DOCUMENT_NOT_SENT
*" DOCUMENT_TYPE_NOT_EXIST
*" OPERATION_NO_AUTHORIZATION
*" PARAMETER_ERROR
*" X_ERROR
*" ENQUEUE_ERROR
*"--------------------------------------------------
* This is a copy of SO_NEW_DOCUMENT_SEND_API1 with the parameters
* ORIGINATOR and ORIGINATOR_TYPE of FM SO_OBJECT_SEND exposed.
* It is thus possible to set the sender address of an email manually.
*"---------------------------------------------------
* This include is needed for the constants it contains.
INCLUDE rssocons.
* ---------------------------------------------------

DATA BEGIN OF object_id.
INCLUDE STRUCTURE soodk.
DATA END OF object_id.
DATA BEGIN OF object_hd_change.
INCLUDE STRUCTURE sood1.
DATA END OF object_hd_change.
DATA BEGIN OF object_fl_change.
INCLUDE STRUCTURE sofm1.
DATA END OF object_fl_change.
DATA BEGIN OF rec_table OCCURS 1.
INCLUDE STRUCTURE soos1.
DATA END OF rec_table.
DATA rcode LIKE sonv-rcode.
DATA i LIKE sy-tabix.
DATA: hex_size LIKE sy-tabix.

DESCRIBE TABLE contents_hex LINES hex_size.
IF hex_size GT 0.
  REFRESH object_content.
  MOVE contents_hex[] TO object_content[].
ENDIF.
* set default type
IF document_type = space.
  MOVE raw TO document_type.
ENDIF.
* check whether this document type is allowed at all
CALL FUNCTION 'SO_TSOPE_CHECK'
  EXPORTING
    file_ext = document_type
    query = crea
  IMPORTING
    rcode = rcode
  EXCEPTIONS
    x_error = 1000.
  IF sy-subrc = x_error.
    RAISE x_error.
  ENDIF.
  IF rcode NE ok.
    RAISE document_type_not_exist.
  ENDIF.
* transfer folder data
PERFORM transfer_objdat_to_obj(saplsoi1) USING
  document_data
  object_hd_change
  object_fl_change.
* check whther document_type is ok. If not it's a PC-bject.
IF document_type = 'INT'.
  MOVE document_type TO object_hd_change-file_ext.
  MOVE raw TO document_type.
ENDIF.
PERFORM check_object_type(sapfsso3) USING 
  document_type
  rcode.
IF rcode NE ok.
* it's an Pc application object
  MOVE document_type TO object_hd_change-file_ext.
  MOVE 'EXT' TO document_type.
ENDIF.
* transfer receiver data
PERFORM transfer_rec_to_tab(saplsoi1) TABLES 
  receivers
  rec_table.
* for old types move size to header
PERFORM size_to_header(saplsoi1) TABLES 
  object_header
USING 
  document_type
  document_data-doc_size.
CALL FUNCTION 'SO_OBJECT_SEND'
  EXPORTING
    object_fl_change = object_fl_change
    object_hd_change = object_hd_change
    object_type = document_type
    outbox_flag = put_in_outbox
    originator = originator
    originator_type = originator_type
  IMPORTING
    object_id_new = object_id
    sent_to_all = sent_to_all
  TABLES
    objcont = object_content
    objhead = object_header
    objpara = object_para
    objparb = object_parb
    receivers = rec_table
  EXCEPTIONS
    object_not_sent = 15
    object_type_not_exist = 17
    operation_no_authorization = 21
    parameter_error = 23
    too_much_receivers = 73
    OTHERS = 1000.
CASE sy-subrc.
  WHEN ok.
  WHEN object_not_sent.
    PERFORM transfer_tab_to_rec(saplsoi1) TABLES
      rec_table
      receivers.
    RAISE document_not_sent.
  WHEN too_much_receivers.
    RAISE too_many_receivers.
  WHEN object_type_not_exist.
    RAISE document_type_not_exist.
  WHEN operation_no_authorization.
    RAISE operation_no_authorization.
  WHEN parameter_error.
    RAISE parameter_error.
  WHEN OTHERS.
    RAISE x_error.
ENDCASE.
MOVE object_id TO new_object_id.
PERFORM transfer_tab_to_rec(saplsoi1) TABLES 
  rec_table
  receivers.
ENDFUNCTION.