on 11-17-2010 9:25 AM
Hi ,
I have created smartform and i converted that to PDF ,
if i send mail after converting i got mail also but attached document is giving error like
could not be opende or file damaged
if i download that to local system using
GUI_DOWNLOAD
that is working fine and i got PDF with all data,
can some please suggest me how to overcome this issue.
Thanks
Surendra
DATA : I_OTF TYPE ITCOO OCCURS 0 WITH HEADER LINE,
I_TLINE TYPE TABLE OF TLINE WITH HEADER LINE,
V_LEN_IN LIKE SOOD-OBJLEN.
DATA : WA_BUFFER TYPE STRING,
WA_OBJHEAD TYPE SOLI_TAB,
V_LINES_TXT TYPE I,
V_LINES_BIN TYPE I,
WA_DOC_CHNG TYPE SODOCCHGI1,
I_RECORD LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
I_RECLIST LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE,
I_OBJPACK LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE,
I_OBJTXT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
I_OBJBIN LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE.
DATA: wa_tdformat TYPE STRING,
wa_tdline TYPE STRING,
length TYPE I.
CLEAR : V_LEN_IN, I_TLINE. REFRESH I_TLINE[].
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = 'PDF'
MAX_LINEWIDTH = 132
IMPORTING
BIN_FILESIZE = V_LEN_IN
TABLES
OTF = I_OTF
LINES = I_TLINE
EXCEPTIONS
ERR_MAX_LINEWIDTH = 1
ERR_FORMAT = 2
ERR_CONV_NOT_POSSIBLE = 3
OTHERS = 4.
LOOP AT I_TLINE.
CLEAR: wa_tdformat, length.
wa_tdformat = I_TLINE-TDFORMAT.
length = STRLEN( wa_tdformat ).
IF length < 2.
CONCATENATE wa_tdformat 'hold' INTO wa_tdformat.
ENDIF.
WHILE wa_tdformat CA ' '.
REPLACE ' ' WITH 'hold' INTO wa_tdformat.
ENDWHILE.
CLEAR: wa_tdline, length.
wa_tdline = I_TLINE-TDLINE.
length = STRLEN( wa_tdline ).
IF length < 132.
CONCATENATE wa_tdline 'hold' INTO wa_tdline.
ENDIF.
WHILE wa_tdline CA ' '.
REPLACE ' ' WITH 'hold' INTO wa_tdline.
ENDWHILE.
CONCATENATE wa_buffer wa_tdformat wa_tdline INTO wa_buffer.
ENDLOOP.
WHILE wa_buffer CS 'hold'.
REPLACE 'hold' WITH ' ' INTO wa_buffer.
ENDWHILE.
DO.
I_RECORD = WA_BUFFER.
APPEND I_RECORD.
SHIFT WA_BUFFER LEFT BY 255 PLACES.
IF WA_BUFFER IS INITIAL.
EXIT.
ENDIF.
ENDDO.
Attachment
REFRESH: I_RECLIST,
I_OBJTXT,
I_OBJBIN,
I_OBJPACK.
CLEAR WA_OBJHEAD.
I_OBJBIN[] = I_RECORD[].
Create Message Body Title and Description
I_OBJTXT = 'Dear Associate,'. APPEND I_OBJTXT.
I_OBJTXT = 'Please find the attached'. APPEND I_OBJTXT.
I_OBJTXT = 'Best Regards'. APPEND I_OBJTXT.
I_OBJTXT = 'Munish Garg'. APPEND I_OBJTXT.
DESCRIBE TABLE I_OBJTXT LINES V_LINES_TXT.
READ TABLE I_OBJTXT INDEX V_LINES_TXT.
WA_DOC_CHNG-OBJ_NAME = 'ATTACHMENT'.
WA_DOC_CHNG-EXPIRY_DAT = SY-DATUM + 10.
WA_DOC_CHNG-OBJ_DESCR = subject.
WA_DOC_CHNG-DOC_SIZE = V_LINES_TXT * 255.
Main Text
CLEAR I_OBJPACK-TRANSF_BIN.
I_OBJPACK-HEAD_START = 1.
I_OBJPACK-HEAD_NUM = 1.
I_OBJPACK-BODY_START = 1.
I_OBJPACK-BODY_NUM = V_LINES_TXT.
I_OBJPACK-DOC_TYPE = 'TXT'.
APPEND I_OBJPACK.
Attachment (pdf-Attachment)
I_OBJPACK-TRANSF_BIN = 'X'.
I_OBJPACK-HEAD_START = 1.
I_OBJPACK-HEAD_NUM = 1.
I_OBJPACK-BODY_START = 1.
DESCRIBE TABLE I_OBJBIN LINES V_LINES_BIN.
READ TABLE I_OBJBIN INDEX V_LINES_BIN.
I_OBJPACK-DOC_SIZE = V_LINES_BIN * 255 .
I_OBJPACK-BODY_NUM = V_LINES_BIN.
I_OBJPACK-DOC_TYPE = 'PDF'.
I_OBJPACK-OBJ_NAME = 'test mail'.
I_OBJPACK-OBJ_DESCR = att_name.
APPEND I_OBJPACK.
CLEAR I_RECLIST.
I_RECLIST-RECEIVER = <Email Address>
I_RECLIST-REC_TYPE = 'U'.
APPEND I_RECLIST.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = WA_DOC_CHNG
*PUT_IN_OUTBOX = 'X'
COMMIT_WORK = 'X'
TABLES
PACKING_LIST = I_OBJPACK
OBJECT_HEADER = WA_OBJHEAD
CONTENTS_BIN = I_OBJBIN
CONTENTS_TXT = I_OBJTXT
RECEIVERS = I_RECLIST
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.
WRITE:/ 'Error When Sending the File', SY-SUBRC.
ELSE.
WRITE:/ 'Mail sent'.
ENDIF.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Answerd by Own
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Surendra,
I guess you use function module CONVERT_OTF to convert the OTF data returned from the smartforms processing to PDF.
I guess you do not use the BIN_FILE parameter when calling CONVERT_OTF so therefore the PDF data is returned via table LINES. There can be problems with this in a Unicode system.
e.g TRANSLATE commands can destroy the PDF data when it is returned this way.
Use parameter BIN_FILE when calling CONVERT_OTF so the PDF data is returned as type XSTRING and use the the example BCS_EXAMPLE_8, which is contained in SAP Note 1324547 to handle the PDF data returned.
Regards,
Aidan
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi ,
Can Some help me in this issue
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
HI ,
Try following code . Surely it will work.
DATA: it_otf TYPE STANDARD TABLE OF itcoo,
it_docs TYPE STANDARD TABLE OF docs,
it_lines TYPE STANDARD TABLE OF tline.
Declaration of local variables.
DATA:
st_job_output_info TYPE ssfcrescl,
st_document_output_info TYPE ssfcrespd,
st_job_output_options TYPE ssfcresop,
st_output_options TYPE ssfcompop,
st_control_parameters TYPE ssfctrlop,
st_control_parameters1 TYPE ssfctrlop,
v_len_in TYPE so_obj_len,
v_language TYPE sflangu VALUE 'E',
v_e_devtype TYPE rspoptype,
v_bin_filesize TYPE i,
v_name TYPE string,
v_path TYPE string,
v_fullpath TYPE string,
v_filter TYPE string,
v_uact TYPE i,
v_guiobj TYPE REF TO cl_gui_frontend_services,
v_filename TYPE string,
v_fm_name TYPE rs38l_fnam.
CONSTANTS c_formname TYPE tdsfname VALUE 'YHRS_PAYSLIP_LOGO'.
*
************************************************************************
DATA : objbin LIKE solisti1 OCCURS 10 WITH HEADER LINE,
docdata LIKE sodocchgi1,
objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE,
OBJTXT TYPE STANDARD TABLE OF solisti1,
objpack LIKE sopcklsti1 OCCURS 1 WITH HEADER LINE,
reclist LIKE somlreci1 OCCURS 1 WITH HEADER LINE,
objhead LIKE solisti1 OCCURS 1 WITH HEADER LINE.
DATA DOCDATA TYPE SODOCCHGI1 ." Data of an object which can be changed
DATA : it_otf TYPE STANDARD TABLE OF itcoo ,
it_tline TYPE STANDARD TABLE OF tline ,
it_record TYPE STANDARD TABLE OF solisti1,
it_objpack TYPE STANDARD TABLE OF sopcklsti1,
it_objtxt TYPE STANDARD TABLE OF solisti1 ,
it_objbin TYPE STANDARD TABLE OF solisti1 ,
it_reclist TYPE STANDARD TABLE OF somlreci1 ,
it_tdline TYPE STANDARD TABLE OF tline,
*Work Area declarations
wa_objhead TYPE soli_tab,
wa_buffer TYPE string, "To convert from 132 to 255
wa_it_objtxt TYPE solisti1,
wa_it_objpack TYPE sopcklsti1,
wa_it_record TYPE solisti1,
wa_it_reclist TYPE somlreci1,
wa_it_tline TYPE tline,
wa_tdline TYPE tline,
*variable declaration
v_lines_bin TYPE i,
v_lines_txt TYPE i,
v_len_in TYPE sood-objlen, "#EC NEEDED
v_mailaddr TYPE adr6-smtp_addr.
*constant declaration
CONSTANTS : c_msgtype TYPE c VALUE 'E', " for declaring masseage type as error msg
c_X TYPE c VALUE 'X',
c_U TYPE c VALUE 'U'.
CALL FUNCTION 'SSF_GET_DEVICE_TYPE'
EXPORTING
i_language = v_language
i_application = 'SAPDEFAULT'
IMPORTING
e_devtype = v_e_devtype.
st_output_options-tdprinter = v_e_devtype.
st_control_parameters-no_dialog = 'X'.
st_control_parameters-getotf = 'X'.
*
...........................CALL SMARTFORM............................
CALL FUNCTION v_fm_name
EXPORTING
control_parameters = st_control_parameters
output_options = st_output_options
IMPORTING
document_output_info = st_document_output_info
job_output_info = st_job_output_info
job_output_options = st_job_output_options
TABLES
P_FORM = P_FORM
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
it_otf[] = st_job_output_info-otfdata[].
*calling function module to convert otf format of smartform to pdf format
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format ='PDF'
max_linewidth = 132
ARCHIVE_INDEX =
COPYNUMBER =
ASCII_BIDI_VIS2LOG =
PDF_DELETE_OTFTAB =
IMPORTING
bin_filesize = v_len_in
BIN_FILE =
TABLES
otf = it_otf
lines = it_tline
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
err_bad_otf = 4
OTHERS = 5 .
IF sy-subrc NE 0.
sy-msgid = text-002. "
sy-msgty = c_msgtype. " E
sy-msgno = 040.
sy-msgv1 = ' '.
sy-msgv2 = ' '.
sy-msgv3 = ' '.
sy-msgv4 = ' '.
EXIT.
ELSE.
Convert PDF from 132 to 255.
LOOP AT it_tline INTO wa_it_tline.
TRANSLATE wa_it_tline USING ' ~'. " Replacing space by ~
CONCATENATE wa_buffer wa_it_tline INTO wa_buffer.
ENDLOOP.
TRANSLATE wa_buffer USING '~ '. " Replacing space by ~
DO.
wa_it_record = wa_buffer.
APPEND wa_it_record TO it_record. " Appending 255 characters as a record
SHIFT wa_buffer LEFT BY 255 PLACES.
IF wa_buffer IS INITIAL.
EXIT.
ENDIF.
ENDDO.
REFRESH:it_objbin.
CLEAR wa_objhead.
Object with PDF.
it_objbin[] = it_record[].
DESCRIBE TABLE it_objbin LINES v_lines_bin.
** Pack to main body as RAW.
CLEAR wa_it_objpack-transf_bin. "Obj. to be transported not in binary form
wa_it_objpack-head_start = 1. "Start line of object header in transport packet
wa_it_objpack-head_num = 0. "Number of lines of an object header in object packet
wa_it_objpack-body_start = 1. "Start line of object contents in an object packet
wa_it_objpack-body_num = v_lines_bin. "Number of lines of the object contents in an object packet
Code for document class
wa_it_objpack-doc_type = 'RAW'. "RAW
APPEND wa_it_objpack TO it_objpack.
Packing as PDF.
wa_it_objpack-transf_bin = c_X. " X
wa_it_objpack-head_start = 1.
wa_it_objpack-head_num = 1.
wa_it_objpack-body_start = 1.
wa_it_objpack-body_num = v_lines_bin.
wa_it_objpack-doc_type = 'PDF'.
wa_it_objpack-obj_name = 'ATTACHMENT'. "SmartForm
*READ TABLE ITAB WITH KEY
CONCATENATE 'Pay slip_' itab-ename+0(28) '.pdf' INTO wa_it_objpack-obj_descr.
wa_it_objpack-doc_size = v_lines_bin * 255.
APPEND wa_it_objpack TO it_objpack.
Document information.
CLEAR:pa0105-usrid_long,WA_IT_reclist .
SELECT SINGLE * FROM pa0105
WHERE pernr EQ itab-pernr
AND subty EQ '0010'
AND usrid_long NE ''
AND pa0105~endda GE '99991231'.
WA_IT_reclist-receiver = pa0105-usrid_long.
TRANSLATE reclist-receiver TO LOWER CASE.
itab-usrid_long = reclist-receiver.
wa_it_reclist-rec_type = 'U'.. "U -> Internet address
APPEND wa_it_reclist TO it_reclist.
docdata-obj_name = 'Pay Slip'.
docdata-obj_langu = sy-langu.
objtxt = 'Pay Slip.'.
APPEND objtxt.
objtxt = docdata-obj_descr.
APPEND objtxt.
objtxt = ' '.
APPEND objtxt.
objtxt = 'Have a nice day.'.
APPEND objtxt.
docdata-doc_size = ( 7 - 1 ) * 255 + STRLEN( objtxt ).
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = DOCDATA
put_in_outbox = 'X'
COMMIT_WORK = 'X'
IMPORTING
SENT_TO_ALL =
NEW_OBJECT_ID =
TABLES
packing_list = it_objpack
object_header = wa_objhead
contents_bin = it_objbin
contents_txt = objtxt "it_objtxt
CONTENTS_HEX = hexa
OBJECT_PARA =
OBJECT_PARB =
receivers = it_reclist
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error
DATA: send_request TYPE REF TO cl_bcs.
DATA: text TYPE bcsy_text.
DATA: binary_content TYPE solix_tab.
DATA: document TYPE REF TO cl_document_bcs.
DATA: sender TYPE REF TO cl_sapuser_bcs.
DATA: recipient TYPE REF TO if_recipient_bcs.
DATA: bcs_exception TYPE REF TO cx_bcs.
DATA: sent_to_all TYPE os_boolean.
DATA:lv_fax TYPE ad_fxnmbr,
lv_filename_cl TYPE sood-objdes.
* Convert the OTF file format ino the PDF format.
CALL FUNCTION 'CONVERT_OTF_2_PDF'
IMPORTING
bin_filesize = lwa_bin_filesize
TABLES
otf = lt_otf
doctab_archive = lt_doctab_archive
lines = lt_pdf_lines
EXCEPTIONS
err_conv_not_possible = 1
err_otf_mc_noendmarker = 2
OTHERS = 3.
* get the pdf data into the attachment table .
CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE'
EXPORTING
line_width_dst = 255
TABLES
content_in = lt_pdf_lines
content_out = lt_objbin
EXCEPTIONS
err_line_width_src_too_long = 1
err_line_width_dst_too_long = 2
err_conv_failed = 3
OTHERS = 4.
* Refresh the local tables and workareas.
REFRESH: lt_reclist,
lt_objtxt,
lt_objpack.
TRY.
* -------- create persistent send request ------------------------
send_request = cl_bcs=>create_persistent( ).
* -------- create and set document with attachment ---------------
* create document from internal table with text
APPEND 'Please find the attached remittance advice with details of a recent payment to your account.' TO text.
APPEND 'This is a system generated message; please do not reply to this email.' TO text.
APPEND 'For inquiries, please contact Group Services Payables at 818-953-5206.' TO text.
document = cl_document_bcs=>create_document(
i_type = 'RAW'
i_text = text
i_length = '12'
i_subject = 'Electronic Payment Notification' ).
FIELD-SYMBOLS <fs_x> TYPE x.
DATA lv_content TYPE xstring.
LOOP AT lt_objbin INTO lwa_objbin.
ASSIGN lwa_objbin TO <fs_x> CASTING.
CONCATENATE lv_content <fs_x> INTO lv_content IN BYTE MODE.
ENDLOOP.
pdf_content = cl_document_bcs=>xstring_to_solix(
ip_xstring = lv_content ).
* add attachment to document
* BCS expects document content here e.g. from document upload
* binary_content = ...
CONCATENATE 'WMGremittance_' sy-datum sy-uzeit '.pdf' INTO lv_filename_cl.
CALL METHOD document->add_attachment
EXPORTING
i_attachment_type = 'PDF'
i_attachment_subject = lv_filename_cl
i_att_content_hex = pdf_content.
* add document to send request
CALL METHOD send_request->set_document( document ).
* --------- set sender -------------------------------------------
* note: this is necessary only if you want to set the sender
* different from actual user (SY-UNAME). Otherwise sender is
* set automatically with actual user.
sender = cl_sapuser_bcs=>create( sy-uname ).
CALL METHOD send_request->set_sender
EXPORTING
i_sender = sender.
CALL METHOD send_request->set_status_attributes(
EXPORTING
i_requested_status = 'N'
i_status_mail = 'N' ).
* Fill the receiver for the email with PDF attachemnt.
CLEAR : lwa_reclist,
lwa_lfa1,
lwa_adr6.
READ TABLE lt_lfa1
INTO lwa_lfa1
WITH KEY lifnr = lwa_reguh-lifnr.
IF sy-subrc EQ 0.
READ TABLE lt_adr6
INTO lwa_adr6
WITH KEY addrnumber = lwa_lfa1-adrnr.
IF ( sy-subrc EQ 0 )
AND ( lwa_adr6-smtp_addr IS NOT INITIAL ).
* --------- add recipient (e-mail address) -----------------------
* create recipient - please replace e-mail address !!!
recipient = cl_cam_address_bcs=>create_internet_address(
lwa_adr6-smtp_addr ).
ELSE.
lv_fax = lwa_lfa1-telfx.
recipient = cl_cam_address_bcs=>create_fax_address(
i_country = lwa_lfa1-land1
i_number = lv_fax ).
ENDIF.
ENDIF.
* add recipient with its respective attributes to send request
CALL METHOD send_request->add_recipient
EXPORTING
i_recipient = recipient
i_express = 'X'.
* ---------- send document ---------------------------------------
CALL METHOD send_request->send(
EXPORTING
i_with_error_screen = 'X'
RECEIVING
result = sent_to_all ).
IF sent_to_all = 'X'.
WRITE text-003.
ENDIF.
COMMIT WORK.
CATCH cx_bcs INTO bcs_exception.
WRITE: 'Error Occured'.
WRITE: 'Error', bcs_exception->error_type.
EXIT.
ENDTRY.
endif.
Edited by: nabheetmadan09 on Nov 18, 2010 4:16 PM
Hi,
Please find below the sample code which we have used in somany places
DATA: SEND_REQUEST TYPE REF TO CL_BCS.
DATA: TEXT TYPE BCSY_TEXT.
DATA: BINARY_CONTENT TYPE SOLIX_TAB.
DATA: DOCUMENT TYPE REF TO CL_DOCUMENT_BCS.
DATA: SENDER TYPE REF TO CL_SAPUSER_BCS.
DATA: RECIPIENT TYPE REF TO IF_RECIPIENT_BCS.
DATA: BCS_EXCEPTION TYPE REF TO CX_BCS.
DATA: SENT_TO_ALL TYPE OS_BOOLEAN.
DATA:LV_FAX TYPE AD_FXNMBR,
LV_FILENAME_CL TYPE SOOD-OBJDES.
CONVERT THE OTF FILE FORMAT INO THE PDF FORMAT.
CALL FUNCTION 'CONVERT_OTF_2_PDF'
IMPORTING
BIN_FILESIZE = LWA_BIN_FILESIZE
TABLES
OTF = LT_OTF
DOCTAB_ARCHIVE = LT_DOCTAB_ARCHIVE
LINES = LT_PDF_LINES
EXCEPTIONS
ERR_CONV_NOT_POSSIBLE = 1
ERR_OTF_MC_NOENDMARKER = 2
OTHERS = 3.
GET THE PDF DATA INTO THE ATTACHMENT TABLE .
CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE'
EXPORTING
LINE_WIDTH_DST = 255
TABLES
CONTENT_IN = LT_PDF_LINES
CONTENT_OUT = LT_OBJBIN
EXCEPTIONS
ERR_LINE_WIDTH_SRC_TOO_LONG = 1
ERR_LINE_WIDTH_DST_TOO_LONG = 2
ERR_CONV_FAILED = 3
OTHERS = 4.
REFRESH THE LOCAL TABLES AND WORKAREAS.
REFRESH: LT_RECLIST,
LT_OBJTXT,
LT_OBJPACK.
TRY.
-------- CREATE PERSISTENT SEND REQUEST ------------------------
SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).
-------- CREATE AND SET DOCUMENT WITH ATTACHMENT ---------------
CREATE DOCUMENT FROM INTERNAL TABLE WITH TEXT
APPEND u2018TEST1' TO TEXT.
DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
I_TYPE = 'RAW'
I_TEXT = TEXT
I_LENGTH = '12'
I_SUBJECT = 'ELECTRONIC PAYMENT NOTIFICATION' ).
FIELD-SYMBOLS <FS_X> TYPE X.
DATA LV_CONTENT TYPE XSTRING.
LOOP AT LT_OBJBIN INTO LWA_OBJBIN.
ASSIGN LWA_OBJBIN TO <FS_X> CASTING.
CONCATENATE LV_CONTENT <FS_X> INTO LV_CONTENT IN BYTE MODE.
ENDLOOP.
PDF_CONTENT = CL_DOCUMENT_BCS=>XSTRING_TO_SOLIX(
IP_XSTRING = LV_CONTENT ).
ADD ATTACHMENT TO DOCUMENT
BCS EXPECTS DOCUMENT CONTENT HERE E.G. FROM DOCUMENT UPLOAD
BINARY_CONTENT = ...
CONCATENATE 'TESTREMITTANCE_' SY-DATUM SY-UZEIT '.PDF' INTO LV_FILENAME_CL.
CALL METHOD DOCUMENT->ADD_ATTACHMENT
EXPORTING
I_ATTACHMENT_TYPE = 'PDF'
I_ATTACHMENT_SUBJECT = LV_FILENAME_CL
I_ATT_CONTENT_HEX = PDF_CONTENT.
ADD DOCUMENT TO SEND REQUEST
CALL METHOD SEND_REQUEST->SET_DOCUMENT( DOCUMENT ).
--------- SET SENDER -------------------------------------------
NOTE: THIS IS NECESSARY ONLY IF YOU WANT TO SET THE SENDER
DIFFERENT FROM ACTUAL USER (SY-UNAME). OTHERWISE SENDER IS
SET AUTOMATICALLY WITH ACTUAL USER.
SENDER = CL_SAPUSER_BCS=>CREATE( SY-UNAME ).
CALL METHOD SEND_REQUEST->SET_SENDER
EXPORTING
I_SENDER = SENDER.
CALL METHOD SEND_REQUEST->SET_STATUS_ATTRIBUTES(
EXPORTING
I_REQUESTED_STATUS = 'N'
I_STATUS_MAIL = 'N' ).
FILL THE RECEIVER FOR THE EMAIL WITH PDF ATTACHEMNT.
CLEAR : LWA_RECLIST,
LWA_LFA1,
LWA_ADR6.
READ TABLE LT_LFA1
INTO LWA_LFA1
WITH KEY LIFNR = LWA_REGUH-LIFNR.
IF SY-SUBRC EQ 0.
READ TABLE LT_ADR6
INTO LWA_ADR6
WITH KEY ADDRNUMBER = LWA_LFA1-ADRNR.
IF ( SY-SUBRC EQ 0 )
AND ( LWA_ADR6-SMTP_ADDR IS NOT INITIAL ).
--------- ADD RECIPIENT (E-MAIL ADDRESS) -----------------------
CREATE RECIPIENT - PLEASE REPLACE E-MAIL ADDRESS !!!
RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS(
LWA_ADR6-SMTP_ADDR ).
ELSE.
LV_FAX = LWA_LFA1-TELFX.
RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_FAX_ADDRESS(
I_COUNTRY = LWA_LFA1-LAND1
I_NUMBER = LV_FAX ).
ENDIF.
ENDIF.
ADD RECIPIENT WITH ITS RESPECTIVE ATTRIBUTES TO SEND REQUEST
CALL METHOD SEND_REQUEST->ADD_RECIPIENT
EXPORTING
I_RECIPIENT = RECIPIENT
I_EXPRESS = 'X'.
---------- SEND DOCUMENT ---------------------------------------
CALL METHOD SEND_REQUEST->SEND(
EXPORTING
I_WITH_ERROR_SCREEN = 'X'
RECEIVING
RESULT = SENT_TO_ALL ).
IF SENT_TO_ALL = 'X'.
WRITE TEXT-003.
ENDIF.
COMMIT WORK.
CATCH CX_BCS INTO BCS_EXCEPTION.
WRITE: 'ERROR OCCURED'.
WRITE: 'ERROR', BCS_EXCEPTION->ERROR_TYPE.
EXIT.
ENDTRY.
ENDIF.
Hope it helps.
Nabheet
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi,
Did you attach the PDF as binary attachment ?
best regards,
Guillaume
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi I have write code like this please check if i done any mistake
LOOP AT PDFTAB.
TRANSLATE PDFTAB USING '~'.
CONCATENATE WA_BUFFER PDFTAB INTO WA_BUFFER.
ENDLOOP.
TRANSLATE WA_BUFFER USING '~'.
DO.
I_RECORD = WA_BUFFER.
APPEND I_RECORD.
SHIFT WA_BUFFER LEFT BY 255 PLACES.
IF WA_BUFFER IS INITIAL.
EXIT.
ENDIF.
ENDDO.
* Attachment
REFRESH: I_RECLIST,I_OBJTXT,I_OBJBIN,I_OBJPACK.
CLEAR WA_OBJHEAD.
I_OBJBIN[] = I_RECORD[].
I_OBJTXT = 'Please find the Invoice as an attachment'.
APPEND I_OBJTXT.
I_OBJTXT = 'From SAP'.
APPEND I_OBJTXT.
I_OBJTXT = ' '.
APPEND I_OBJTXT.
DESCRIBE TABLE I_OBJTXT LINES V_LINES_TXT.
READ TABLE I_OBJTXT INDEX V_LINES_TXT.
WA_DOC_CHNG-OBJ_NAME = 'Invoice'.
WA_DOC_CHNG-EXPIRY_DAT = SY-DATUM + 10.
WA_DOC_CHNG-OBJ_DESCR = 'NA Invoice'.
WA_DOC_CHNG-SENSITIVTY = 'F'.
WA_DOC_CHNG-DOC_SIZE = V_LINES_TXT * 255.
* Main Text
CLEAR I_OBJPACK-TRANSF_BIN.
I_OBJPACK-HEAD_START = 1.
I_OBJPACK-HEAD_NUM = 0.
I_OBJPACK-BODY_START = 1.
I_OBJPACK-BODY_NUM = V_LINES_TXT.
I_OBJPACK-DOC_TYPE = 'RAW'.
APPEND I_OBJPACK.
* Attachment (pdf-Attachment)
I_OBJPACK-TRANSF_BIN = 'X'.
I_OBJPACK-HEAD_START = 1.
I_OBJPACK-HEAD_NUM = 0.
I_OBJPACK-BODY_START = 1.
DESCRIBE TABLE I_OBJBIN LINES V_LINES_BIN.
READ TABLE I_OBJBIN INDEX V_LINES_BIN.
I_OBJPACK-DOC_SIZE = V_LINES_BIN * 255 .
I_OBJPACK-BODY_NUM = V_LINES_BIN.
I_OBJPACK-DOC_TYPE = 'PDF'.
I_OBJPACK-OBJ_NAME = 'Invoice'.
I_OBJPACK-OBJ_DESCR = 'Invoice'.
APPEND I_OBJPACK.
CLEAR I_RECLIST.
I_RECLIST-RECEIVER = 'Email.com'.
I_RECLIST-EXPRESS = 'X'.
I_RECLIST-REC_TYPE = 'U'.
I_RECLIST-COPY = 'X'.
APPEND I_RECLIST.
I_RECLIST-RECEIVER = 'EMail1.com'.
I_RECLIST-EXPRESS = 'X'.
I_RECLIST-REC_TYPE = 'U'.
I_RECLIST-COPY = 'X'.
APPEND I_RECLIST.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = WA_DOC_CHNG
PUT_IN_OUTBOX = 'X'
COMMIT_WORK = 'X'
TABLES
PACKING_LIST = I_OBJPACK
OBJECT_HEADER = WA_OBJHEAD
CONTENTS_BIN = I_OBJBIN
CONTENTS_TXT = I_OBJTXT
RECEIVERS = I_RECLIST
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.
WRITE:/ 'Error When Sending the File', SY-SUBRC.
ELSE.
WRITE:/ 'Mail sent'.
ENDIF.
User | Count |
---|---|
93 | |
11 | |
10 | |
9 | |
9 | |
7 | |
6 | |
5 | |
4 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.