Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Problem using function SO_DOCUMENT_SEND_API1,

Former Member
0 Kudos

Dear All,

I used this function for attach the txt file and send the e-mail to relate user.

Now, My output file print out all the data in the same line.

how i can split the data line by line ?

below is my coding.

Please kindly to help me.

Regards,

Luke

PERFORM send_file_as_email_attachment

TABLES it_mess_bod

it_mess_att

USING P_TITLE

'FIX'

gd_attachment_name

gd_attachment_desc

p_FROM

'INT'

CHANGING gd_error

gd_reciever.

&----


*& Form send_file_as_email_attachment

&----


  • text

----


  • -->IT_MESSAGE text

  • -->IT_ATTACH text

  • -->P_MTITLE text

  • -->P_FORMAT text

  • -->P_FILENAME text

  • -->P_ATTDESCRIPTION text

  • -->P_SENDER_ADDRESS text

  • -->P_SENDER_ADDRES_TYPE text

  • -->P_ERROR text

  • -->P_RECIEVER text

----


FORM send_file_as_email_attachment TABLES it_message

it_attach

  • USING p_email

USING p_mtitle

p_format

p_filename

p_attdescription

p_sender_address

p_sender_addres_type

CHANGING p_error

p_reciever.

DATA: ld_error TYPE sy-subrc,

ld_reciever TYPE sy-subrc,

ld_mtitle LIKE sodocchgi1-obj_descr,

ld_email LIKE somlreci1-receiver,

ld_format TYPE so_obj_tp ,

ld_attdescription TYPE so_obj_nam ,

ld_attfilename TYPE so_obj_des ,

ld_sender_address LIKE soextreci1-receiver,

ld_sender_address_type LIKE soextreci1-adr_typ,

ld_receiver LIKE sy-subrc.

DATA: t_packing_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,

t_contents LIKE solisti1 OCCURS 0 WITH HEADER LINE,

t_receivers LIKE somlreci1 OCCURS 0 WITH HEADER LINE,

t_attachment LIKE solisti1 OCCURS 0 WITH HEADER LINE,

t_object_header LIKE solisti1 OCCURS 0 WITH HEADER LINE,

w_cnt TYPE i,

w_sent_all(1) TYPE c,

w_doc_data LIKE sodocchgi1.

  • ld_email = p_email.

ld_mtitle = p_mtitle.

ld_format = p_format.

ld_attdescription = p_attdescription.

ld_attfilename = p_filename.

ld_sender_address = p_sender_address.

ld_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 = ld_mtitle .

w_doc_data-sensitivty = 'F'.

  • Fill the document data and get size of attachment

CLEAR w_doc_data.

READ TABLE it_attach INDEX w_cnt.

w_doc_data-doc_size =

( w_cnt - 1 ) * 255 + STRLEN( it_attach ).

w_doc_data-obj_langu = sy-langu.

w_doc_data-obj_name = 'SAPRPT'.

w_doc_data-obj_descr = ld_mtitle.

w_doc_data-sensitivty = 'F'.

CLEAR t_attachment.

REFRESH t_attachment.

t_attachment[] = it_attach[].

  • Describe the body of the message

CLEAR t_packing_list.

REFRESH t_packing_list.

t_packing_list-transf_bin = space.

t_packing_list-head_start = 1.

t_packing_list-head_num = 0.

t_packing_list-body_start = 1.

DESCRIBE TABLE it_message LINES t_packing_list-body_num.

t_packing_list-doc_type = 'RAW'.

APPEND t_packing_list.

  • Create attachment notification

t_packing_list-transf_bin = 'X'.

t_packing_list-head_start = 1.

t_packing_list-head_num = 1.

t_packing_list-body_start = 1.

DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.

t_packing_list-doc_type = ld_format.

t_packing_list-obj_descr = ld_attdescription.

t_packing_list-obj_name = ld_attfilename.

t_packing_list-doc_size = t_packing_list-body_num * 255.

APPEND t_packing_list.

  • Add the recipients email address

CLEAR t_receivers.

REFRESH t_receivers.

LOOP AT itab_mailto.

t_receivers-receiver = itab_mailto-smtp_addr.

t_receivers-rec_type = 'U'.

t_receivers-com_type = 'INT'.

