Thursday, November 22, 2007

ABAP - Sending GOS attachments to an email address

Description Sending GOS attachements to an email address for the given business object and ID. This program is tested in the version 4.6C.

REPORT z_send_gos_attachments.
* Selection-screen.
SELECTION-SCREEN BEGIN OF LINE.
* Email address
SELECTION-SCREEN COMMENT 2(20) v_text1 FOR FIELD p_email.
PARAMETERS: p_email(50) OBLIGATORY.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Business object type
SELECTION-SCREEN COMMENT 2(20) v_text2 FOR FIELD p_bo.
PARAMETERS: p_bo TYPE borident-objtype DEFAULT 'BUS2102'.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Business object ID
SELECTION-SCREEN COMMENT 2(20) v_text3 FOR FIELD p_boid.
PARAMETERS: p_boid TYPE borident-objkey DEFAULT '0060000717'.
SELECTION-SCREEN END OF LINE.
* Internal table declarations.
DATA: lt_links TYPE TABLE OF relgraphlk,
lv_document_id TYPE sofolenti1-doc_id,
lt_plist LIKE sopcklsti1 OCCURS 2 WITH HEADER LINE,
lt_soli LIKE soli OCCURS 100 WITH HEADER LINE,
lt_rec_tab LIKE somlreci1 OCCURS 1 WITH HEADER LINE,
lt_roles TYPE STANDARD TABLE OF relroles,
lt_appllinks TYPE STANDARD TABLE OF srl_aprel,
lt_object_content_l LIKE solisti1 OCCURS 0 WITH HEADER LINE,
lt_object_content LIKE solisti1 OCCURS 0 WITH HEADER LINE,
lt_doc_dat LIKE sofolenti1.
* Variables.
DATA: lv_objtp LIKE soodk-objtp,
lv_lang LIKE tst01-dlang,
lv_line_size TYPE i VALUE 255,
lv_name LIKE soextreci1-receiver.
* Work areas
DATA: lwa_doc_data LIKE sodocchgi1,
lwa_document_data LIKE sofolenti1,
lwa_links LIKE LINE OF lt_links,
lwa_object TYPE borident.
* Initialization.
INITIALIZATION.
* Set the texts.
v_text1 = 'Email addr.'.
v_text2 = 'Business obj type'.
v_text3 = 'Business obj ID'.
* Start-of-selection.
START-OF-SELECTION.
* Assign the values
lwa_object-objkey = p_boid.
lwa_object-objtype = p_bo.
* Get the attachment list for the input business object type
* and name.
CALL FUNCTION 'SREL_GET_NEXT_RELATIONS'
EXPORTING
object = lwa_object
relationtype = 'ATTA'
TABLES
links = lt_links
roles = lt_roles
appllinks = lt_appllinks
EXCEPTIONS
internal_error = 1
no_logsys = 2
OTHERS = 3.
* Check the return code.
IF sy-subrc <> 0.
MESSAGE s208(00) WITH 'Error in FM SREL_GET_NEXT_RELATIONS'.
ENDIF.
* Process the attachment list
LOOP AT lt_links INTO lwa_links.
MOVE lwa_links-objkey_b TO lv_document_id.
* Read the data
CALL FUNCTION 'SO_DOCUMENT_READ_API1'
EXPORTING
document_id = lv_document_id
IMPORTING
document_data = lwa_document_data
TABLES
object_content = lt_object_content_l
EXCEPTIONS
document_id_not_exist = 1
operation_no_authorization = 2
x_error = 3
OTHERS = 4.
* Prepare the data.
lt_plist-transf_bin = 'X'.
lt_plist-head_start = 0.
lt_plist-head_num = 0.
lt_plist-body_start = 0.
lt_plist-body_num = 0.
lt_plist-doc_type = 'RAW'.
lt_plist-obj_descr = lwa_document_data-obj_descr.
APPEND lt_plist.
lt_plist-transf_bin = 'X'.
lt_plist-head_start = 0.
lt_plist-head_num = 0.
IF sy-tabix = 1.
lt_plist-body_start = 1.
ELSE.
DESCRIBE TABLE lt_object_content.
lt_plist-body_start = sy-tfill + 1.
ENDIF.
DESCRIBE TABLE lt_object_content_l LINES lt_plist-body_num.
lt_plist-doc_type = lwa_document_data-obj_type.
* Get the size.
READ TABLE lt_object_content_l INDEX lt_plist-body_num.
lt_plist-doc_size = ( lt_plist-body_num - 1 ) * lv_line_size
+ STRLEN( lt_object_content_l ).
APPEND lt_plist.
* Move the values to the main internal table.
APPEND LINES OF lt_object_content_l TO lt_object_content.
ENDLOOP.
* Move the receiver address.
MOVE: p_email TO lt_rec_tab-receiver,
'U' TO lt_rec_tab-rec_type.
APPEND lt_rec_tab.
* Set the language.
lwa_doc_data-obj_langu = sy-langu.
* Email subject.
CONCATENATE 'GOS '
p_boid
'attachments'
INTO lwa_doc_data-obj_descr
SEPARATED BY space.
* Set the user name.
lv_name = sy-uname.
* Send the email.
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = lwa_doc_data
sender_address = lv_name
sender_address_type = 'B'
TABLES
packing_list = lt_plist
contents_bin = lt_object_content
receivers = lt_rec_tab
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 e208(00) WITH 'Error in sending email'.
ENDIF.
COMMIT WORK.
* Send the email immediately.
SUBMIT rsconn01
WITH mode = 'INT'
AND RETURN.
* Success message.
MESSAGE s208(00) WITH 'Email sent'.
-->

No comments:

Blog Archive