11-29-2005 7:52 PM
Hi,
I changed 'SO_DOCUMENT_SEND_API1' to 'SO_NEW_DOCUMENT_ATT_SEND_API1'. With 'SO_DOCUMENT_SEND_API1' it was sending email with XLS attachment. Now after changing the function it is not sending email. Before I wrote the code for XLS file, now I want to change it to PDF file. Where should I change it. Any suggestions on how to do it. please look at my code.
Thanks
Veni.
FORM EMAIL_DATA.
Populate details for .xls file
PERFORM build_xls_data_table.
Populate message body
PERFORM populate_email_message_body.
Send file by email as .xls speadsheet
PERFORM send_file_as_email_attachment
TABLES i_message
i_attach
USING p_email
'Commercial Invoice'
'XLS'
'COMMERCIAL_INVOICE'
' '
' '
' '
CHANGING g_error
g_reciever.
Instructs mail send program for SAPCONNECT to send email(rsconn01)
PERFORM initiate_mail_execute_program.
ENDFORM. " EMAIL_DATA
&----
*& Form build_xls_data_table
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_xls_data_table .
CONSTANTS:
con_tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab,
con_cret TYPE c VALUE cl_abap_char_utilities=>cr_lf.
i_attach-line = 'AMERICA, INC.'.
APPEND i_attach.
i_attach-line = 'Commercial Invoice Details., INC.'.
APPEND i_attach.
i_attach-line = 'Details of Commercial Invoice:'.
APPEND i_attach.
LOOP AT FTAB.
i_attach-line = FTAB-VBELN.
APPEND i_attach.
CONCATENATE 'MATERIAL' 'NET PRICE' INTO i_attach
SEPARATED BY space.
CONCATENATE con_cret i_attach INTO i_attach.
APPEND i_attach.
LOOP AT ITAB_VBRP INTO wa_data.
CONCATENATE wa_data-MATNR
wa_data-NETWR INTO i_attach
SEPARATED BY space. "con_tab.
CONCATENATE con_cret i_attach INTO i_attach.
APPEND i_attach.
ENDLOOP.
ENDLOOP.
ENDFORM. " build_xls_data_table
&----
*& Form populate_email_message_body
&----
text
----
--> p1 text
<-- p2 text
----
FORM populate_email_message_body .
DATA: l_buffer(250).
REFRESH i_message.
l_buffer = 'COMMERCIAL INVOICE DATA DOWNLOAD. '.
SKIP 2.
CONCATENATE l_buffer 'You will find an attachment in this message.'
INTO l_buffer.
i_message = l_buffer.
APPEND i_message.
ENDFORM. " populate_email_message_body
&----
*& Form SEND_FILE_AS_EMAIL_ATTACHMENT
&----
Send email
----
FORM send_file_as_email_attachment TABLES p_i_message
p_i_attach
USING p_email1
p_mtitle
p_format
p_filename
p_attdescription
p_sender_address
p_sender_addres_type
CHANGING p_error
p_receiver.
DATA: l_error TYPE sy-subrc,
l_receiver TYPE sy-subrc,
l_email LIKE somlreci1-receiver,
l_mtitle LIKE sodocchgi1-obj_descr,
l_format TYPE so_obj_tp,
l_attfilename TYPE so_obj_des ,
l_attdescription TYPE so_obj_nam ,
l_sender_address LIKE soextreci1-receiver,
l_sender_address_type LIKE soextreci1-adr_typ.
l_email = p_email1.
l_mtitle = p_mtitle.
l_format = p_format.
l_attfilename = p_filename.
l_attdescription = p_attdescription.
l_sender_address = p_sender_address.
l_sender_address_type = p_sender_addres_type.
Fill the document data.
w_doc_data-doc_size = 1.
Populate the subject/generic message attributes
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = l_mtitle .
w_doc_data-sensitivty = 'F'.
Fill the document data and get size of attachment
CLEAR w_doc_data.
READ TABLE i_attach INDEX w_cnt.
w_doc_data-doc_size =
( w_cnt - 1 ) * 255 + STRLEN( i_attach ).
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = l_mtitle.
w_doc_data-sensitivty = 'F'.
CLEAR i_attachment.
REFRESH i_attachment.
i_attachment[] = p_i_attach[].
Describe the body of the message
CLEAR i_packing_list.
REFRESH i_packing_list.
i_packing_list-transf_bin = space.
i_packing_list-head_start = 1.
i_packing_list-head_num = 0.
i_packing_list-body_start = 1.
DESCRIBE TABLE i_message LINES i_packing_list-body_num.
i_packing_list-doc_type = 'RAW'.
APPEND i_packing_list.
Create attachment notification
i_packing_list-transf_bin = 'X'.
i_packing_list-head_start = 1.
i_packing_list-head_num = 1.
i_packing_list-body_start = 1.
DESCRIBE TABLE i_attachment LINES i_packing_list-body_num.
i_packing_list-doc_type = l_format.
i_packing_list-obj_descr = l_attdescription.
i_packing_list-obj_name = l_attfilename.
i_packing_list-doc_size = i_packing_list-body_num * 255.
APPEND i_packing_list.
Add the recipients email address
CLEAR i_receivers.
REFRESH i_receivers.
i_receivers-receiver = l_email.
i_receivers-rec_type = 'U'.
i_receivers-com_type = 'INT'.
i_receivers-notif_del = 'X'.
i_receivers-notif_ndel = 'X'.
APPEND i_receivers.
i_receivers-receiver = l_email.
i_receivers-rec_type = 'B'.
i_receivers-com_type = ''.
i_receivers-notif_del = 'X'.
i_receivers-notif_ndel = 'X'.
APPEND i_receivers.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = w_doc_data
PUT_IN_OUTBOX = 'X'
IMPORTING
SENT_TO_ALL = w_sent_all
NEW_OBJECT_ID =
TABLES
PACKING_LIST = i_packing_list
OBJECT_HEADER =
CONTENTS_BIN = i_attachment
CONTENTS_TXT = i_message
CONTENTS_HEX =
OBJECT_PARA =
OBJECT_PARB =
RECEIVERS = i_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
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = w_doc_data
put_in_outbox = 'X'
sender_address = l_sender_address
sender_address_type = l_sender_address_type
commit_work = 'X'
IMPORTING
sent_to_all = w_sent_all
TABLES
packing_list = i_packing_list
contents_bin = i_attachment
contents_txt = i_message
receivers = i_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.
Populate zerror return code
l_error = sy-subrc.
Populate zreceiver return code
LOOP AT i_receivers.
l_receiver = i_receivers-retrn_code.
ENDLOOP.
ENDFORM. "send_file_as_email_attachment
&----
*& Form INITIATE_MAIL_EXECUTE_PROGRAM
&----
Instructs mail send program for SAPCONNECT to send email.
----
FORM initiate_mail_execute_program.
WAIT UP TO 2 SECONDS.
SUBMIT rsconn01 WITH mode = 'INT'
WITH output = ''
AND RETURN.
ENDFORM. "
11-29-2005 7:59 PM
Hi Veni Reddy,
You can refer to my program, and change accordingly in your program where necessary.
*****
REPORT ZTEST_MAIL2 .
DATA: OBJPACK LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.
DATA: OBJHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
DATA: OBJBIN LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: OBJTXT LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: RECLIST LIKE SOMLRECI1 OCCURS 5 WITH HEADER LINE.
DATA: DOC_CHNG LIKE SODOCCHGI1.
DATA: TAB_LINES LIKE SY-TABIX.
Creation of the document to be sent
DOC_CHNG-OBJ_NAME = 'Padmakar'.
DOC_CHNG-OBJ_DESCR = 'Composite Report'.
OBJTXT = 'Contents of mail'.
APPEND OBJTXT.
OBJTXT = 'BMS'.
APPEND OBJTXT.
OBJTXT = 'BMSHR'.
APPEND OBJTXT.
DESCRIBE TABLE OBJTXT LINES TAB_LINES.
READ TABLE OBJTXT INDEX TAB_LINES.
DOC_CHNG-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJTXT ).
Creation of the entry for the compressed document
CLEAR OBJPACK-TRANSF_BIN.
OBJPACK-HEAD_START = 1.
OBJPACK-HEAD_NUM = 0.
OBJPACK-BODY_START = 1.
OBJPACK-BODY_NUM = TAB_LINES.
OBJPACK-DOC_TYPE = 'RAW'.
APPEND OBJPACK.
Creation of the document attachment
(Assume that the data in OBJBIN is in BMP format)
OBJBIN-LINE = ' Padmakar '. APPEND OBJBIN.
OBJBIN-LINE = ' padmakar '. APPEND OBJBIN.
OBJBIN-LINE = ' PaDmAkAr '. APPEND OBJBIN.
DESCRIBE TABLE OBJBIN LINES TAB_LINES.
OBJHEAD = 'TEST.PDF'. APPEND OBJHEAD.
Creation of the entry for the compressed attachment
OBJPACK-TRANSF_BIN = 'X'.
OBJPACK-HEAD_START = 1.
OBJPACK-HEAD_NUM = 1.
OBJPACK-BODY_START = 1.
OBJPACK-BODY_NUM = TAB_LINES.
OBJPACK-DOC_TYPE = 'DOC'.
OBJPACK-OBJ_NAME = 'BMS'.
OBJPACK-OBJ_DESCR = 'BMS Master'.
OBJPACK-DOC_SIZE = TAB_LINES * 255.
APPEND OBJPACK.
Completing the recipient list
RECLIST-RECEIVER = 'raj@hotmail.com'.
RECLIST-REC_TYPE = 'U'.
APPEND RECLIST.
* Sending the document
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = DOC_CHNG
PUT_IN_OUTBOX = 'X'
TABLES
PACKING_LIST = OBJPACK
OBJECT_HEADER = OBJHEAD
CONTENTS_BIN = OBJBIN
CONTENTS_TXT = OBJTXT
RECEIVERS = RECLIST
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
OPERATION_NO_AUTHORIZATION = 4
OTHERS = 99.
IF SY-SUBRC = 0.
WRITE 😕 'SENT MAIL'.
ENDIF.
*****
Regards,
raj
11-29-2005 8:01 PM
Hi
Do a Commit Work after the FM call or pass parameter COMMIT_WORK = 'X' to the FM.
Regards
Kalpana
Message was edited by: Kalpana Tyagi
11-29-2005 8:14 PM
REPORT ZMAILOUTPUT
MESSAGE-ID ZZ.
*----------------------------------------------------------------------*
* CONSTANTS *
*----------------------------------------------------------------------*
CONSTANTS : C_X(1) TYPE C VALUE 'X', " For constant value
C_OTF(3) TYPE C VALUE 'OTF', " For format
C_U(1) TYPE C VALUE 'U'. " Mail Option
*----------------------------------------------------------------------*
* VARIABLES *
*----------------------------------------------------------------------*
DATA : V_RQIDENT TYPE TSP01-RQIDENT, " For Spool Number
V_RQCLIENT TYPE TSP01-RQCLIENT, " For Client
V_RQO1NAME TYPE TSP01-RQO1NAME, " For Object name
V_SPOOL TYPE TSP01-RQIDENT, " For Spool Number
V_SPOOL1 TYPE TSP01-RQIDENT. " For Spool Number
*----------------------------------------------------------------------*
* FLAGS *
*----------------------------------------------------------------------*
DATA : F_SPOOL TYPE C.
*----------------------------------------------------------------------*
* INTERNAL TABLES *
*----------------------------------------------------------------------*
* Internal table for sending mails
DATA: IT_PDF LIKE TLINE OCCURS 10 WITH HEADER LINE,
IT_XI_PDF LIKE TLINE OCCURS 0 WITH HEADER LINE,
IT_HTML LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
IT_XI_TEMP LIKE BAPIQCMIME OCCURS 0 WITH HEADER LINE,
IT_XI_MIME(255) TYPE C OCCURS 0 WITH HEADER LINE.
* For sending mail
DATA: IT_OBJPACK LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.
* Internal table for Single List with Column Length 255
DATA : IT_OBJBIN LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
* Internal table for Single List with Column Length 255
DATA : IT_OBJTXT LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
* Internal table for Structure of the API Recipient List
DATA : IT_RECLIST LIKE SOMLRECI1 OCCURS 5 WITH HEADER LINE.
* Structure of the API Recipient List
DATA: X_DOC_CHNG LIKE SODOCCHGI1.
* Internal table for storing the variants
DATA : BEGIN OF IT_VARIANT1 OCCURS 0,
VARIANT LIKE VARID-VARIANT,
END OF IT_VARIANT1.
* Internal table to store variants for the programs
DATA: IT_VARIANT2 LIKE IT_VARIANT1 OCCURS 0 WITH HEADER LINE.
* Internal table for storing the selected values
DATA IT_RETURN TYPE DDSHRETVAL OCCURS 0 WITH HEADER LINE.
* Internal table for storing the mail-ids
DATA : BEGIN OF IT_MAILID OCCURS 0,
KOKRS LIKE CSKS-KOKRS,
KOSTL LIKE CSKS-KOSTL,
DATBI LIKE CSKS-DATBI,
TELX1 LIKE CSKS-TELX1,
END OF IT_MAILID.
* Internal table for storing the mail-ids
DATA : IT_MAILID1 LIKE IT_MAILID OCCURS 0 WITH HEADER LINE.
*----------------------------------------------------------------------*
* SELECTION SCREEN *
*----------------------------------------------------------------------*
DATA : V_CHAR TYPE CHAR50.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_EMAIL FOR V_CHAR NO INTERVALS
LOWER CASE
NO-DISPLAY.
SELECT-OPTIONS: S_EMAIL1 FOR V_CHAR NO INTERVALS
LOWER CASE
NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK A1 WITH FRAME TITLE TEXT-028.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS : P_C1 AS CHECKBOX.
SELECTION-SCREEN COMMENT 3(66) TEXT-026 FOR FIELD P_C1.
SELECTION-SCREEN END OF LINE.
PARAMETERS : P_SET LIKE TSP1D-PAPART MATCHCODE OBJECT ZH_TSP1D.
SELECTION-SCREEN SKIP 1.
PARAMETERS : P_VARA1 TYPE RS38M-SELSET.
SELECTION-SCREEN END OF BLOCK A1.
SELECTION-SCREEN BEGIN OF BLOCK A2 WITH FRAME TITLE TEXT-029.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS : P_C2 AS CHECKBOX.
SELECTION-SCREEN COMMENT 3(56) TEXT-027 FOR FIELD P_C1.
SELECTION-SCREEN END OF LINE.
PARAMETERS : P_SET1 LIKE TSP1D-PAPART MATCHCODE OBJECT ZH_TSP1D.
SELECTION-SCREEN SKIP 1.
PARAMETERS : P_VARA2 TYPE RS38M-SELSET.
SELECTION-SCREEN END OF BLOCK A2.
*---------------------------------------------------------------------*
* AT SELECTION SCREEN ON VALUE REQUEST
*---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_VARA1.
* For fetching the variants available for the program
PERFORM FETCH_VARIANTS.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_VARA2.
* For fetching the variants available for the program
PERFORM FETCH_VARIANTS1.
*---------------------------------------------------------------------*
* AT SELECTION SCREEN
*---------------------------------------------------------------------*
AT SELECTION-SCREEN.
* For Validation
PERFORM VALIDATION.
*----------------------------------------------------------------------*
* START OF SELECTION *
*----------------------------------------------------------------------*
START-OF-SELECTION.
* To get the output data and mail
PERFORM FETCH_DATA.
*----------------------------------------------------------------------*
* END OF SELECTION *
*----------------------------------------------------------------------*
END-OF-SELECTION.
IF F_SPOOL = C_X.
MESSAGE E000 WITH 'Spool Not Generated'(060).
ENDIF.
*&---------------------------------------------------------------------*
*& Form fetch_data
*&---------------------------------------------------------------------*
* To get the output data and mail
*----------------------------------------------------------------------*
FORM FETCH_DATA .
* To send the output to spool
PERFORM GENERATE_SPOOL.
ENDFORM. " fetch_data
*&---------------------------------------------------------------------*
*& Form generate_spool
*&---------------------------------------------------------------------*
* To send the output to spool
*----------------------------------------------------------------------*
FORM GENERATE_SPOOL .
DATA: L_PARAMS LIKE PRI_PARAMS,
L_DAYS(1) TYPE N VALUE 2,
L_COUNT(3) TYPE N VALUE 1,
L_VALID TYPE C,
L_VALID1 TYPE C,
L_PARAMS1 LIKE PRI_PARAMS.
DATA: L_DEVICE TYPE USR01-SPLD.
*Get the printer name for the user
SELECT SINGLE SPLD INTO L_DEVICE FROM USR01 WHERE BNAME = SY-UNAME.
IF L_DEVICE IS INITIAL.
L_DEVICE = 'LOCL'.
ENDIF.
* For report-1
IF P_C1 = 'X'.
* Setting the print parameters
CALL FUNCTION 'GET_PRINT_PARAMETERS'
EXPORTING
DESTINATION = L_DEVICE
COPIES = L_COUNT
LIST_NAME = SY-UNAME
LIST_TEXT = 'SUBMIT ... TO SAP-SPOOL'(008)
RELEASE = C_X
NEW_LIST_ID = C_X
EXPIRATION = L_DAYS
* LINE_SIZE = 255
* LINE_COUNT = 65
LAYOUT = p_set
SAP_COVER_PAGE = SPACE
COVER_PAGE = SPACE
RECEIVER = 'SAP*'(010)
DEPARTMENT = 'System'(011)
NO_DIALOG = C_X
IMPORTING
OUT_PARAMETERS = L_PARAMS
VALID = L_VALID.
IF L_VALID <> SPACE.
CLEAR V_SPOOL.
* Fetch the spool number b4 submit
PERFORM FETCH_RECENT_SPOOL USING V_SPOOL.
* Submitting the program to spool
SUBMIT RKAEP000 TO SAP-SPOOL
USING SELECTION-SET P_VARA1
SPOOL PARAMETERS L_PARAMS
WITHOUT SPOOL DYNPRO
AND RETURN.
CLEAR V_SPOOL1.
* Fetch the spool number after submit
PERFORM FETCH_RECENT_SPOOL USING V_SPOOL1.
IF V_SPOOL = V_SPOOL1.
F_SPOOL = C_X.
IF P_C2 IS INITIAL.
STOP.
ENDIF.
ELSE.
* Checking the format ( ABAP/OTF)
PERFORM FORMAT_CHECK TABLES S_EMAIL.
ENDIF.
ELSE.
MESSAGE E000 WITH 'Problem in print settings'(003).
STOP.
ENDIF.
ENDIF.
* For Report-2
IF P_C2 = 'X'.
* Setting the print parameters
CALL FUNCTION 'GET_PRINT_PARAMETERS'
EXPORTING
DESTINATION = L_DEVICE
COPIES = L_COUNT
LIST_NAME = SY-UNAME
LIST_TEXT = 'SUBMIT ... TO SAP-SPOOL'(008)
RELEASE = C_X
NEW_LIST_ID = C_X
EXPIRATION = L_DAYS
* LINE_SIZE = 200
* LINE_COUNT = 65
LAYOUT = p_set1
SAP_COVER_PAGE = SPACE
COVER_PAGE = SPACE
RECEIVER = 'SAP*'(010)
DEPARTMENT = 'System'(011)
NO_DIALOG = C_X
IMPORTING
OUT_PARAMETERS = L_PARAMS1
VALID = L_VALID1.
IF L_VALID1 <> SPACE.
CLEAR V_SPOOL.
* Fetch the spool number b4 submit
PERFORM FETCH_RECENT_SPOOL USING V_SPOOL.
* Submitting the program to spool
SUBMIT GP3DIEHXY88SNFJ0391V7KF9EK7050 TO SAP-SPOOL
USING SELECTION-SET P_VARA2
SPOOL PARAMETERS L_PARAMS1
WITHOUT SPOOL DYNPRO
AND RETURN.
CLEAR V_SPOOL1.
* Fetch the spool number after submit
PERFORM FETCH_RECENT_SPOOL USING V_SPOOL1.
IF V_SPOOL = V_SPOOL1.
MESSAGE E000 WITH 'Spool Not Generated'(060).
STOP.
ENDIF.
* Checking the format ( ABAP/OTF)
PERFORM FORMAT_CHECK TABLES S_EMAIL1.
ELSE.
MESSAGE E000 WITH 'Problem in print settings'(003).
STOP.
ENDIF.
ENDIF.
ENDFORM. " generate_spool
*&---------------------------------------------------------------------*
*& Form fetch_recent_spool
*&---------------------------------------------------------------------*
* Fetch the recent spool number generated
*----------------------------------------------------------------------*
FORM FETCH_RECENT_SPOOL USING P_V_SPOOL TYPE TSP01-RQIDENT .
DATA: L_USER LIKE TSP01-RQ2NAME.
CLEAR : V_RQIDENT,
V_RQCLIENT,
V_RQO1NAME.
L_USER = SY-UNAME.
* Get latest Spool No
SELECT SINGLE RQIDENT
RQCLIENT
RQO1NAME
INTO (V_RQIDENT , V_RQCLIENT , V_RQO1NAME)
FROM TSP01
WHERE RQCRETIME = ( SELECT MAX( RQCRETIME )
FROM TSP01
WHERE RQ2NAME EQ L_USER
AND RQFINAL EQ '.' ).
IF SY-SUBRC = 0 .
P_V_SPOOL = V_RQIDENT.
ENDIF.
ENDFORM. " fetch_recent_spool
*&---------------------------------------------------------------------*
*& Form format_check
*&---------------------------------------------------------------------*
* Checking the format ( ABAP/OTF)
*----------------------------------------------------------------------*
FORM FORMAT_CHECK TABLES P_S_EMAIL STRUCTURE S_EMAIL.
DATA : L_OBJTYPE LIKE RSTSTYPE-TYPE.
CALL FUNCTION 'RSTS_GET_ATTRIBUTES'
EXPORTING
AUTHORITY = 'SP01'(019)
CLIENT = V_RQCLIENT
NAME = V_RQO1NAME
PART = 1
IMPORTING
OBJTYPE = L_OBJTYPE
EXCEPTIONS
FB_ERROR = 1
FB_RSTS_OTHER = 2
NO_OBJECT = 3
NO_PERMISSION = 4.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF L_OBJTYPE(3) = C_OTF.
* Convert OTF Spool to PDF
PERFORM CONVERT_OTF2PDF TABLES P_S_EMAIL.
ELSE.
* Convert ABAP Spool to PDF
PERFORM CONVERT_ABAP2PDF TABLES P_S_EMAIL.
ENDIF.
ENDFORM. " format_check
*&---------------------------------------------------------------------*
*& Form convert_otf2pdf
*&---------------------------------------------------------------------*
* Convert OTF Spool to PDF
*----------------------------------------------------------------------*
FORM CONVERT_OTF2PDF TABLES P_P_S_EMAIL STRUCTURE S_EMAIL .
CLEAR IT_PDF.
REFRESH IT_PDF.
DATA : L_BYTECOUNT TYPE I.
* Fn. to get the PDF format
CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
EXPORTING
SRC_SPOOLID = V_RQIDENT
NO_DIALOG = 'X'
IMPORTING
PDF_BYTECOUNT = L_BYTECOUNT
TABLES
PDF = IT_PDF
EXCEPTIONS
ERR_NO_OTF_SPOOLJOB = 1
ERR_NO_SPOOLJOB = 2
ERR_NO_PERMISSION = 3
ERR_CONV_NOT_POSSIBLE = 4
ERR_BAD_DSTDEVICE = 5
USER_CANCELLED = 6
ERR_SPOOLERROR = 7
ERR_TEMSEERROR = 8
ERR_BTCJOB_OPEN_FAILED = 9
ERR_BTCJOB_SUBMIT_FAILED = 10
ERR_BTCJOB_CLOSE_FAILED = 11.
IF SY-SUBRC = 0.
* For page format
PERFORM PAGE_FORMAT TABLES P_P_S_EMAIL.
ELSE.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " convert_otf2pdf
*&---------------------------------------------------------------------*
*& Form convert_abap2pdf
*&---------------------------------------------------------------------*
* Convert ABAP Spool to PDF
*----------------------------------------------------------------------*
FORM CONVERT_ABAP2PDF TABLES P_P_S_EMAIL STRUCTURE S_EMAIL.
CLEAR IT_PDF.
REFRESH IT_PDF.
DATA : L_BYTECOUNT TYPE I.
* Fn. to convert to PDF format
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
SRC_SPOOLID = V_RQIDENT
NO_DIALOG = 'X'
IMPORTING
PDF_BYTECOUNT = L_BYTECOUNT
TABLES
PDF = IT_PDF
EXCEPTIONS
ERR_NO_ABAP_SPOOLJOB = 1
ERR_NO_SPOOLJOB = 2
ERR_NO_PERMISSION = 3
ERR_CONV_NOT_POSSIBLE = 4
ERR_BAD_DESTDEVICE = 5
USER_CANCELLED = 6
ERR_SPOOLERROR = 7
ERR_TEMSEERROR = 8
ERR_BTCJOB_OPEN_FAILED = 9
ERR_BTCJOB_SUBMIT_FAILED = 10
ERR_BTCJOB_CLOSE_FAILED = 11.
IF SY-SUBRC = 0.
* For page formatting
PERFORM PAGE_FORMAT TABLES P_P_S_EMAIL.
ELSE.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " convert_abap2pdf
*&---------------------------------------------------------------------*
*& Form send_mail
*&---------------------------------------------------------------------*
* For sending mail
*----------------------------------------------------------------------*
FORM SEND_MAIL TABLES MAIL STRUCTURE S_EMAIL .
* Structures and internal tables for the send data
DATA: OBJPACK LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE,
OBJHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE,
OBJBIN LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
OBJTXT LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE,
RECLIST LIKE SOMLRECI1 OCCURS 5 WITH HEADER LINE.
DATA: DOC_CHNG LIKE SODOCCHGI1,
TAB_LINES LIKE SY-TABIX.
* Data for the status output after sending
DATA: SENT_TO_ALL LIKE SONV-FLAG.
CLEAR: IT_RECLIST, IT_RECLIST[],
IT_OBJTXT , IT_OBJTXT[],
IT_OBJPACK, IT_OBJPACK[],
IT_OBJBIN , IT_OBJBIN[],X_DOC_CHNG.
LOOP AT IT_HTML.
OBJBIN-LINE = IT_HTML-LINE.
APPEND OBJBIN.
CLEAR OBJBIN.
ENDLOOP.
* Create the document which is to be sent
DOC_CHNG-OBJ_NAME = 'List'(012).
DOC_CHNG-OBJ_DESCR = 'Mail'(013).
* Heading
OBJTXT-LINE = 'Mail with pdf attachment'(014).
APPEND OBJTXT.
CLEAR OBJTXT.
* Size
DESCRIBE TABLE OBJTXT LINES TAB_LINES.
READ TABLE OBJTXT INDEX TAB_LINES.
DOC_CHNG-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJTXT ).
* Fill the fields of the packing_list for the main document:
CLEAR OBJPACK-TRANSF_BIN.
* The document needs no header (head_num = 0)
OBJPACK-HEAD_START = 1.
OBJPACK-HEAD_NUM = 0.
* Body
OBJPACK-BODY_START = 1.
OBJPACK-BODY_NUM = TAB_LINES.
OBJPACK-DOC_TYPE = 'RAW'(015).
APPEND OBJPACK.
* Create the attachment (the list itself)
DESCRIBE TABLE OBJBIN LINES TAB_LINES.
* Fill the fields of the packing_list for the attachment:
OBJPACK-TRANSF_BIN = 'X'.
* Header
OBJPACK-HEAD_START = 1.
OBJPACK-HEAD_NUM = 0.
* Body
OBJPACK-BODY_START = 1.
OBJPACK-BODY_NUM = TAB_LINES.
OBJPACK-DOC_TYPE = 'PDF'(016).
OBJPACK-OBJ_NAME = 'Attachment'(017).
OBJPACK-OBJ_DESCR = 'Mail with pdf Attachment'(018).
OBJPACK-DOC_SIZE = TAB_LINES * 255.
APPEND OBJPACK.
*-Fill the mail recipient list
LOOP AT MAIL.
RECLIST-RECEIVER = MAIL-LOW.
RECLIST-REC_TYPE = C_U.
APPEND RECLIST.
CLEAR: RECLIST,
MAIL.
ENDLOOP.
*-Send the document by calling the SAPoffice API1 module for sending
*-documents with attachments
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = DOC_CHNG
PUT_IN_OUTBOX = C_X
COMMIT_WORK = C_X
IMPORTING
SENT_TO_ALL = SENT_TO_ALL
TABLES
PACKING_LIST = OBJPACK
OBJECT_HEADER = OBJHEAD
CONTENTS_BIN = OBJBIN
CONTENTS_TXT = OBJTXT
RECEIVERS = RECLIST
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
OPERATION_NO_AUTHORIZATION = 4
OTHERS = 99.
CASE SY-SUBRC .
WHEN 0.
MESSAGE I000 WITH 'Mail has been sent successfully'(006).
WHEN OTHERS.
MESSAGE E000 WITH 'Problem in sending the mail'(023).
ENDCASE.
ENDFORM. " send_mail
*&---------------------------------------------------------------------*
*& Form page_format
*&---------------------------------------------------------------------*
* For page foramtting
*----------------------------------------------------------------------*
FORM PAGE_FORMAT TABLES EMAIL STRUCTURE S_EMAIL .
DATA : L_LINES TYPE I,
L_TEMP(500) TYPE C,
L_OFFSET TYPE P,
L_LINESLEN(2) TYPE P,
L_MIMELEN(2) TYPE P,
L_TABIX LIKE SY-TABIX.
CLEAR : IT_XI_PDF,
IT_XI_TEMP.
REFRESH : IT_XI_PDF,
IT_XI_TEMP.
IT_XI_PDF[] = IT_PDF[].
* Reformat the line to 255 characters wide (--code from SAP--)
CLEAR: L_TEMP, L_OFFSET, IT_XI_TEMP.
DESCRIBE TABLE IT_XI_PDF LINES L_LINES.
DESCRIBE FIELD IT_XI_PDF LENGTH L_LINESLEN IN CHARACTER MODE.
DESCRIBE FIELD IT_XI_TEMP LENGTH L_MIMELEN IN CHARACTER MODE.
LOOP AT IT_XI_PDF.
L_TABIX = SY-TABIX.
MOVE IT_XI_PDF TO L_TEMP+L_OFFSET.
IF L_TABIX = L_LINES.
L_LINESLEN = STRLEN( IT_XI_PDF ).
ENDIF.
L_OFFSET = L_OFFSET + L_LINESLEN.
IF L_OFFSET GE L_MIMELEN.
CLEAR IT_XI_TEMP.
IT_XI_TEMP = L_TEMP(L_MIMELEN).
APPEND IT_XI_TEMP.
SHIFT L_TEMP BY L_MIMELEN PLACES.
L_OFFSET = L_OFFSET - L_MIMELEN.
ENDIF.
IF L_TABIX = L_LINES.
IF L_OFFSET GT 0.
CLEAR IT_XI_TEMP.
IT_XI_TEMP = L_TEMP(L_OFFSET).
APPEND IT_XI_TEMP.
ENDIF.
ENDIF.
ENDLOOP.
CLEAR : IT_XI_MIME,
IT_XI_MIME[].
LOOP AT IT_XI_TEMP.
IT_XI_MIME(255) = IT_XI_TEMP-LINE.
APPEND IT_XI_MIME.
CLEAR IT_XI_MIME.
ENDLOOP.
* Final Data
CLEAR : IT_HTML,
IT_HTML[].
IT_HTML[] = IT_XI_MIME[].
* For sending mail
PERFORM SEND_MAIL TABLES EMAIL.
ENDFORM. " page_format
*&---------------------------------------------------------------------*
*& Form fetch_variants
*&---------------------------------------------------------------------*
* For fetching the variants available for the program
*----------------------------------------------------------------------*
FORM FETCH_VARIANTS .
DATA : L_PROGRAM LIKE RS38M-PROGRAMM VALUE 'RKAEP000',
L_VARA1 TYPE DFIES-FIELDNAME VALUE 'P_VARA1'.
CLEAR : IT_VARIANT1,
IT_VARIANT1[].
* Get variants
PERFORM GET_VARIANTS TABLES IT_VARIANT1
USING L_PROGRAM.
* F4 Help
IF NOT IT_VARIANT1[] IS INITIAL.
PERFORM GET_F4_HELP TABLES IT_VARIANT1
USING L_VARA1
CHANGING P_VARA1.
ELSE.
MESSAGE E000 WITH 'No variants available for report1'(054).
ENDIF.
ENDFORM. " fetch_variants
*&---------------------------------------------------------------------*
*& Form validation
*&---------------------------------------------------------------------*
* For Validation
*----------------------------------------------------------------------*
FORM VALIDATION .
DATA : L_PRO1 LIKE RS38M-PROGRAMM VALUE 'RKAEP000',
L_PRO2 LIKE RS38M-PROGRAMM VALUE 'GP3DIEHXY88SNFJ0391V7KF9EK7050',
L_C1,
L_C2.
* If both check-box are unchecked
IF P_C1 IS INITIAL
AND P_C2 IS INITIAL.
MESSAGE E000 WITH 'Check any one check-box'(049).
ENDIF.
* If checked without varaint
IF NOT P_C1 IS INITIAL AND P_VARA1 IS INITIAL.
MESSAGE E000 WITH 'Please give any one of the variant for report1'(055).
ENDIF.
* If checked without varaint
IF NOT P_C2 IS INITIAL AND P_VARA2 IS INITIAL.
MESSAGE E000 WITH 'Please give any one of the variant for report2'(061).
ENDIF.
* Reading the variant and fetching the mail-ids
IF P_C1 = C_X.
L_C1 = '1'.
CLEAR : S_EMAIL,
S_EMAIL[].
PERFORM READ_VARIANTS TABLES IT_MAILID
S_EMAIL
USING P_VARA1
L_PRO1
L_C1.
IF S_EMAIL[] IS INITIAL.
MESSAGE E000 WITH 'No Id available for given Cost report1'(066).
ELSE.
SORT S_EMAIL BY LOW.
DELETE ADJACENT DUPLICATES FROM S_EMAIL COMPARING LOW.
ENDIF.
ENDIF.
* Reading the variant and fetching the mail-ids
IF P_C2 = C_X.
CLEAR : S_EMAIL1,
S_EMAIL1[].
L_C2 = '2'.
PERFORM READ_VARIANTS TABLES IT_MAILID1
S_EMAIL1
USING P_VARA2
L_PRO2
L_C2.
IF S_EMAIL1[] IS INITIAL.
MESSAGE E000 WITH 'No Id available for given Cost report2'(067).
ELSE.
SORT S_EMAIL1 BY LOW.
DELETE ADJACENT DUPLICATES FROM S_EMAIL1 COMPARING LOW.
ENDIF.
ENDIF.
ENDFORM. " validation
*&---------------------------------------------------------------------*
*& Form GET_VARIANTS
*&---------------------------------------------------------------------*
* Fetching Variants
*----------------------------------------------------------------------*
FORM GET_VARIANTS TABLES P_IT_VARIANT STRUCTURE IT_VARIANT1
USING P_V_PROGRAM TYPE RS38M-PROGRAMM.
SELECT VARIANT
FROM VARID
INTO TABLE P_IT_VARIANT
WHERE REPORT = P_V_PROGRAM.
ENDFORM. " GET_VARIANTS
*&---------------------------------------------------------------------*
*& Form GET_F4_HELP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM GET_F4_HELP TABLES P_IT_VARIANT1 STRUCTURE IT_VARIANT1
USING P_L_VARA1 LIKE DFIES-FIELDNAME
CHANGING P_P_VARA LIKE P_VARA1.
* Fn. for Pop-Up
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = P_L_VARA1
VALUE_ORG = 'S'
DISPLAY = ' '
TABLES
VALUE_TAB = P_IT_VARIANT1
RETURN_TAB = IT_RETURN
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
IF SY-SUBRC = 0.
P_P_VARA = IT_RETURN-FIELDVAL.
ELSE.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " GET_F4_HELP
*&---------------------------------------------------------------------*
*& Form FETCH_VARIANTS1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FETCH_VARIANTS1 .
DATA : V_PROGRAM1 LIKE RS38M-PROGRAMM VALUE 'GP3DIEHXY88SNFJ0391V7KF9EK7050',
L_VARA2 TYPE DFIES-FIELDNAME VALUE 'P_VARA2'.
CLEAR : IT_VARIANT2,
IT_VARIANT2[].
* Get Variants
PERFORM GET_VARIANTS TABLES IT_VARIANT2
USING V_PROGRAM1.
* F4 Help
IF NOT IT_VARIANT2[] IS INITIAL.
PERFORM GET_F4_HELP TABLES IT_VARIANT2
USING L_VARA2
CHANGING P_VARA2.
ELSE.
MESSAGE E000 WITH 'No variants available for report2'(050).
ENDIF.
ENDFORM. " FETCH_VARIANTS1
*&---------------------------------------------------------------------*
*& Form read_variants
*&---------------------------------------------------------------------*
* Reading the variant and fetching the mail-ids
*----------------------------------------------------------------------*
FORM READ_VARIANTS TABLES P_IT_MAILID STRUCTURE IT_MAILID
P_S_EMAIL STRUCTURE S_EMAIL
USING P_P_VARA1 LIKE P_VARA1
P_L_PRO1 LIKE RS38M-PROGRAMM
P_L_C1 TYPE C.
DATA : L_TEMP(44),
IT_VALUTAB LIKE RSPARAMS OCCURS 0 WITH HEADER LINE.
RANGES : R_COCEN FOR CSKS-KOSTL.
* Function Module to get the variant contents
CALL FUNCTION 'RS_VARIANT_CONTENTS'
EXPORTING
REPORT = P_L_PRO1
VARIANT = P_P_VARA1
TABLES
VALUTAB = IT_VALUTAB
EXCEPTIONS
VARIANT_NON_EXISTENT = 1
VARIANT_OBSOLETE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CLEAR : R_COCEN,
R_COCEN[].
LOOP AT IT_VALUTAB WHERE SELNAME = 'KOSTL'
OR SELNAME = '_C-CCTR'.
* Getting the range of cost centers
IF IT_VALUTAB-OPTION = 'BT'.
R_COCEN-LOW = IT_VALUTAB-LOW.
* For Conversion Routine
PERFORM CONVERSION USING R_COCEN-LOW.
R_COCEN-HIGH = IT_VALUTAB-HIGH.
* For Conversion Routine
PERFORM CONVERSION USING R_COCEN-HIGH.
R_COCEN-OPTION = 'BT'.
R_COCEN-SIGN = 'I'.
APPEND R_COCEN.
CLEAR R_COCEN.
ENDIF.
* Getting the single cost centers
IF IT_VALUTAB-OPTION = 'EQ'.
R_COCEN-LOW = IT_VALUTAB-LOW.
* For Conversion Routine
PERFORM CONVERSION USING R_COCEN-LOW.
R_COCEN-OPTION = 'EQ'.
R_COCEN-SIGN = 'I'.
APPEND R_COCEN.
CLEAR R_COCEN.
ENDIF.
ENDLOOP.
* If no cost centers
IF NOT R_COCEN[] IS INITIAL.
SELECT KOKRS
KOSTL
DATBI
TELX1
FROM CSKS
INTO TABLE P_IT_MAILID
WHERE KOSTL IN R_COCEN.
IF P_IT_MAILID[] IS INITIAL.
IF P_L_C1 = '1'.
MESSAGE E000 WITH 'No IDs available for report1'(059).
ELSEIF P_L_C1 = '2'.
MESSAGE E000 WITH 'No IDs available for report2'(062).
ENDIF.
ENDIF.
* Deleting the blank entries
DELETE P_IT_MAILID WHERE TELX1 = SPACE.
CLEAR L_TEMP.
READ TABLE P_IT_MAILID INDEX 1.
L_TEMP = P_IT_MAILID-TELX1.
DATA : L_CHECK.
LOOP AT P_IT_MAILID WHERE TELX1 <> L_TEMP.
L_CHECK = C_X.
ENDLOOP.
* For checking the unique ids
IF L_CHECK = C_X.
IF P_L_C1 = '1'.
MESSAGE E000 WITH 'No unique mail-ids for report1'(058).
ELSEIF P_L_C1 = '2'.
MESSAGE E000 WITH 'No unique mail-ids for report2'(065).
ENDIF.
ENDIF.
* Populating the IDs for the cost centers
LOOP AT P_IT_MAILID.
SET LOCALE LANGUAGE SY-LANGU.
TRANSLATE P_IT_MAILID-TELX1 TO LOWER CASE.
SET LOCALE LANGUAGE SPACE .
CONCATENATE P_IT_MAILID-TELX1 '@allergan.com' INTO L_TEMP.
P_S_EMAIL-LOW = L_TEMP.
P_S_EMAIL-SIGN = 'I'.
P_S_EMAIL-OPTION = 'EQ'.
APPEND P_S_EMAIL.
CLEAR P_S_EMAIL.
ENDLOOP.
ELSE.
IF P_L_C1 = '1'.
MESSAGE E000 WITH 'No Cost Center Available for report1'(057).
ELSEIF P_L_C1 = '2'.
MESSAGE E000 WITH 'No Cost Center Available for report2'(063).
ENDIF.
ENDIF.
ENDFORM. " read_variants
*&---------------------------------------------------------------------*
*& Form CONVERSION
*&---------------------------------------------------------------------*
* For Conversion Routine
*----------------------------------------------------------------------*
FORM CONVERSION USING P_IT_VALUTAB_LOW TYPE C.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = P_IT_VALUTAB_LOW
IMPORTING
OUTPUT = P_IT_VALUTAB_LOW.
ENDFORM. " CONVERSION
hope this will help
regards
vijay
11-29-2005 10:51 PM
Hi Veni
First you need create a spool and covert that spool to PDF format and send as attachement .
Below is the sample code which works for me.
Hope this helps you.
Thanks,
Nethaji.
REPORT ZPDFMAIL.
TABLES : USR21,ADR6.
*-Internal Table
DATA: IT_OBJPACK LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.
DATA: IT_OBJBIN TYPE SOLIX_TAB .
DATA: IT_OBJHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
DATA: IT_OBJTXT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE.
DATA: IT_PDF LIKE TLINE OCCURS 100 WITH HEADER LINE.
DATA: IT_RECLIST LIKE SOMLRECI1 OCCURS 5 WITH HEADER LINE.
DATA: IT_EMAIL_HEADER LIKE SODOCCHGI1-OBJ_DESCR.
DATA: IT_DOC_CHNG LIKE SODOCCHGI1.
DATA: IT_CONTENT_OUT TYPE SOLIX.
DATA: BEGIN OF IT_CONTENT_IN,
LINE TYPE TLINE,
DUMMY TYPE TLINE,
END OF IT_CONTENT_IN.
*-Variables
DATA: W_NUMBYTES TYPE I,
W_PDFSPOOLID LIKE TSP01-RQIDENT,
W_JOBNAME LIKE TBTCJOB-JOBNAME,
W_JOBCOUNT LIKE TBTCJOB-JOBCOUNT,
W_SPOOLNO LIKE TSP01-RQIDENT,
W_TAB_LINES LIKE SY-TABIX,
W_LINE_WIDTH_SRC TYPE I,
W_POS_OUT TYPE I,
W_POS_IN TYPE I.
*-Type
TYPES TY_PDF_RAW TYPE X LENGTH 268.
*-Field symbol
FIELD-SYMBOLS <PDF_BIN> TYPE TY_PDF_RAW.
W_SPOOLNO = '0000020025'.
*-Convert OTF Spool to PDF
CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
EXPORTING
SRC_SPOOLID = W_SPOOLNO
NO_DIALOG = ' '
IMPORTING
PDF_BYTECOUNT = W_NUMBYTES
PDF_SPOOLID = W_PDFSPOOLID
BTC_JOBNAME = W_JOBNAME
BTC_JOBCOUNT = W_JOBCOUNT
TABLES
PDF = IT_PDF
EXCEPTIONS
ERR_NO_OTF_SPOOLJOB = 1
ERR_NO_SPOOLJOB = 2
ERR_NO_PERMISSION = 3
ERR_CONV_NOT_POSSIBLE = 4
ERR_BAD_DSTDEVICE = 5
USER_CANCELLED = 6
ERR_SPOOLERROR = 7
ERR_TEMSEERROR = 8
ERR_BTCJOB_OPEN_FAILED = 9
ERR_BTCJOB_SUBMIT_FAILED = 10
ERR_BTCJOB_CLOSE_FAILED = 11.
IF SY-SUBRC NE 0.
ENDIF.
*-Get Person number and Address number for SY_UNAME
CLEAR USR21.
SELECT SINGLE PERSNUMBER ADDRNUMBER FROM USR21
INTO (USR21-PERSNUMBER,USR21-ADDRNUMBER)
WHERE BNAME = SY-UNAME.
IF SY-SUBRC = 0.
CLEAR ADR6.
SELECT SINGLE SMTP_ADDR FROM ADR6
INTO ADR6-SMTP_ADDR
WHERE ADDRNUMBER = USR21-ADDRNUMBER
AND PERSNUMBER = USR21-PERSNUMBER.
ENDIF.
IT_RECLIST-RECEIVER = SY-UNAME.
IT_RECLIST-REC_TYPE = 'B'.
APPEND IT_RECLIST.
IT_RECLIST-RECEIVER = ADR6-SMTP_ADDR.
IT_RECLIST-REC_TYPE = 'U'.
APPEND IT_RECLIST.
*-Populate Mail Body Text
IT_OBJTXT = 'Mail with Quotation PDF attachment'.
APPEND IT_OBJTXT.
IT_OBJTXT = 'Please double click the attachment to verify'.
APPEND IT_OBJTXT.
*-Email Header and Subject
IT_EMAIL_HEADER = 'Quotation PDF'.
IT_DOC_CHNG-OBJ_NAME = IT_EMAIL_HEADER.
IT_DOC_CHNG-OBJ_DESCR = IT_EMAIL_HEADER.
DESCRIBE TABLE IT_OBJTXT LINES W_TAB_LINES.
READ TABLE IT_OBJTXT INDEX W_TAB_LINES.
IT_DOC_CHNG-DOC_SIZE = ( W_TAB_LINES - 1 ) * 255 + STRLEN( IT_OBJTXT ).
*--Fill object package table
CLEAR IT_OBJPACK-TRANSF_BIN.
IT_OBJPACK-HEAD_START = 1.
IT_OBJPACK-HEAD_NUM = 0.
IT_OBJPACK-BODY_START = 1.
IT_OBJPACK-BODY_NUM = W_TAB_LINES.
IT_OBJPACK-DOC_TYPE = 'RAW'.
APPEND IT_OBJPACK.
Cast to binary type and adjust table line length
DESCRIBE FIELD IT_CONTENT_IN-LINE LENGTH W_LINE_WIDTH_SRC IN BYTE MODE.
REFRESH IT_OBJBIN.
CLEAR IT_CONTENT_OUT.
W_POS_OUT = 0.
*-Populate it_OBJBIN
LOOP AT IT_PDF INTO IT_CONTENT_IN-LINE.
ASSIGN IT_CONTENT_IN TO <PDF_BIN> CASTING.
MOVE <PDF_BIN> TO IT_CONTENT_OUT-LINE+W_POS_OUT.
ADD W_LINE_WIDTH_SRC TO W_POS_OUT.
WHILE W_POS_OUT >= 255.
APPEND IT_CONTENT_OUT TO IT_OBJBIN.
CLEAR IT_CONTENT_OUT.
SUBTRACT 255 FROM W_POS_OUT.
IF W_POS_OUT > 0.
W_POS_IN = W_LINE_WIDTH_SRC - W_POS_OUT.
MOVE <PDF_BIN>+W_POS_IN TO IT_CONTENT_OUT-LINE.
ENDIF.
ENDWHILE.
ENDLOOP.
IF W_POS_OUT > 0.
APPEND IT_CONTENT_OUT TO IT_OBJBIN.
ENDIF.
DESCRIBE TABLE IT_OBJBIN LINES W_TAB_LINES.
IT_OBJHEAD = 'Quotation PDF'.
APPEND IT_OBJHEAD.
Settings for PDF file
IT_OBJPACK-TRANSF_BIN = 'X'.
IT_OBJPACK-HEAD_START = 1.
IT_OBJPACK-HEAD_NUM = 1.
IT_OBJPACK-BODY_START = 1.
IT_OBJPACK-BODY_NUM = W_TAB_LINES.
IT_OBJPACK-DOC_TYPE = 'PDF'.
IT_OBJPACK-OBJ_NAME = IT_EMAIL_HEADER.
IT_OBJPACK-OBJ_DESCR = IT_EMAIL_HEADER.
IT_OBJPACK-DOC_SIZE = W_TAB_LINES * 255.
APPEND IT_OBJPACK.
*-Send Mail
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = IT_DOC_CHNG
PUT_IN_OUTBOX = 'X'
COMMIT_WORK = 'X'
TABLES
PACKING_LIST = IT_OBJPACK
OBJECT_HEADER = IT_OBJHEAD
CONTENTS_HEX = IT_OBJBIN
CONTENTS_TXT = IT_OBJTXT
RECEIVERS = IT_RECLIST
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
OPERATION_NO_AUTHORIZATION = 4
OTHERS = 99.
IF SY-SUBRC NE 0.
ENDIF.
11-29-2005 11:00 PM
Hi Veni
First you need create a spool and covert that spool to PDF format and send as attachement .
Below is the sample code which works for me.
Hope this helps you.
Thanks,
Nethaji.
REPORT ZPDFMAIL.
TABLES : USR21,ADR6.
*-Internal Table
DATA: IT_OBJPACK LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.
DATA: IT_OBJBIN TYPE SOLIX_TAB .
DATA: IT_OBJHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
DATA: IT_OBJTXT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE.
DATA: IT_PDF LIKE TLINE OCCURS 100 WITH HEADER LINE.
DATA: IT_RECLIST LIKE SOMLRECI1 OCCURS 5 WITH HEADER LINE.
DATA: IT_EMAIL_HEADER LIKE SODOCCHGI1-OBJ_DESCR.
DATA: IT_DOC_CHNG LIKE SODOCCHGI1.
DATA: IT_CONTENT_OUT TYPE SOLIX.
DATA: BEGIN OF IT_CONTENT_IN,
LINE TYPE TLINE,
DUMMY TYPE TLINE,
END OF IT_CONTENT_IN.
*-Variables
DATA: W_NUMBYTES TYPE I,
W_PDFSPOOLID LIKE TSP01-RQIDENT,
W_JOBNAME LIKE TBTCJOB-JOBNAME,
W_JOBCOUNT LIKE TBTCJOB-JOBCOUNT,
W_SPOOLNO LIKE TSP01-RQIDENT,
W_TAB_LINES LIKE SY-TABIX,
W_LINE_WIDTH_SRC TYPE I,
W_POS_OUT TYPE I,
W_POS_IN TYPE I.
*-Type
TYPES TY_PDF_RAW TYPE X LENGTH 268.
*-Field symbol
FIELD-SYMBOLS <PDF_BIN> TYPE TY_PDF_RAW.
W_SPOOLNO = '0000020025'.
*-Convert OTF Spool to PDF
CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
EXPORTING
SRC_SPOOLID = W_SPOOLNO
NO_DIALOG = ' '
IMPORTING
PDF_BYTECOUNT = W_NUMBYTES
PDF_SPOOLID = W_PDFSPOOLID
BTC_JOBNAME = W_JOBNAME
BTC_JOBCOUNT = W_JOBCOUNT
TABLES
PDF = IT_PDF
EXCEPTIONS
ERR_NO_OTF_SPOOLJOB = 1
ERR_NO_SPOOLJOB = 2
ERR_NO_PERMISSION = 3
ERR_CONV_NOT_POSSIBLE = 4
ERR_BAD_DSTDEVICE = 5
USER_CANCELLED = 6
ERR_SPOOLERROR = 7
ERR_TEMSEERROR = 8
ERR_BTCJOB_OPEN_FAILED = 9
ERR_BTCJOB_SUBMIT_FAILED = 10
ERR_BTCJOB_CLOSE_FAILED = 11.
IF SY-SUBRC NE 0.
ENDIF.
*-Get Person number and Address number for SY_UNAME
CLEAR USR21.
SELECT SINGLE PERSNUMBER ADDRNUMBER FROM USR21
INTO (USR21-PERSNUMBER,USR21-ADDRNUMBER)
WHERE BNAME = SY-UNAME.
IF SY-SUBRC = 0.
CLEAR ADR6.
SELECT SINGLE SMTP_ADDR FROM ADR6
INTO ADR6-SMTP_ADDR
WHERE ADDRNUMBER = USR21-ADDRNUMBER
AND PERSNUMBER = USR21-PERSNUMBER.
ENDIF.
IT_RECLIST-RECEIVER = SY-UNAME.
IT_RECLIST-REC_TYPE = 'B'.
APPEND IT_RECLIST.
IT_RECLIST-RECEIVER = ADR6-SMTP_ADDR.
IT_RECLIST-REC_TYPE = 'U'.
APPEND IT_RECLIST.
*-Populate Mail Body Text
IT_OBJTXT = 'Mail with Quotation PDF attachment'.
APPEND IT_OBJTXT.
IT_OBJTXT = 'Please double click the attachment to verify'.
APPEND IT_OBJTXT.
*-Email Header and Subject
IT_EMAIL_HEADER = 'Quotation PDF'.
IT_DOC_CHNG-OBJ_NAME = IT_EMAIL_HEADER.
IT_DOC_CHNG-OBJ_DESCR = IT_EMAIL_HEADER.
DESCRIBE TABLE IT_OBJTXT LINES W_TAB_LINES.
READ TABLE IT_OBJTXT INDEX W_TAB_LINES.
IT_DOC_CHNG-DOC_SIZE = ( W_TAB_LINES - 1 ) * 255 + STRLEN( IT_OBJTXT ).
*--Fill object package table
CLEAR IT_OBJPACK-TRANSF_BIN.
IT_OBJPACK-HEAD_START = 1.
IT_OBJPACK-HEAD_NUM = 0.
IT_OBJPACK-BODY_START = 1.
IT_OBJPACK-BODY_NUM = W_TAB_LINES.
IT_OBJPACK-DOC_TYPE = 'RAW'.
APPEND IT_OBJPACK.
Cast to binary type and adjust table line length
DESCRIBE FIELD IT_CONTENT_IN-LINE LENGTH W_LINE_WIDTH_SRC IN BYTE MODE.
REFRESH IT_OBJBIN.
CLEAR IT_CONTENT_OUT.
W_POS_OUT = 0.
*-Populate it_OBJBIN
LOOP AT IT_PDF INTO IT_CONTENT_IN-LINE.
ASSIGN IT_CONTENT_IN TO <PDF_BIN> CASTING.
MOVE <PDF_BIN> TO IT_CONTENT_OUT-LINE+W_POS_OUT.
ADD W_LINE_WIDTH_SRC TO W_POS_OUT.
WHILE W_POS_OUT >= 255.
APPEND IT_CONTENT_OUT TO IT_OBJBIN.
CLEAR IT_CONTENT_OUT.
SUBTRACT 255 FROM W_POS_OUT.
IF W_POS_OUT > 0.
W_POS_IN = W_LINE_WIDTH_SRC - W_POS_OUT.
MOVE <PDF_BIN>+W_POS_IN TO IT_CONTENT_OUT-LINE.
ENDIF.
ENDWHILE.
ENDLOOP.
IF W_POS_OUT > 0.
APPEND IT_CONTENT_OUT TO IT_OBJBIN.
ENDIF.
DESCRIBE TABLE IT_OBJBIN LINES W_TAB_LINES.
IT_OBJHEAD = 'Quotation PDF'.
APPEND IT_OBJHEAD.
Settings for PDF file
IT_OBJPACK-TRANSF_BIN = 'X'.
IT_OBJPACK-HEAD_START = 1.
IT_OBJPACK-HEAD_NUM = 1.
IT_OBJPACK-BODY_START = 1.
IT_OBJPACK-BODY_NUM = W_TAB_LINES.
IT_OBJPACK-DOC_TYPE = 'PDF'.
IT_OBJPACK-OBJ_NAME = IT_EMAIL_HEADER.
IT_OBJPACK-OBJ_DESCR = IT_EMAIL_HEADER.
IT_OBJPACK-DOC_SIZE = W_TAB_LINES * 255.
APPEND IT_OBJPACK.
*-Send Mail
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = IT_DOC_CHNG
PUT_IN_OUTBOX = 'X'
COMMIT_WORK = 'X'
TABLES
PACKING_LIST = IT_OBJPACK
OBJECT_HEADER = IT_OBJHEAD
CONTENTS_HEX = IT_OBJBIN
CONTENTS_TXT = IT_OBJTXT
RECEIVERS = IT_RECLIST
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
OPERATION_NO_AUTHORIZATION = 4
OTHERS = 99.
IF SY-SUBRC NE 0.
ENDIF.
11-30-2005 12:09 AM
please have a look at the abaps BCS_EXAMPLE_1 - BCS_EXAMPLE_5 which give examples of how to send emails and/or faxes with and without attachments.
11-30-2005 12:23 AM
hi neil,
How do I check these examples. Please let me know.
Thanks
Veni.
11-30-2005 1:00 AM
Hi,
just look at them in SE38 or SE80. They are quite easy to follow.
11-30-2005 4:02 AM
hi
this is just a function to send any attachment
FUNCTION zsend_mail_attachment.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(V_FILE_PATH) TYPE STRING OPTIONAL
*" REFERENCE(V_SUBJECT) TYPE SO_OBJ_DES
*" TABLES
*" IT_RECEIVERS STRUCTURE SOMLRECI1
*" IT_MESSAGE STRUCTURE SOLISTI1
*"----------------------------------------------------------------------
DATA: gd_cnt TYPE i,
gd_sent_all(1) TYPE c,
gd_doc_data LIKE sodocchgi1,
gd_error TYPE sy-subrc.
DATA objbin LIKE solisti1 OCCURS 0 WITH HEADER LINE.
DATA : it_packing_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE.
* Binary store for File
DATA : BEGIN OF it_file OCCURS 0,
row(255),
END OF it_file.
* splitting of the filepath
DATA : BEGIN OF i_split OCCURS 0,
row(50),
END OF i_split.
DATA tab_lines LIKE sy-tabix.
REFRESH : it_file, objbin, it_packing_list, i_split.
CLEAR : it_file, objbin, it_packing_list, i_split.
DESCRIBE TABLE it_message LINES tab_lines.
READ TABLE it_message INDEX tab_lines.
gd_doc_data-doc_size = ( tab_lines - 1 ) * 255 + STRLEN( it_message ).
gd_doc_data-obj_langu = sy-langu.
gd_doc_data-obj_name = 'SENDFILE'.
gd_doc_data-obj_descr = v_subject.
gd_doc_data-sensitivty = 'O'.
CLEAR it_packing_list.
it_packing_list-head_start = 1.
it_packing_list-head_num = 0.
it_packing_list-body_start = 1.
it_packing_list-doc_type = 'RAW'.
it_packing_list-body_num = tab_lines.
APPEND it_packing_list.
IF v_file_path IS NOT INITIAL.
DATA : v_len TYPE i,
v_index LIKE sy-index,
v_doc_type TYPE so_obj_tp,
v_filename TYPE so_obj_des .
v_len = STRLEN( v_file_path ) - 3.
v_doc_type = v_file_path+v_len(3) .
TRANSLATE v_doc_type TO UPPER CASE .
SPLIT v_file_path AT '' INTO TABLE i_split .
DESCRIBE TABLE i_split LINES v_index .
READ TABLE i_split INDEX v_index .
v_filename = i_split-row .
v_len = STRLEN( v_filename ) - 4.
v_filename = v_filename(v_len) .
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = v_file_path
filetype = 'BIN'
TABLES
data_tab = it_file.
LOOP AT it_file.
MOVE it_file-row TO objbin-line.
APPEND objbin.
ENDLOOP.
CLEAR it_packing_list.
DESCRIBE TABLE objbin LINES tab_lines.
it_packing_list-transf_bin = 'X'.
it_packing_list-head_start = 1.
it_packing_list-head_num = 1.
it_packing_list-body_start = 1.
it_packing_list-doc_type = v_doc_type.
it_packing_list-body_num = tab_lines.
it_packing_list-doc_size = tab_lines * 255.
it_packing_list-obj_descr = v_filename.
APPEND it_packing_list.
ENDIF.
* it_receivers-receiver = 'abhiaries@yahoo.com'.
* it_receivers-rec_type = 'U'.
* it_receivers-com_type = 'INT'.
* APPEND it_receivers .
* Call the FM to post the message to SAPMAIL
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = gd_doc_data
put_in_outbox = 'X'
commit_work = 'X'
* IMPORTING
* sent_to_all = gd_sent_all
TABLES
packing_list = it_packing_list
contents_txt = it_message
contents_bin = objbin
receivers = it_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.
ENDFUNCTION.
i hope this will solve ur problem
Reward points if solved.
Abhishek Suppal