09-15-2014 2:02 PM
Hi All,
I would like to send Internal table in text file without any separator. and maintaining position of each field. Total length of line is 1103 character.
I had tried below method to achieve the same but file is appearing as attached in message.I like to attache this file to mail. i am using cl_bcs for sending mail.
constants: c_cr TYPE c VALUE cl_abap_char_utilities=>cr_lf.
data: lv_line TYPE string.
LOOP AT it_output INTO wa_output.
lv_line = wa_output. " wa_output length is 1103 character
if l_line is INITIAL.
l_line = lv_line.
else.
CONCATENATE l_line lv_line INTO l_line SEPARATED BY c_cr.
endif.
CLEAR: wa_output,lv_line.
ENDLOOP.
TRY.
cl_bcs_convert=>string_to_solix(
EXPORTING
iv_string = l_line
iv_codepage = '4103' "suitable for MS Excel, leave empty
iv_add_bom = 'X' "for other doc types
IMPORTING
et_solix = gt_binary_content
ev_size = gv_size ).
*
**
*
CATCH cx_bcs.
MESSAGE e445(so).
ENDTRY.
l_attcdoctype = 'BIN'.".c_ext.
l_atttitle = 'Test_file'.
DESCRIBE TABLE gt_binary_content LINES l_num_rows.
gv_size = l_num_rows * 255.
* Create Document
CALL METHOD l_document->add_attachment(
i_attachment_type = l_attcdoctype
i_attachment_subject = l_atttitle
i_attachment_size = gv_size
i_att_content_hex = gt_binary_content ).
Please let me know if i am missing anything.
Regards,
Hardik
09-15-2014 3:32 PM
Check the below program for your reference which sends multiple documents using ABAP objects.
PARAMETERS: p_mail TYPE ad_smtpadr OBLIGATORY.
DATA: i_mara TYPE STANDARD TABLE OF mara, " MARA Entries
i_marc TYPE STANDARD TABLE OF marc. " MARC 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
i_attach1 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.
SELECT * FROM marc INTO TABLE i_marc UP TO 20 ROWS.
* Preparing body of the Mail
MOVE 'Mail Body' TO l_text.
APPEND l_text TO i_content.
* 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' ).
* Preparing contents of attachment with Change Log
PERFORM prepare_attachment.
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[].
DESCRIBE TABLE i_marc 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 Plant Details'
i_att_content_text = i_attach1[].
* Add document to send request
CALL METHOD l_send_request->set_document( l_document ).
* Get Sender Object
l_uname = sy-uname.
data:lr_sender type ref to if_sender_bcs,
lr_send type ref to cl_bcs.
* Preparing the sender object
lr_sender = cl_cam_address_bcs=>create_internet_address( p_mail ).
* l_sender = cl_sapuser_bcs=>create( l_uname ).
* Setting the sender
CALL METHOD l_send_request->set_sender
EXPORTING
i_sender = lr_sender.
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.
LOOP AT i_marc 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_attach1.
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.
09-15-2014 3:33 PM
i think you miss the create document.
* Creating Document
l_document = cl_document_bcs=>create_document(
i_type = 'RAW'
i_text = i_content[]
i_subject = 'Material Details' ).
09-16-2014 6:32 AM
Hi Kalyan,
It is XLS format. I want data in TXT file with single line.
when i run your program with changing XLS to txt and download the file. it is not appearing properly.
Please let me know if you have any other solution.
09-16-2014 7:53 AM
Hi,
Please use the below program it may be useful for you.
FORM MAIL .
DATA: GT_TEXT TYPE TABLE OF TLINE,
WA_TEXT TYPE TLINE,
LV_TITLE TYPE STRING,
LV_HEAD TYPE STRING,
LV_DATE TYPE STRING.
" MAIL EVENT MAINTAINED IN ZSMT0452 TABLE
SELECT REPID
EVENT
USER_ID
REF_RECV
FROM ZSMT0452 INTO TABLE GT_ZSMT04520 WHERE REPID = SY-REPID AND
EVENT = P_MAIL.
APPEND LINES OF GT_ZSMT04520 TO GT_ZSMT04521.
" CONDITION FOR MAIL ADDRESS IN TO
DELETE GT_ZSMT04520 WHERE REF_RECV IS NOT INITIAL.
IF GT_ZSMT04520[] IS NOT INITIAL.
" SELECTING E MAIL ADDRESS MAINTAIN IN ZCCT1010 TABLE
SELECT SMTP_ADDR AS LINE
APPENDING CORRESPONDING FIELDS OF TABLE GT_RECEIVER
FROM ZCCT1010
FOR ALL ENTRIES IN GT_ZSMT04520
WHERE USER_ID = GT_ZSMT04520-USER_ID
AND SMTP_ADDR <> ''.
ENDIF.
" CONDITION FOR MAIL ADDRESS IN CC
DELETE GT_ZSMT04521 WHERE REF_RECV IS INITIAL.
IF GT_ZSMT04521[] IS NOT INITIAL.
" SELECTING E MAIL ADDRESS (CC) MAINTAIN IN ZCCT1010 TABLE
SELECT SMTP_ADDR AS LINE
APPENDING CORRESPONDING FIELDS OF TABLE GT_COPY_REC
FROM ZCCT1010
FOR ALL ENTRIES IN GT_ZSMT04521
WHERE USER_ID = GT_ZSMT04521-USER_ID
AND SMTP_ADDR <> ''.
ENDIF.
IF GT_RECEIVER[] IS INITIAL AND GT_COPY_REC[] IS INITIAL.
EXIT.
ENDIF.
" DELETING DUPLICATE MAIL ID
SORT GT_RECEIVER BY LINE.
DELETE ADJACENT DUPLICATES FROM GT_RECEIVER COMPARING ALL FIELDS.
SORT GT_COPY_REC BY LINE.
DELETE ADJACENT DUPLICATES FROM GT_COPY_REC COMPARING ALL FIELDS.
" for mail header and mail content
CALL FUNCTION 'Z_SM_BUILD_MAIL_TEXT'
EXPORTING
I_EVENT = P_MAIL
* I_HTML =
IMPORTING
O_MAIL_TITLE = LV_TITLE
TABLES
* T_HTML =
T_TEXT = GT_TEXT
.
SPLIT LV_TITLE AT '_' INTO LV_HEAD LV_DATE.
"Subject of the mail.
WA_DOCUMENT_DATA-OBJ_NAME = 'MAIL_TO_HEAD'.
WA_DOCUMENT_DATA-OBJ_DESCR = LV_HEAD.
"Body of the mail
LOOP AT GT_TEXT INTO WA_TEXT.
WA_BODY_MSG = WA_TEXT-TDLINE.
APPEND WA_BODY_MSG TO GT_BODY_MSG.
CLEAR WA_BODY_MSG.
ENDLOOP.
"Write Packing List for Body
DESCRIBE TABLE GT_BODY_MSG LINES GV_TAB_LINES.
WA_PACKING_LIST-HEAD_START = 1.
WA_PACKING_LIST-HEAD_NUM = 0.
WA_PACKING_LIST-BODY_START = 1.
WA_PACKING_LIST-BODY_NUM = GV_TAB_LINES.
WA_PACKING_LIST-DOC_TYPE = 'RAW'.
APPEND WA_PACKING_LIST TO GT_PACKING_LIST.
CLEAR WA_PACKING_LIST.
"Write Packing List for Attachment
WA_PACKING_LIST-TRANSF_BIN = C_X.
WA_PACKING_LIST-HEAD_START = 1.
WA_PACKING_LIST-HEAD_NUM = 1.
WA_PACKING_LIST-BODY_START = 1.
DESCRIBE TABLE GT_ATTACHMENT LINES WA_PACKING_LIST-BODY_NUM.
WA_PACKING_LIST-DOC_TYPE = 'PDF'.
WA_PACKING_LIST-OBJ_DESCR = 'New Price Report.PDF'.
WA_PACKING_LIST-OBJ_NAME = 'PDF_ATTACHMENT'.
WA_PACKING_LIST-DOC_SIZE = WA_PACKING_LIST-BODY_NUM * 255.
APPEND WA_PACKING_LIST TO GT_PACKING_LIST.
CLEAR WA_PACKING_LIST.
"Fill the document data and get size of attachment
WA_DOCUMENT_DATA-OBJ_LANGU = SY-LANGU.
READ TABLE GT_ATTACHMENT INTO WA_ATTACHMENT INDEX GV_TAB_LINES.
WA_DOCUMENT_DATA-DOC_SIZE = ( GV_TAB_LINES - 1 ) * 255 + STRLEN( WA_ATTACHMENT ).
"Receivers List.
" To list
LOOP AT GT_RECEIVER.
WA_RECEIVERS-REC_TYPE = 'U'. "Internet address
WA_RECEIVERS-RECEIVER = GT_RECEIVER-LINE.
WA_RECEIVERS-COM_TYPE = 'INT'.
WA_RECEIVERS-NOTIF_DEL = C_X.
WA_RECEIVERS-NOTIF_NDEL = C_X.
APPEND WA_RECEIVERS TO GT_RECEIVERS .
CLEAR:WA_RECEIVERS.
ENDLOOP.
" CC list
LOOP AT GT_COPY_REC.
WA_RECEIVERS-REC_TYPE = 'U'.
WA_RECEIVERS-COPY = C_X.
WA_RECEIVERS-RECEIVER = GT_COPY_REC-LINE.
APPEND WA_RECEIVERS TO GT_RECEIVERS .
CLEAR:WA_RECEIVERS.
ENDLOOP.
* PGURRAM Change start GSDK9A5HIZ
"Write Packing List for Attachment
DATA LT_ATTACHMENT TYPE STANDARD TABLE OF TY_ATTACHMENT .
" Convert text to binary
CALL FUNCTION 'SCMS_TEXT_TO_BINARY'
* EXPORTING
* FIRST_LINE = 0
* LAST_LINE = 0
* APPEND_TO_TABLE = ' '
* MIMETYPE = ' '
* IMPORTING
* OUTPUT_LENGTH =
TABLES
TEXT_TAB = GT_ATTACHMENT1
BINARY_TAB = LT_ATTACHMENT
EXCEPTIONS
FAILED = 1
OTHERS = 2
.
DESCRIBE TABLE GT_ATTACHMENT LINES WA_PACKING_LIST-BODY_NUM.
WA_PACKING_LIST-TRANSF_BIN = C_X.
WA_PACKING_LIST-HEAD_START = 1."wa_packing_list-body_num + 1.
WA_PACKING_LIST-HEAD_NUM = 1 ."wa_packing_list-body_num + 1.
WA_PACKING_LIST-BODY_START = WA_PACKING_LIST-BODY_NUM + 1.
DESCRIBE TABLE LT_ATTACHMENT LINES WA_PACKING_LIST-BODY_NUM.
WA_PACKING_LIST-DOC_TYPE = 'TXT'.
WA_PACKING_LIST-OBJ_DESCR = 'New Price Report.TXT'.
WA_PACKING_LIST-OBJ_NAME = 'TXT_ATTACHMENT'.
WA_PACKING_LIST-DOC_SIZE = WA_PACKING_LIST-BODY_NUM * 255.
APPEND WA_PACKING_LIST TO GT_PACKING_LIST.
CLEAR WA_PACKING_LIST.
LOOP AT LT_ATTACHMENT INTO WA_ATTACHMENT.
APPEND WA_ATTACHMENT TO GT_ATTACHMENT.
ENDLOOP.
"PGURRAM End changes GSDK9A5HIZ
"Function module to send mail to Recipients
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = WA_DOCUMENT_DATA
PUT_IN_OUTBOX = C_X
COMMIT_WORK = C_X
IMPORTING
SENT_TO_ALL = GV_SENT_TO_ALL
TABLES
PACKING_LIST = GT_PACKING_LIST
CONTENTS_BIN = GT_ATTACHMENT
CONTENTS_TXT = GT_BODY_MSG
RECEIVERS = GT_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 I303(ME) WITH TEXT-118. " 'Mail has been Successfully Sent.'.
ENDIF.
ENDFORM. " MAIL