t_receivers-notif_del = 'X'.

t_receivers-notif_ndel = 'X'.

t_receivers-copy = ''.

APPEND t_receivers.

ENDLOOP.

LOOP AT S_CC.

t_receivers-receiver = S_CC-low.

t_receivers-rec_type = 'U'.

t_receivers-com_type = 'INT'.

t_receivers-notif_del = 'X'.

t_receivers-notif_ndel = 'X'.

t_receivers-copy = 'X'.

APPEND t_receivers.

ENDLOOP.

CALL FUNCTION 'SO_DOCUMENT_SEND_API1'

EXPORTING

document_data = w_doc_data

put_in_outbox = 'X'

sender_address = ld_sender_address

sender_address_type = ld_sender_address_type

commit_work = 'X'

IMPORTING

sent_to_all = w_sent_all

TABLES

packing_list = t_packing_list

contents_bin = t_attachment

contents_txt = it_message

receivers = t_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

ld_error = sy-subrc.

  • Populate zreceiver return code

LOOP AT t_receivers.

ld_receiver = t_receivers-retrn_code.

ENDLOOP.

ENDFORM. "send_file_as_email_attachment

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi,

Try This ....

DATA: l_tab_lines TYPE i,

l_error TYPE string.

CONSTANTS : l_c_name(13) TYPE c VALUE 'HC Error File', "#EC NOTEXT

l_c_255(255) TYPE c VALUE '255',

l_c_txt(3) TYPE c VALUE 'TXT'.

DATA: lt_reclist TYPE STANDARD TABLE OF somlreci1, "Recipients

lt_objpack TYPE STANDARD TABLE OF sopcklsti1,

lt_objhead TYPE STANDARD TABLE OF solisti1,

lt_objtxt TYPE STANDARD TABLE OF solisti1, "Body of EMail

lt_objbin TYPE STANDARD TABLE OF solisti1."Attachment of EMail

DATA: l_wa_doc_chng TYPE sodocchgi1, "attributes of document to send

l_wa_reclist LIKE LINE OF lt_reclist,

l_wa_objpack LIKE LINE OF lt_objpack,

l_wa_obj LIKE LINE OF lt_objhead.

  • Begin of Insert CHRK941885

DATA :

l_hex LIKE solix,

lt_contents_hex LIKE STANDARD TABLE OF solix ,

conv TYPE REF TO cl_abap_conv_out_ce,

l_buffer TYPE xstring,

l_hexa(510) type x.

  • End of Insert CHRK941885

  • Fill attachment contents: body of email message

CONCATENATE 'Click on attachment to view the extract file :'(t01)

l_c_name INTO l_wa_obj-line SEPARATED BY space.

APPEND l_wa_obj TO lt_objtxt. CLEAR l_wa_obj.

APPEND l_wa_obj TO lt_objtxt. CLEAR l_wa_obj.

DESCRIBE TABLE lt_objtxt LINES l_tab_lines.

  • Information about the email body data

CLEAR l_wa_objpack-transf_bin. "Attachment not binary

l_wa_objpack-head_start = 1.

l_wa_objpack-head_num = 0.

l_wa_objpack-body_start = 1.

l_wa_objpack-body_num = l_tab_lines * l_c_255.

l_wa_objpack-doc_type = 'TXT'.

APPEND l_wa_objpack TO lt_objpack.

CLEAR :l_wa_objpack.

  • Move error records to the file, semi-colon delimited

LOOP AT e_error INTO g_error.

CONCATENATE g_error-pernr ';'

g_error-nachn ';'

g_error-vorna ';'

g_error-werks ';'

g_error-persg ';'

g_error-eligr ';'

g_error-msg INTO l_error.

APPEND l_error TO lt_objbin.

ENDLOOP.

  • Document type is TXT

l_wa_objpack-doc_type = l_c_txt.

  • APPEND object_header.

CALL FUNCTION 'SO_RAW_TO_RTF'

TABLES

objcont_old = lt_objbin

objcont_new = lt_objbin.

  • Begin of Insert CHRK941885

LOOP AT lt_objbin into l_error.

conv = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' endian = 'B').

CALL METHOD conv->write( data = l_error ).

l_buffer = conv->get_buffer( ).

