cancel
Showing results for 
Search instead for 
Did you mean: 

Smartform PDF to Email Problem

Former Member
0 Kudos

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

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

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.

Answers (5)

Answers (5)

Former Member
0 Kudos

Answerd by Own

Former Member
0 Kudos

same problem

how can you tell solved ??

aidan_black
Active Contributor
0 Kudos

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

Former Member
0 Kudos

Hi ,

Can Some help me in this issue

Former Member
0 Kudos

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

nabheetscn
Active Contributor
0 Kudos

Hi,

I have posted one object oriented code above which is perfectly working fine. It will be good if you can format it and implement it in your code. SAP standard provide standard method to convert it into 255 characters etc.

Nabheet

Former Member
0 Kudos

Hi Nabheetmadan,

Thanks for reesponce

the code which you send is not able to check

can u send the same with

<Code>

format

Thanks

Surendra

nabheetscn
Active Contributor
0 Kudos
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

nabheetscn
Active Contributor
0 Kudos

I tried doing it..U just copy paste and format it will work or please tell me how to do it..?

Nabheet

nabheetscn
Active Contributor
0 Kudos

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

guillaume-hrc
Active Contributor
0 Kudos

Hi,

Did you attach the PDF as binary attachment ?

best regards,

Guillaume

Former Member
0 Kudos

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.