![](https://community.sap.com/html/assets/img_tile-default.png)
LOOP AT gt_doc INTO gs_doc.
IF gv_message IS INITIAL.
PERFORM check_input.
ELSE.
message = gv_message.
EXIT.
ENDIF.
ENDLOOP.
IF gv_message IS INITIAL.
PERFORM fill_receiver_table.
gv_start = 1.
gv_cnt = 1.
LOOP AT gt_doc INTO gs_doc.
PERFORM get_attachment.
ENDLOOP.
IF gt_contents_bin IS INITIAL.
gv_message = 'No attachments selected.'.
message = gv_message.
ELSE.
PERFORM email_create.
PERFORM send_email.
ENDIF.
message = gv_message.
ENDIF.
LOOP AT gt_email INTO gs_email.
CLEAR gs_receivers.
gs_receivers-receiver = gs_email-email_add.
gs_receivers-com_type = lc_send_internet.
gs_receivers-rec_type = lc_internet.
APPEND gs_receivers TO gt_receivers.
ENDLOOP.
OPEN DATASET docs-file_name FOR INPUT IN BINARY MODE.
IF sy-subrc <> 0.
CONCATENATE 'Could not open file' docs-file_name
INTO message SEPARATED BY space.
PERFORM update_log USING imp
message
docs-file_name.
EXIT.
ENDIF.
DO.
READ DATASET docs-file_name INTO pdf LENGTH lv_size.
IF sy-subrc <> 0.
EXIT.
ENDIF.
pdf_size = pdf_size + lv_size.
APPEND pdf.
ENDDO.
* Move the 134 character table to a 255 format need for PDF attachment
CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE'
EXPORTING
line_width_dst = 255
TABLES
content_in = lt_pdf[]
content_out = lt_contents_bin[]
EXCEPTIONS
err_line_width_src_too_long = 1
err_line_width_dst_too_long = 2
err_conv_failed = 3
OTHERS = 4.
* Add the contents to the table that will have all the attachments
CLEAR ls_contents_bin.
LOOP AT lt_contents_bin INTO ls_contents_bin.
APPEND ls_contents_bin TO gt_contents_bin.
CLEAR gs_contents_bin.
ENDLOOP.
CLEAR: lv_lines_bin, gs_packing_list.
* Set up the name & Description
WRITE gs_doc-document TO lv_document NO-ZERO.
WRITE gs_doc-document TO lv_document15 NO-ZERO.
WRITE gs_doc-item TO lv_item NO-ZERO.
WRITE gs_doc-item TO lv_item6 NO-ZERO.
WRITE gv_cnt TO lv_cnt NO-ZERO.
CONDENSE: lv_document NO-GAPS,
lv_document15 NO-GAPS,
lv_item NO-GAPS,
lv_item6 NO-GAPS,
lv_cnt NO-GAPS.
CONCATENATE lv_document lv_item lv_cnt
INTO gs_packing_list-obj_name.
CONCATENATE lv_document15 lv_item6 lv_cnt
INTO gs_packing_list-obj_descr
SEPARATED BY space.
* Set up the packing list describint the current attachment
DESCRIBE TABLE lt_contents_bin LINES lv_lines_bin.
READ TABLE lt_contents_bin INTO ls_contents_bin INDEX lv_lines_bin.
gs_packing_list-transf_bin = 'X'.
gs_packing_list-head_start = gv_start.
gs_packing_list-head_num = gv_start.
gs_packing_list-body_start = gv_start.
gs_packing_list-doc_type = 'PDF'.
gs_packing_list-doc_size = lv_pdf_size.
gs_packing_list-body_num = lv_lines_bin.
APPEND gs_packing_list TO gt_packing_list.
* Set up start position for next attachment
gv_start = gv_start + lv_lines_bin.
gv_cnt = gv_cnt + 1.
ENDIF.
CLEAR: gs_contents_txt, gs_packing_list.
READ TABLE gt_doc INTO gs_doc INDEX 1.
lv_numc = gs_doc-document.
lv_vbeln = lv_numc.
* Create Message Body Title and Description
IF gs_imp-mail_mess IS INITIAL AND
gt_email_body IS INITIAL.
gs_contents_txt-line = 'See attachment.'.
APPEND gs_contents_txt TO gt_contents_txt.
ELSEIF NOT gs_imp-mail_mess IS INITIAL.
ls_text-mail_mess = gs_imp-mail_mess.
APPEND ls_text TO lt_text.
CALL FUNCTION 'CONVERT_STREAM_TO_ITF_TEXT'
EXPORTING
language = sy-langu
TABLES
text_stream = lt_text[]
itf_text = lt_mail_content[].
LOOP AT lt_mail_content INTO ls_mail_content.
gs_contents_txt-line = ls_mail_content-tdline.
APPEND gs_contents_txt TO gt_contents_txt.
ENDLOOP.
ELSE.
LOOP AT gt_email_body INTO gs_email_body.
gs_contents_txt-line = gs_email_body-email.
APPEND gs_contents_txt TO gt_contents_txt.
ENDLOOP.
ENDIF.
IF gs_imp-doc_type IS INITIAL.
READ TABLE gt_doc INTO gs_doc INDEX 1.
IF sy-subrc = 0.
gs_imp-doc_type = gs_doc-doc_type.
ENDIF.
ENDIF.
IF gs_imp-doc_type = 'TD'.
SELECT SINGLE vbeln INTO vbak FROM vbak
WHERE vbeln = lv_vbeln.
IF sy-subrc = 0.
CALL FUNCTION 'SD_SALES_DOCUMENT_READ'
EXPORTING
document_number = lv_vbeln
i_block = ' '
i_no_authority_check = 'X'
IMPORTING
ekuwev = ls_ekuwev.
IF NOT ls_ekuwev-name1 IS INITIAL.
CONCATENATE 'Deliver to ' ls_ekuwev-name1
INTO lv_obj_descript
SEPARATED BY space.
ENDIF.
ELSE.
SELECT SINGLE banfn INTO eban FROM eban
WHERE banfn = lv_vbeln.
IF sy-subrc = 0.
CONCATENATE 'Deliver to' 'Furst-McNess Company'
INTO lv_obj_descript
SEPARATED BY space.
ENDIF.
ENDIF.
ENDIF.
IF NOT gs_imp-doc_type IS INITIAL AND
lv_obj_descript IS INITIAL.
SELECT SINGLE description INTO lv_description
FROM zdoc_types
WHERE doc_type = gs_imp-doc_type.
IF sy-subrc = 0.
CONCATENATE 'McNess' lv_description 'Document'
INTO lv_obj_descript
SEPARATED BY space.
ENDIF.
ENDIF.
IF lv_obj_descript IS INITIAL.
gs_document_data-obj_descr = 'McNess Documents'.
ELSE.
gs_document_data-obj_descr = lv_obj_descript.
ENDIF.
gs_document_data-expiry_dat = sy-datum + 10.
gs_document_data-sensitivty = 'F'.
gs_document_data-doc_size = gv_total_size.
* Body of E-mail
CLEAR gs_packing_list.
gs_packing_list-head_start = 1.
gs_packing_list-head_num = 0.
gs_packing_list-body_start = 1.
gs_packing_list-body_num = gv_start.
gs_packing_list-doc_type = 'RAW'.
INSERT gs_packing_list INTO gt_packing_list INDEX 1.
TYPES: BEGIN OF lty_obj,
tp TYPE soos-objtp,
yr TYPE soos-objyr,
no TYPE soos-objno,
END OF lty_obj.
DATA: lv_objid TYPE sofolenti1-object_id,
ls_obj TYPE lty_obj,
lv_objtp TYPE soos-objtp.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = gs_document_data
put_in_outbox = ' '
commit_work = 'X'
IMPORTING
new_object_id = lv_objid
TABLES
packing_list = gt_packing_list[]
contents_txt = gt_contents_txt[]
contents_bin = gt_contents_bin[]
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.
CASE sy-subrc.
WHEN 1.
MESSAGE e007 INTO gv_message.
WHEN 2.
MESSAGE e008 INTO gv_message.
WHEN 3.
MESSAGE e009 INTO gv_message.
WHEN 4.
MESSAGE e010 INTO gv_message.
WHEN OTHERS.
MESSAGE e011 INTO gv_message.
ENDCASE.
ELSE.
ls_obj = lv_objid.
COMMIT WORK AND WAIT.
*** Try to verify the record is ready to send - wait only 100 times
DO 100 TIMES.
SELECT SINGLE objtp INTO lv_objtp
FROM soos
WHERE objtp = ls_obj-tp AND
objyr = ls_obj-yr AND
objno = ls_obj-no.
IF sy-subrc = 0.
EXIT.
ENDIF.
ENDDO.
SUBMIT rsconn01 WITH mode = 'INT' AND RETURN.
* gv_message = '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.
User | Count |
---|---|
5 | |
4 | |
3 | |
2 | |
2 | |
2 | |
1 | |
1 | |
1 |