move l_buffer to l_hexa.

move l_hexa to l_hex-line.

APPEND l_hex to lt_contents_hex.

ENDLOOP.

  • End of Insert CHRK941885

  • File name for attachment

l_wa_obj = l_c_name.

APPEND l_wa_obj TO lt_objhead.

CLEAR l_wa_obj.

DESCRIBE TABLE lt_objbin LINES l_tab_lines.

  • Creation of the entry for the compressed attachment

l_wa_objpack-transf_bin = 'X'.

l_wa_objpack-head_start = 1.

l_wa_objpack-head_num = 1.

l_wa_objpack-body_start = 1.

l_wa_objpack-obj_name = l_c_name.

l_wa_objpack-obj_descr = l_c_name.

l_wa_objpack-body_num = l_tab_lines.

l_wa_objpack-doc_size = l_tab_lines * l_c_255.

APPEND l_wa_objpack TO lt_objpack.

CLEAR l_wa_objpack.

  • Completing the recipient list

LOOP AT s_email.

l_wa_reclist-receiver = s_email-low.

l_wa_reclist-express = 'X'.

l_wa_reclist-rec_type = 'U'.

APPEND l_wa_reclist TO lt_reclist.

CLEAR l_wa_reclist.

ENDLOOP.

  • Document to send

MOVE 'Health Risk Assessment Batch extract'(h01)

TO l_wa_doc_chng-obj_descr.

  • Send mail as a confidential

l_wa_doc_chng-sensitivty = 'P'.

  • Send the document

CALL FUNCTION 'SO_DOCUMENT_SEND_API1'

EXPORTING

document_data = l_wa_doc_chng

put_in_outbox = ' '

commit_work = 'X'

TABLES

packing_list = lt_objpack

object_header = lt_objhead

  • contents_bin = lt_objbin " Comment CHRK941885

contents_txt = lt_objtxt

contents_hex = lt_contents_hex " Insert CHRK941885

receivers = lt_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.

MESSAGE s000(oo) WITH 'Email sent to recipients'(s12).

  • To refresh SAP Work Office so that mail can be recieved immediataly.

WAIT UP TO 2 SECONDS.

SUBMIT rsconn01 WITH mode = 'INT'

WITH output = ''

AND RETURN.

ELSE.

MESSAGE e000(oo) WITH 'Problem sending Email.'(e02).

ENDIF.

3 REPLIES 3

Former Member
0 Kudos

Hi,

Try This ....

DATA: l_tab_lines TYPE i,

l_error TYPE string.

CONSTANTS : l_c_name(13) TYPE c VALUE 'HC Error File', "#EC NOTEXT

l_c_255(255) TYPE c VALUE '255',

l_c_txt(3) TYPE c VALUE 'TXT'.

DATA: lt_reclist TYPE STANDARD TABLE OF somlreci1, "Recipients

lt_objpack TYPE STANDARD TABLE OF sopcklsti1,

lt_objhead TYPE STANDARD TABLE OF solisti1,

lt_objtxt TYPE STANDARD TABLE OF solisti1, "Body of EMail

lt_objbin TYPE STANDARD TABLE OF solisti1."Attachment of EMail

DATA: l_wa_doc_chng TYPE sodocchgi1, "attributes of document to send

l_wa_reclist LIKE LINE OF lt_reclist,

l_wa_objpack LIKE LINE OF lt_objpack,

l_wa_obj LIKE LINE OF lt_objhead.

  • Begin of Insert CHRK941885

DATA :

l_hex LIKE solix,

lt_contents_hex LIKE STANDARD TABLE OF solix ,

conv TYPE REF TO cl_abap_conv_out_ce,

l_buffer TYPE xstring,

l_hexa(510) type x.

  • End of Insert CHRK941885

  • Fill attachment contents: body of email message

CONCATENATE 'Click on attachment to view the extract file :'(t01)

l_c_name INTO l_wa_obj-line SEPARATED BY space.

APPEND l_wa_obj TO lt_objtxt. CLEAR l_wa_obj.

APPEND l_wa_obj TO lt_objtxt. CLEAR l_wa_obj.

DESCRIBE TABLE lt_objtxt LINES l_tab_lines.

  • Information about the email body data

