- Details
-
Category: ABAP
-
Published on Sunday, 24 February 2008 01:08
-
Written by SAPDev
-
Hits: 17427
The code below demonstrates how to send an SAP mail to a users inbox (SBWP)
*......................................................................* *: Report ZSAPTALK :* *: Author SAPdev.co.uk :* *:.....................................................................* *: Description : :* *:.............: :* *: Send mail message to SAP mail inbox. :* *: :* *: Please visit www.sapdev.co.uk for further info :* *:....................................................................:* REPORT ZSAPMAIL NO STANDARD PAGE HEADING.
TABLES: DRAD, QINF, DRAW, SOUC, SOFD, DRAP.
DATA: P_RETURN_CODE LIKE SY-SUBRC.
data: d_username LIKE DRAP-PRNAM.
* mail declarations DATA : BEGIN OF NEW_OBJECT_ID. " the newly created email object INCLUDE STRUCTURE SOODK. DATA : END OF NEW_OBJECT_ID.
DATA : BEGIN OF FOLDER_ID. " the folder id of the outbox INCLUDE STRUCTURE SOODK. DATA : END OF FOLDER_ID.
DATA : BEGIN OF REC_TAB OCCURS 5. " the table which will contain the INCLUDE STRUCTURE SOOS1. " information on the destination DATA : END OF REC_TAB.
DATA : BEGIN OF OBJECT_HD_CHANGE. " the table which contains the INCLUDE STRUCTURE SOOD1. " info for the object we will be DATA : END OF OBJECT_HD_CHANGE. " creating
DATA : OBJECT_TYPE LIKE SOOD-OBJTP. " the type of object
DATA : BEGIN OF OBJHEAD OCCURS 5. " the header of the object INCLUDE STRUCTURE SOLI. DATA : END OF OBJHEAD.
DATA : BEGIN OF OBJCONT OCCURS 0. " the contents of the object INCLUDE STRUCTURE SOLI. " i.e. the text etc DATA : END OF OBJCONT.
DATA : BEGIN OF OBJPARA OCCURS 5. " formatting options INCLUDE STRUCTURE SELC. DATA : END OF OBJPARA.
DATA : BEGIN OF OBJPARB OCCURS 5. " formatting options INCLUDE STRUCTURE SOOP1. DATA : END OF OBJPARB.
DATA : BEGIN OF T_MAIL_TEXT OCCURS 0, "Message table for messages to STRING(255), "user via mailbox END OF T_MAIL_TEXT.
Parameter: p_uname like sy-uname.
************************************************************************ **START-OF-SELECTION START-OF-SELECTION. d_username = p_uname. PERFORM POPULATE_EMAIL_TEXT.
PERFORM SETUP_TRX_AND_RTX_MAILBOXES USING P_RETURN_CODE. PERFORM CREATE_AND_SEND_MAIL_OBJECT.
*---------------------------------------------------------------------* * FORM POPULATE_EMAIL_TEXT * *---------------------------------------------------------------------* * Inserts text for email message * *---------------------------------------------------------------------* FORM POPULATE_EMAIL_TEXT. CLEAR T_MAIL_TEXT-STRING. "puts a blank line in APPEND T_MAIL_TEXT. APPEND T_MAIL_TEXT.
* adds failed list on to end of success list. T_MAIL_TEXT-STRING = 'Test email message line 1'. APPEND T_MAIL_TEXT. T_MAIL_TEXT-STRING = 'Test email message line 1'. APPEND T_MAIL_TEXT. CLEAR T_MAIL_TEXT-STRING. "puts a blank line in APPEND T_MAIL_TEXT. T_MAIL_TEXT-STRING = 'Header1 Header2 Header3'. APPEND T_MAIL_TEXT. T_MAIL_TEXT-STRING = '------------ ------------ ------------'. APPEND T_MAIL_TEXT. ENDFORM.
*&---------------------------------------------------------------------* *& Form SETUP_TRX_&_RTX_MAILBOXES *&---------------------------------------------------------------------* * Ensure that the mailboxes of the sender (INTMGR) are set up OK *----------------------------------------------------------------------* FORM SETUP_TRX_AND_RTX_MAILBOXES USING P_RETURN_CODE.
* get the user no of the sender in order to add the mail to the * user name's outbox for future reference SELECT SINGLE * FROM SOUC WHERE SAPNAM = SY-UNAME. "SAP name of a SAPoffice user IF SY-SUBRC NE 0. "Error finding the SAPoffice user info for the user MESSAGE E064(ZR53) WITH SY-UNAME. P_RETURN_CODE = 1. EXIT. ENDIF. *Get the outbox No for the sender from the user No where the folder " type is an outbox SELECT * FROM SOFD WHERE OWNTP = SOUC-USRTP "Owner type from ID AND OWNYR = SOUC-USRYR "Owner year from the ID AND OWNNO = SOUC-USRNO "Owner number from the I AND FOLRG = 'O'."Output box ENDSELECT.
IF SY-SUBRC NE 0. " Error getting folder information for the user MESSAGE E065(ZR53) WITH SY-UNAME. P_RETURN_CODE = 1. EXIT. ENDIF. ENDFORM. " SETUP_TRX_&_RTX_MAILBOXES
*&---------------------------------------------------------------------* *& Form CREATE_AND_SEND_MAIL_OBJECT *&---------------------------------------------------------------------* FORM CREATE_AND_SEND_MAIL_OBJECT.
FOLDER_ID-OBJTP = SOFD-FOLTP. " the folder type ( usually FOL ) FOLDER_ID-OBJYR = SOFD-FOLYR. " the folder year ( usually 22 ) FOLDER_ID-OBJNO = SOFD-FOLNO. " the folder no. OBJECT_TYPE = 'RAW'. " the type of object being added
* build up the object information for creating the object OBJECT_HD_CHANGE-OBJLA = SY-LANGU. " the language of the email OBJECT_HD_CHANGE-OBJNAM = 'PS to DM Interface'. " the object name
* mail subject 'Mass Linking of QA, pass/fail' MOVE TEXT-002 TO OBJECT_HD_CHANGE-OBJDES.
OBJECT_HD_CHANGE-DLDAT = SY-DATUM. " the date of the email OBJECT_HD_CHANGE-DLTIM = SY-UZEIT. " the time of the email OBJECT_HD_CHANGE-OBJPRI = '1'. " the priority ( highest ) OBJECT_HD_CHANGE-OBJSNS = 'F'. " the object sensitivity * F is functional, C - company sensitive
* object_hd_change-skips = ' '. " Skip first screen * object_hd_change-acnam = 'SM35'. " Batch imput transaction
* object_hd_change-vmtyp = 'T'. " Transaction type
* add the text lines into the contents of the email CLEAR OBJCONT. REFRESH OBJCONT. * free objcont. " added this to delete the mail contents records LOOP AT T_MAIL_TEXT. OBJCONT-LINE = T_MAIL_TEXT-STRING. APPEND OBJCONT. ENDLOOP. CLEAR OBJCONT.
* build up the table of receivers for the email REC_TAB-RCDAT = SY-DATUM. " the date to send the email REC_TAB-RCTIM = SY-UZEIT. " the time to send the email * the SAP username of the person who will receive the email REC_TAB-RECNAM = D_USERNAME. * the user type of the person who will send the email ( USR ) REC_TAB-SNDTP = SOUC-USRTP. * the user year of the person who will send the email ( 22 ) REC_TAB-SNDYR = SOUC-USRYR. * the user number of the person who will send the email REC_TAB-SNDNO = SOUC-USRNO. * the sap username of the person who will send the email REC_TAB-SNDNAM = SY-UNAME.
* get the user info for the receiver of the document SELECT SINGLE * FROM SOUC WHERE SAPNAM = D_USERNAME. IF SY-SUBRC NE 0. WRITE : / TEXT-001, D_USERNAME. "usnam. EXIT. ENDIF.
* the user number of the person who will receive the email ( USR ) REC_TAB-RECNO = SOUC-USRNO. * the user type of the person who will receive the email ( USR ) REC_TAB-RECTP = SOUC-USRTP. * the user year of the person who will receive the email ( USR ) REC_TAB-RECYR = SOUC-USRYR. * the priority of the email ( highest ) REC_TAB-SNDPRI = '1'. * check for delivery on the email REC_TAB-DELIVER = 'X'. * send express so recipient knows there is a problem REC_TAB-SNDEX = 'X'. * check for a return receipt REC_TAB-READ = 'X'. * the sap username of the person receiving the email REC_TAB-ADR_NAME = D_USERNAME. "usnam. * add this receiver to the internal table APPEND REC_TAB. CLEAR REC_TAB.
* call the function to create the object in the outbox of the sender CALL FUNCTION 'SO_OBJECT_INSERT' EXPORTING FOLDER_ID = FOLDER_ID OBJECT_HD_CHANGE = OBJECT_HD_CHANGE OBJECT_TYPE = OBJECT_TYPE OWNER = SY-UNAME IMPORTING OBJECT_ID = NEW_OBJECT_ID TABLES OBJCONT = OBJCONT OBJHEAD = OBJHEAD OBJPARA = OBJPARA OBJPARB = OBJPARB EXCEPTIONS ACTIVE_USER_NOT_EXIST = 1 COMMUNICATION_FAILURE = 2 COMPONENT_NOT_AVAILABLE = 3 DL_NAME_EXIST = 4 FOLDER_NOT_EXIST = 5 FOLDER_NO_AUTHORIZATION = 6 OBJECT_TYPE_NOT_EXIST = 7 OPERATION_NO_AUTHORIZATION = 8 OWNER_NOT_EXIST = 9 PARAMETER_ERROR = 10 SUBSTITUTE_NOT_ACTIVE = 11 SUBSTITUTE_NOT_DEFINED = 12 SYSTEM_FAILURE = 13 X_ERROR = 14 OTHERS = 15. IF SY-SUBRC NE 0. MESSAGE A063(ZR53) WITH SY-SUBRC. EXIT. ENDIF.
* call the function to send the already created email to the receivers CALL FUNCTION 'SO_OBJECT_SEND' EXPORTING FOLDER_ID = FOLDER_ID OBJECT_ID = NEW_OBJECT_ID OUTBOX_FLAG = 'X' OWNER = SY-UNAME TABLES RECEIVERS = REC_TAB EXCEPTIONS ACTIVE_USER_NOT_EXIST = 1 COMMUNICATION_FAILURE = 2 COMPONENT_NOT_AVAILABLE = 3 FOLDER_NOT_EXIST = 4 FOLDER_NO_AUTHORIZATION = 5 FORWARDER_NOT_EXIST = 6 NOTE_NOT_EXIST = 7 OBJECT_NOT_EXIST = 8 OBJECT_NOT_SENT = 9 OBJECT_NO_AUTHORIZATION = 10 OBJECT_TYPE_NOT_EXIST = 11 OPERATION_NO_AUTHORIZATION = 12 OWNER_NOT_EXIST = 13 PARAMETER_ERROR = 14 SUBSTITUTE_NOT_ACTIVE = 15 SUBSTITUTE_NOT_DEFINED = 16 SYSTEM_FAILURE = 17 TOO_MUCH_RECEIVERS = 18 USER_NOT_EXIST = 19 X_ERROR = 20 OTHERS = 21. IF SY-SUBRC EQ 0. MESSAGE I035(ZR53) WITH NEW_OBJECT_ID D_USERNAME. "usnam. ELSE. MESSAGE I036(ZR53) WITH D_USERNAME." sy-subrc. ENDIF. ENDFORM. " CREATE_AND_SEND_MAIL_OBJECT
|