‎2008 Jan 16 1:54 AM
Hi all,
I'm using the function SO_DOCUMENT_SEND_API1 to send and email with a txt document attached, but I only can attach a document with a lenght less than 255 character.
Anyone could please tell me if there is another function that allow me to send an email with a document bigger than 255 character attached?
thank in advance.
‎2008 Jan 16 3:46 AM
Hi Raul
Find below code, which downloads the data to a PC file and attach to the mail(no restriction of 256 characters). You can use this to modify accordingly. Have tried this quite long back.
DATA: METHOD1 LIKE SY-UCOMM,
G_USER LIKE SOUDNAMEI1,
G_USER_DATA LIKE SOUDATAI1,
G_OWNER LIKE SOUD-USRNAM,
G_RECEIPIENTS LIKE SOOS1 OCCURS 0 WITH HEADER LINE,
G_DOCUMENT LIKE SOOD4,
G_HEADER LIKE SOOD2,
G_FOLMAM LIKE SOFM2,
G_OBJCNT LIKE SOLI OCCURS 0 WITH HEADER LINE,
G_OBJHEAD LIKE SOLI OCCURS 0 WITH HEADER LINE,
G_OBJPARA LIKE SELC OCCURS 0 WITH HEADER LINE,
G_OBJPARB LIKE SOOP1 OCCURS 0 WITH HEADER LINE,
G_ATTACHMENTS LIKE SOOD5 OCCURS 0 WITH HEADER LINE,
G_REFERENCES LIKE SOXRL OCCURS 0 WITH HEADER LINE.
DATA: G_AUTHORITY LIKE SOFA-USRACC,
G_REF_DOCUMENT LIKE SOOD4,
G_NEW_PARENT LIKE SOODK.
DATA: BEGIN OF G_FILES OCCURS 10 ,
TEXT(4096) TYPE C,
END OF G_FILES.
DATA: FOLD_NUMBER(12) TYPE C,
FOLD_YR(2) TYPE C,
FOLD_TYPE(3) TYPE C.
PARAMETERS P_FILE(4096) TYPE C DEFAULT 'C:\MATERIALS.TXT' OBLIGATORY.
DATA: IT_MARA TYPE STANDARD TABLE OF MARA.
DATA: L_FILE TYPE STRING.
START-OF-SELECTION.
SELECT * FROM MARA INTO TABLE IT_MARA UP TO 20 ROWS.
L_FILE = P_FILE.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = L_FILE
TABLES
DATA_TAB = IT_MARA
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
WRITE: / 'FILE'(007), L_FILE, 'WAS CREATED.'(008).
ENDIF.
* CAN BE ANY FILE FROMYOUR PC ....EITHER XLS OR WORD OR PPT ETC ...
G_USER-SAPNAME = SY-UNAME.
CALL FUNCTION 'SO_USER_READ_API1'
EXPORTING
USER = G_USER
* PREPARE_FOR_FOLDER_ACCESS = ' '
IMPORTING
USER_DATA = G_USER_DATA
EXCEPTIONS
USER_NOT_EXIST = 1
PARAMETER_ERROR = 2
X_ERROR = 3
OTHERS = 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.
FOLD_TYPE = G_USER_DATA-OUTBOXFOL+0(3).
FOLD_YR = G_USER_DATA-OUTBOXFOL+3(2).
FOLD_NUMBER = G_USER_DATA-OUTBOXFOL+5(12).
CLEAR G_FILES.
REFRESH : G_OBJCNT, G_OBJHEAD, G_OBJPARA, G_OBJPARB, G_RECEIPIENTS,
G_ATTACHMENTS, G_REFERENCES, G_FILES.
METHOD1 = 'SAVE'.
G_DOCUMENT-FOLTP = FOLD_TYPE.
G_DOCUMENT-FOLYR = FOLD_YR.
G_DOCUMENT-FOLNO = FOLD_NUMBER.
G_DOCUMENT-OBJTP = G_USER_DATA-OBJECT_TYP.
G_DOCUMENT-OBJDES = 'Material Details'.
G_DOCUMENT-FOLRG = 'O'.
G_DOCUMENT-OBJLEN = '0'.
G_DOCUMENT-FILE_EXT = 'TXT'.
G_HEADER-OBJDES = 'Material Details'.
G_HEADER-FILE_EXT = 'TXT'.
CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER'
EXPORTING
METHOD = METHOD1
OFFICE_USER = SY-UNAME
REF_DOCUMENT = G_REF_DOCUMENT
NEW_PARENT = G_NEW_PARENT
IMPORTING
AUTHORITY = G_AUTHORITY
TABLES
OBJCONT = G_OBJCNT
OBJHEAD = G_OBJHEAD
OBJPARA = G_OBJPARA
OBJPARB = G_OBJPARB
RECIPIENTS = G_RECEIPIENTS
ATTACHMENTS = G_ATTACHMENTS
REFERENCES = G_REFERENCES
FILES = G_FILES
CHANGING
DOCUMENT = G_DOCUMENT
HEADER_DATA = G_HEADER.
* FILE FROM THE PC TO SEND...
METHOD1 = 'ATTCREATEFROMPC'.
G_FILES-TEXT = P_FILE.
APPEND G_FILES.
CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER'
EXPORTING
METHOD = METHOD1
OFFICE_USER = G_OWNER
REF_DOCUMENT = G_REF_DOCUMENT
NEW_PARENT = G_NEW_PARENT
IMPORTING
AUTHORITY = G_AUTHORITY
TABLES
OBJCONT = G_OBJCNT
OBJHEAD = G_OBJHEAD
OBJPARA = G_OBJPARA
OBJPARB = G_OBJPARB
RECIPIENTS = G_RECEIPIENTS
ATTACHMENTS = G_ATTACHMENTS
REFERENCES = G_REFERENCES
FILES = G_FILES
CHANGING
DOCUMENT = G_DOCUMENT
HEADER_DATA = G_HEADER.
METHOD1 = 'SEND'.
G_RECEIPIENTS-RECNAM = 'MK085'.
G_RECEIPIENTS-RECESC = 'B'.
G_RECEIPIENTS-SNDEX = 'X'.
APPEND G_RECEIPIENTS.
CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER'
EXPORTING
METHOD = METHOD1
OFFICE_USER = G_OWNER
REF_DOCUMENT = G_REF_DOCUMENT
NEW_PARENT = G_NEW_PARENT
IMPORTING
AUTHORITY = G_AUTHORITY
TABLES
OBJCONT = G_OBJCNT
OBJHEAD = G_OBJHEAD
OBJPARA = G_OBJPARA
OBJPARB = G_OBJPARB
RECIPIENTS = G_RECEIPIENTS
ATTACHMENTS = G_ATTACHMENTS
REFERENCES = G_REFERENCES
FILES = G_FILES
CHANGING
DOCUMENT = G_DOCUMENT
HEADER_DATA = G_HEADER.
Kind Regards
Eswar
‎2008 Jan 16 5:34 AM
Also check below example:
Execute below code with internet mailing address as parameter.
PARAMETERS: p_mail TYPE ad_smtpadr OBLIGATORY.
DATA: i_mara TYPE STANDARD TABLE OF mara. " MARA Entries
DATA: l_text TYPE char255. " Text
DATA: l_lines TYPE i,
l_size TYPE sood-objlen.
" Size of Attachment
* Mail related
DATA: i_content TYPE soli_tab, " Mail content
i_attach TYPE soli_tab. " Attachment
DATA: l_send_request TYPE REF TO cl_bcs,
" E-Mail Send Request
l_document TYPE REF TO cl_document_bcs,
" E-Mail Attachment
l_recipient TYPE REF TO if_recipient_bcs,
" Distribution List
l_sender TYPE REF TO if_sender_bcs,
" Address of Sender
l_uname TYPE salrtdrcpt,
" Sender Name(SY-UNAME)
l_bcs_exception TYPE REF TO cx_document_bcs,
" BCS Exception
l_addr_exception TYPE REF TO cx_address_bcs,
" Address Exception
l_send_exception TYPE REF TO cx_send_req_bcs.
" E-Mail sending Exception
.
*
*Constants------------------------------------------------------------*
CONSTANTS: c_tab(1) TYPE c VALUE
cl_abap_char_utilities=>horizontal_tab,
" Tab Character
c_cr(1) TYPE c VALUE cl_abap_char_utilities=>cr_lf,
" Line Feed for End-Of_line
c_ext TYPE soodk-objtp VALUE 'XLS'. " XLS Extension
START-OF-SELECTION.
SELECT * FROM mara INTO TABLE i_mara UP TO 20 ROWS.
* Preparing body of the Mail
MOVE 'Mail Body' TO l_text.
APPEND l_text TO i_content.
* Preparing contents of attachment with Change Log
PERFORM prepare_attachment.
* Creates persistent send request
TRY.
l_send_request = cl_bcs=>create_persistent( ).
* Creating Document
l_document = cl_document_bcs=>create_document(
i_type = 'RAW'
i_text = i_content[]
i_subject = 'Material Details' ).
DESCRIBE TABLE i_mara LINES l_lines.
* Size to multiplied by 2 for UNICODE enabled systems
l_size = l_lines * 2 * 255.
* Adding Attachment
CALL METHOD l_document->add_attachment
EXPORTING
i_attachment_type = c_ext
i_attachment_size = l_size
i_attachment_subject = 'Material Details'
i_att_content_text = i_attach[].
* Add document to send request
CALL METHOD l_send_request->set_document( l_document ).
* Get Sender Object
l_uname = sy-uname.
l_sender = cl_sapuser_bcs=>create( l_uname ).
CALL METHOD l_send_request->set_sender
EXPORTING
i_sender = l_sender.
* E-Mail
TRANSLATE p_mail TO LOWER CASE.
l_recipient = cl_cam_address_bcs=>create_internet_address( p_mail )
.
CALL METHOD l_send_request->add_recipient
EXPORTING
i_recipient = l_recipient
i_express = 'U'
i_copy = ' '
i_blind_copy = ' '
i_no_forward = ' '.
*Trigger E-Mail immediately
l_send_request->set_send_immediately( 'X' ).
CALL METHOD l_send_request->send( ).
COMMIT WORK.
CATCH cx_document_bcs INTO l_bcs_exception.
CATCH cx_send_req_bcs INTO l_send_exception.
CATCH cx_address_bcs INTO l_addr_exception.
ENDTRY.
*&---------------------------------------------------------------------
*
*& Form PREPARE_ATTACHMENT
*&---------------------------------------------------------------------
*
FORM prepare_attachment .
FIELD-SYMBOLS: <lfs_table>, " Internal table structure
<lfs_con>. " Field Content
DATA: l_text TYPE char1024. " Text content for mail attachment
DATA: l_con(50) TYPE c. " Field Content in character format
* Columns to be tab delimeted
LOOP AT i_mara ASSIGNING <lfs_table>.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE <lfs_table>
TO <lfs_con>.
IF sy-subrc NE 0.
CONCATENATE c_cr l_text INTO l_text.
APPEND l_text TO i_attach.
EXIT.
ELSE.
CLEAR: l_con.
MOVE <lfs_con> TO l_con.
CONDENSE l_con.
IF sy-index = 1.
CLEAR: l_text.
MOVE l_con TO l_text.
ELSE.
CONCATENATE l_text l_con INTO l_text
SEPARATED BY c_tab.
ENDIF.
ENDIF.
ENDDO.
ENDLOOP.
ENDFORM. " PREPARE_ATTACHMENT
Kind Regards
Eswar