CLEAR l_wa_objpack-transf_bin. "Attachment not binary

l_wa_objpack-head_start = 1.

l_wa_objpack-head_num = 0.

l_wa_objpack-body_start = 1.

l_wa_objpack-body_num = l_tab_lines * l_c_255.

l_wa_objpack-doc_type = 'TXT'.

APPEND l_wa_objpack TO lt_objpack.

CLEAR :l_wa_objpack.

  • Move error records to the file, semi-colon delimited

LOOP AT e_error INTO g_error.

CONCATENATE g_error-pernr ';'

g_error-nachn ';'

g_error-vorna ';'

g_error-werks ';'

g_error-persg ';'

g_error-eligr ';'

g_error-msg INTO l_error.

APPEND l_error TO lt_objbin.

ENDLOOP.

  • Document type is TXT

l_wa_objpack-doc_type = l_c_txt.

  • APPEND object_header.

CALL FUNCTION 'SO_RAW_TO_RTF'

TABLES

objcont_old = lt_objbin

objcont_new = lt_objbin.

  • Begin of Insert CHRK941885

LOOP AT lt_objbin into l_error.

conv = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' endian = 'B').

CALL METHOD conv->write( data = l_error ).

l_buffer = conv->get_buffer( ).

move l_buffer to l_hexa.

move l_hexa to l_hex-line.

APPEND l_hex to lt_contents_hex.

ENDLOOP.

  • End of Insert CHRK941885

  • File name for attachment

l_wa_obj = l_c_name.

APPEND l_wa_obj TO lt_objhead.

CLEAR l_wa_obj.

DESCRIBE TABLE lt_objbin LINES l_tab_lines.

  • Creation of the entry for the compressed attachment

l_wa_objpack-transf_bin = 'X'.

l_wa_objpack-head_start = 1.

l_wa_objpack-head_num = 1.

l_wa_objpack-body_start = 1.

l_wa_objpack-obj_name = l_c_name.

l_wa_objpack-obj_descr = l_c_name.

l_wa_objpack-body_num = l_tab_lines.

l_wa_objpack-doc_size = l_tab_lines * l_c_255.

APPEND l_wa_objpack TO lt_objpack.

CLEAR l_wa_objpack.

  • Completing the recipient list

LOOP AT s_email.

l_wa_reclist-receiver = s_email-low.

l_wa_reclist-express = 'X'.

l_wa_reclist-rec_type = 'U'.

APPEND l_wa_reclist TO lt_reclist.

CLEAR l_wa_reclist.

ENDLOOP.

  • Document to send

MOVE 'Health Risk Assessment Batch extract'(h01)

TO l_wa_doc_chng-obj_descr.

  • Send mail as a confidential

l_wa_doc_chng-sensitivty = 'P'.

  • Send the document

CALL FUNCTION 'SO_DOCUMENT_SEND_API1'

EXPORTING

document_data = l_wa_doc_chng

put_in_outbox = ' '

commit_work = 'X'

TABLES

packing_list = lt_objpack

object_header = lt_objhead

  • contents_bin = lt_objbin " Comment CHRK941885

contents_txt = lt_objtxt

contents_hex = lt_contents_hex " Insert CHRK941885

receivers = lt_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.

MESSAGE s000(oo) WITH 'Email sent to recipients'(s12).

  • To refresh SAP Work Office so that mail can be recieved immediataly.

WAIT UP TO 2 SECONDS.

SUBMIT rsconn01 WITH mode = 'INT'

WITH output = ''

AND RETURN.

ELSE.

MESSAGE e000(oo) WITH 'Problem sending Email.'(e02).

ENDIF.

Former Member
0 Kudos

class CL_ABAP_CHAR_UTILITIES definition load.

Constants : con1 type c value CL_ABAP_CHAR_UTILITIES=>CR_LF,

con2 type c value CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.

.......................................

w_doc_data-sensitivty = 'F'.

CLEAR t_attachment.

REFRESH t_attachment.

Loop at it_attach.

concatenate con1 itattach into t_attachment .

Append t_attachment.

endloop.

  • Describe the body of the message

CLEAR t_packing_list.

0 Kudos

Hi,

I added this coding before but is not work.

Would you mind give more suggestion for me ?

Regards,

Luke