🔟
Email Triggering in Smartforms
1. Introduction
To send mail into PDF, we will make use of the various standard classes related to BCS (
Business Communication Services ).
We can use SOST transaction code while sending the mail to external system in order to
check whether everything is perfect fine or not in our system.
2. Important Classes used for Email Purpose
The various standard classes we will use for this purpose are as follows :-
CL_BCS :-
This class is used for creating the send request, adding the recipient, sending the
document etc.
CL_DOCUMENT_BCS :-
This class is used for creating the document, adding the attachment etc.
Email Triggering in Smartforms 1
Mob No :- +916261538504
We will use this class for writing documents.
CL_CAM_ADDRESS_BCS :-
This class is used to create the external recipients.
This class is used to for sending the mail to outside address of SAP.
Out of these above classes, the first two are most important for Email purpose.
3. Steps Used for Email Writing Normally
When ever send any mail, we use below steps.
We pass the receipent address ( where we want to send the mail ).
We pass the subject
We write the text for the email purpose (i.e. Description for mail ) .
We attach the document for the same.
Then we have to click on send to send the mail.
This whole process is maintained by the first two classes.
CL_BCS
CL_DOCUMENT_BCS
4. Steps to Send Smartform PDF as an E-Mail
Attachment
1. Get the BIN_FILE of the smartform.
2. Convert the BIN_FILE from XSTING format to binary format.
3. Create the send request.
4. Create the SAP user/external user ( recipient ).
5. Add the recipient.
6. Create the document
Email Triggering in Smartforms 2
Mob No :- +916261538504
7. Add the attachment.
8. Set the document
9. Activate/deactivate immediate sending.
10. Send
11. Commit
5. Implementation
Step 1 :- Call the function module of the smartform to get the OTF data.
PARAMETERS : P_EMP_ID TYPE ZAR_EMP_ID.
START-OF-SELECTION.
DATA : LS_CONTROL TYPE SSFCTRLOP.
LS_CONTROL-GETOTF = 'X'.
LS_CONTROL-NO_DIALOG = 'X'.
DATA : LS_OUTPUT TYPE SSFCOMPOP.
LS_OUTPUT-TDDEST = 'LP01'.
DATA : LS_OUTPUT_INFO TYPE SSFCRESCL.
CALL FUNCTION '/1BCDWB/SF00000129'
EXPORTING
* ARCHIVE_INDEX =
* ARCHIVE_INDEX_TAB =
* ARCHIVE_PARAMETERS =
CONTROL_PARAMETERS = LS_CONTROL
* MAIL_APPL_OBJ =
* MAIL_RECIPIENT =
* MAIL_SENDER =
OUTPUT_OPTIONS = LS_OUTPUT
USER_SETTINGS =''
Email Triggering in Smartforms 3
Mob No :- +916261538504
P_EMP_ID = P_EMP_ID
IMPORTING
* DOCUMENT_OUTPUT_INFO =
JOB_OUTPUT_INFO = LS_OUTPUT_INFO
* JOB_OUTPUT_OPTIONS =
EXCEPTIONS
FORMATTING_ERROR =1
INTERNAL_ERROR =2
SEND_ERROR =3
USER_CANCELED =4
OTHERS =5
.
Step 2 :- Now we have OTF data, so we will convert it to BIN_FILE using CONVERT_OTF
function module, It will return me the BIN_FILE.
DATA : LT_LINES TYPE TABLE OF TLINE,
LV_BIN_FILE TYPE XSTRING.
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = 'PDF'
* MAX_LINEWIDTH = 132
* ARCHIVE_INDEX =''
* COPYNUMBER =0
* ASCII_BIDI_VIS2LOG =''
* PDF_DELETE_OTFTAB =''
* PDF_USERNAME =''
* PDF_PREVIEW =''
* USE_CASCADING =''
* MODIFIED_PARAM_TABLE =
IMPORTING
* BIN_FILESIZE =
BIN_FILE = LV_BIN_FILE
TABLES
Email Triggering in Smartforms 4
Mob No :- +916261538504
OTF = LS_output_info-otfdata
LINES = LT_LINES
EXCEPTIONS
ERR_MAX_LINEWIDTH =1
ERR_FORMAT =2
ERR_CONV_NOT_POSSIBLE =3
ERR_BAD_OTF =4
OTHERS =5
.
Step 3 :- We have got our BIN_FILE in form of XSTRING format, now we need to convert
it into binary format. So, we will use SCMS_XSTRING_TO_BINARY function module for
the same purpose.
DATA : LT_BINARY_TAB type SOLIX_TAB.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
BUFFER = LV_BIN_FILE
* APPEND_TO_TABLE =''
* IMPORTING
* OUTPUT_LENGTH =
TABLES
BINARY_TAB = LT_BINARY_TAB
.
Step 4 :- Now, we have the contents which I want to send a email, So now I will create a
send request using CL_BCS class.
We have a CREATE_PERSISTENT method in CL_BCS class which we will use for
create request purpose.
It will return me the object for CL_BCS class.
DATA : LO_BCS TYPE REF TO CL_BCS.
TRY.
Email Triggering in Smartforms 5
Mob No :- +916261538504
CALL METHOD CL_BCS=>CREATE_PERSISTENT
RECEIVING
RESULT = LO_BCS
.
CATCH CX_SEND_REQ_BCS.
ENDTRY.
Step 5 :- Now, to send the mail to the external user,I will have to create a recipient for
external user.
For the same purpose, we have CL_CAM_ADDRESS_BCS class and we will call its
method CREATE_INTERNET_ADDRESS, it will return the object of this class.
TRY.
CALL METHOD CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS
EXPORTING
I_ADDRESS_STRING = '[email protected]'
* I_ADDRESS_NAME =
* I_INCL_SAPUSER =
RECEIVING
RESULT = LO_EXTERNAL_USER
.
CATCH CX_ADDRESS_BCS.
ENDTRY.
Step 6 :- Now, we have got the external address, then we will add this recipient to CL_BCS
class using ADD_RECIPIENT method.
TRY.
CALL METHOD LO_BCS->ADD_RECIPIENT
EXPORTING
I_RECIPIENT = LO_EXTERNAL_USER
* I_EXPRESS =
* I_COPY =
* I_BLIND_COPY =
* I_NO_FORWARD =
Email Triggering in Smartforms 6
Mob No :- +916261538504
.
CATCH CX_SEND_REQ_BCS.
ENDTRY.
Step 7 :- Now, we have added the recipient, now we will create the document for the same
purpose.
We will provide, subject, text and will attach the PDF for the same purpose in the
document part.
We will use CREATE_DOCUMENT method of CL_DOCUMENT_BCS class to create
the document.
DATA : LT_TEXT TYPE TABLE OF SOLI,
LS_TEXT TYPE SOLI.
LS_TEXT-LINE = 'Dear Sir'.
APPEND LS_TEXT to LT_TEXT.
CLEAR LS_TEXT.
LS_TEXT-LINE = 'Below is the attached Smartform'.
APPEND LS_TEXT to LT_TEXT.
CLEAR LS_TEXT.
LS_TEXT-LINE = 'Thanks and Regards'.
APPEND LS_TEXT to LT_TEXT.
CLEAR LS_TEXT.
LS_TEXT-LINE = 'Amrit Raj'.
APPEND LS_TEXT to LT_TEXT.
CLEAR LS_TEXT.
DATA : LO_DOCUMENT type ref to CL_DOCUMENT_BCS.
TRY.
CALL METHOD CL_DOCUMENT_BCS=>CREATE_DOCUMENT
EXPORTING
Email Triggering in Smartforms 7
Mob No :- +916261538504
I_TYPE = 'RAW'
I_SUBJECT = 'Employee Details'
* I_LENGTH =
* I_LANGUAGE = SPACE
* I_IMPORTANCE =
* I_SENSITIVITY =
I_TEXT = LT_TEXT
* I_HEX =
* I_HEADER =
* I_SENDER =
* IV_VSI_PROFILE =
RECEIVING
RESULT = LO_DOCUMENT
.
CATCH CX_DOCUMENT_BCS.
ENDTRY.
Step 8 :- Now we will add the smartform and a Subject for the Mail, for that purpose we will
use ADD_ATTACHMENT method of CL_DOCUMENT_BCS class.
TRY.
CALL METHOD LO_DOCUMENT->ADD_ATTACHMENT
EXPORTING
I_ATTACHMENT_TYPE = 'PDF'
I_ATTACHMENT_SUBJECT = 'Employee Details Using Smartform'
* I_ATTACHMENT_SIZE =
* I_ATTACHMENT_LANGUAGE = SPACE
* I_ATT_CONTENT_TEXT =
I_ATT_CONTENT_HEX = LT_BINARY_TAB
* I_ATTACHMENT_HEADER =
* IV_VSI_PROFILE =
.
CATCH CX_DOCUMENT_BCS.
ENDTRY.
Email Triggering in Smartforms 8
Mob No :- +916261538504
Step 9 :- Now we have to set the document, so for that purpose we will use the
SET_DOCUMENT method of CL_BCS class to set the document and we will pass the
object of CL_DOCUMENT_BCS class into this method.
TRY.
CALL METHOD LO_BCS->SET_DOCUMENT
EXPORTING
I_DOCUMENT = LO_DOCUMENT
.
CATCH CX_SEND_REQ_BCS.
ENDTRY.
Step 10 :- Last step is to prepare mail for sending so we will call the
SET_SEND_IMMEDIATELY method of CL_BCS class and we will pass it to true.
TRY.
CALL METHOD LO_BCS->SET_SEND_IMMEDIATELY
EXPORTING
I_SEND_IMMEDIATELY = 'X'
.
CATCH CX_SEND_REQ_BCS.
ENDTRY.
Step 11 :- Send the mail using send method of CL_BCS class.
DATA : LV_RESULT type OS_BOOLEAN.
TRY.
CALL METHOD LO_BCS->SEND
* EXPORTING
* I_WITH_ERROR_SCREEN = SPACE
RECEIVING
RESULT = LV_RESULT
.
CATCH CX_SEND_REQ_BCS.
ENDTRY.
Email Triggering in Smartforms 9
Mob No :- +916261538504
IF LV_RESULT is NOT INITIAL.
COMMIT WORK.
MESSAGE 'Mail is Sent' TYPE 'S'.
ELSE.
MESSAGE 'Mail is not Sent' type 'E'.
ENDIF.
Code
PARAMETERS : P_EMP_ID TYPE ZAR_EMP_ID.
START-OF-SELECTION.
DATA : LS_CONTROL TYPE SSFCTRLOP.
LS_CONTROL-GETOTF = 'X'.
LS_CONTROL-NO_DIALOG = 'X'.
DATA : LS_OUTPUT TYPE SSFCOMPOP.
LS_OUTPUT-TDDEST = 'LP01'.
DATA : LS_OUTPUT_INFO TYPE SSFCRESCL.
CALL FUNCTION '/1BCDWB/SF00000129'
EXPORTING
* ARCHIVE_INDEX =
* ARCHIVE_INDEX_TAB =
* ARCHIVE_PARAMETERS =
CONTROL_PARAMETERS = LS_CONTROL
* MAIL_APPL_OBJ =
* MAIL_RECIPIENT =
* MAIL_SENDER =
OUTPUT_OPTIONS = LS_OUTPUT
USER_SETTINGS =''
P_EMP_ID = P_EMP_ID
Email Triggering in Smartforms 10
Mob No :- +916261538504
IMPORTING
* DOCUMENT_OUTPUT_INFO =
JOB_OUTPUT_INFO = LS_OUTPUT_INFO
* JOB_OUTPUT_OPTIONS =
EXCEPTIONS
FORMATTING_ERROR =1
INTERNAL_ERROR =2
SEND_ERROR =3
USER_CANCELED =4
OTHERS =5
.
DATA : LT_LINES TYPE TABLE OF TLINE,
LV_BIN_FILE TYPE XSTRING.
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = 'PDF'
* MAX_LINEWIDTH = 132
* ARCHIVE_INDEX =''
* COPYNUMBER =0
* ASCII_BIDI_VIS2LOG =''
* PDF_DELETE_OTFTAB =''
* PDF_USERNAME =''
* PDF_PREVIEW =''
* USE_CASCADING =''
* MODIFIED_PARAM_TABLE =
IMPORTING
* BIN_FILESIZE =
BIN_FILE = LV_BIN_FILE
TABLES
OTF = LS_output_info-otfdata
LINES = LT_LINES
EXCEPTIONS
ERR_MAX_LINEWIDTH =1
ERR_FORMAT =2
Email Triggering in Smartforms 11
Mob No :- +916261538504
ERR_CONV_NOT_POSSIBLE =3
ERR_BAD_OTF =4
OTHERS =5
.
DATA : LT_BINARY_TAB type SOLIX_TAB.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
BUFFER = LV_BIN_FILE
* APPEND_TO_TABLE =''
* IMPORTING
* OUTPUT_LENGTH =
TABLES
BINARY_TAB = LT_BINARY_TAB
.
DATA : LO_BCS TYPE REF TO CL_BCS.
TRY.
CALL METHOD CL_BCS=>CREATE_PERSISTENT
RECEIVING
RESULT = LO_BCS
.
CATCH CX_SEND_REQ_BCS.
ENDTRY.
DATA : LO_EXTERNAL_USER TYPE REF TO CL_CAM_ADDRESS_BCS.
TRY.
CALL METHOD CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS
Email Triggering in Smartforms 12
Mob No :- +916261538504
EXPORTING
I_ADDRESS_STRING = '
[email protected]'
* I_ADDRESS_NAME =
* I_INCL_SAPUSER =
RECEIVING
RESULT = LO_EXTERNAL_USER
.
CATCH CX_ADDRESS_BCS.
ENDTRY.
TRY.
CALL METHOD LO_BCS->ADD_RECIPIENT
EXPORTING
I_RECIPIENT = LO_EXTERNAL_USER
* I_EXPRESS =
* I_COPY =
* I_BLIND_COPY =
* I_NO_FORWARD =
.
CATCH CX_SEND_REQ_BCS.
ENDTRY.
DATA : LT_TEXT TYPE TABLE OF SOLI,
LS_TEXT TYPE SOLI.
LS_TEXT-LINE = 'Dear Sir'.
APPEND LS_TEXT to LT_TEXT.
CLEAR LS_TEXT.
LS_TEXT-LINE = 'Below is the attached Smartform'.
APPEND LS_TEXT to LT_TEXT.
CLEAR LS_TEXT.
LS_TEXT-LINE = 'Thanks and Regards'.
APPEND LS_TEXT to LT_TEXT.
Email Triggering in Smartforms 13
Mob No :- +916261538504
CLEAR LS_TEXT.
LS_TEXT-LINE = 'Amrit Raj'.
APPEND LS_TEXT to LT_TEXT.
CLEAR LS_TEXT.
DATA : LO_DOCUMENT type ref to CL_DOCUMENT_BCS.
TRY.
CALL METHOD CL_DOCUMENT_BCS=>CREATE_DOCUMENT
EXPORTING
I_TYPE = 'RAW'
I_SUBJECT = 'Employee Details'
* I_LENGTH =
* I_LANGUAGE = SPACE
* I_IMPORTANCE =
* I_SENSITIVITY =
I_TEXT = LT_TEXT
* I_HEX =
* I_HEADER =
* I_SENDER =
* IV_VSI_PROFILE =
RECEIVING
RESULT = LO_DOCUMENT
.
CATCH CX_DOCUMENT_BCS.
ENDTRY.
TRY.
CALL METHOD LO_DOCUMENT->ADD_ATTACHMENT
EXPORTING
I_ATTACHMENT_TYPE = 'PDF'
I_ATTACHMENT_SUBJECT = 'Employee Details Using Smartform'
* I_ATTACHMENT_SIZE =
* I_ATTACHMENT_LANGUAGE = SPACE
Email Triggering in Smartforms 14
Mob No :- +916261538504
* I_ATT_CONTENT_TEXT =
I_ATT_CONTENT_HEX = LT_BINARY_TAB
* I_ATTACHMENT_HEADER =
* IV_VSI_PROFILE =
.
CATCH CX_DOCUMENT_BCS.
ENDTRY.
TRY.
CALL METHOD LO_BCS->SET_DOCUMENT
EXPORTING
I_DOCUMENT = LO_DOCUMENT
.
CATCH CX_SEND_REQ_BCS.
ENDTRY.
TRY.
CALL METHOD LO_BCS->SET_SEND_IMMEDIATELY
EXPORTING
I_SEND_IMMEDIATELY = 'X'
.
CATCH CX_SEND_REQ_BCS.
ENDTRY.
DATA : LV_RESULT type OS_BOOLEAN.
TRY.
CALL METHOD LO_BCS->SEND
* EXPORTING
* I_WITH_ERROR_SCREEN = SPACE
RECEIVING
RESULT = LV_RESULT
.
CATCH CX_SEND_REQ_BCS.
ENDTRY.
Email Triggering in Smartforms 15
Mob No :- +916261538504
IF LV_RESULT is NOT INITIAL.
COMMIT WORK.
MESSAGE 'Mail is Sent' TYPE 'S'.
ELSE.
MESSAGE 'Mail is not Sent' type 'E'.
ENDIF.
Output
We can go to SOST and check the contents of Mail.
Email Triggering in Smartforms 16
Mob No :- +916261538504