Wednesday, 12 February 2020 06:55

Delete GOS Attachment from an Order (IW33) – ABAP Code

Written by https://blogs.sap.com/2020/02/13/delete-gos-attachment-from-an-order-iw33-abap-code/
Rate this item
(0 votes)

Prerequisite:

You have an order number which has got attachment(s).

Overview:

I was trying hard to delete this attachment problematically and would like to share the code.

Steps:

  1. Read document links
     DATA: ls_lpor TYPE sibflporb, ls_relst TYPE obl_s_relt, lt_relst TYPE obl_t_relt, lt_links TYPE obl_t_link, lo_root TYPE REF TO cx_root. ls_lpor-instid = lv_aufnr. ls_lpor-typeid = 'BUS2007'. ls_lpor-catid = 'BO'. ls_relst-sign = 'I'. ls_relst-option = 'EQ'. ls_relst-low = 'ATTA'. APPEND ls_relst TO lt_relst. * Read document links CALL METHOD cl_binary_relation=>read_links EXPORTING is_object = ls_lpor it_relation_options = lt_relst IMPORTING et_links = lt_links.​
  1. Find the document which you want to delete from internal table LT_LINKS
    LOOP AT lt_links ASSIGNING FIELD-SYMBOL(<fs_links>) WHERE instid_b CS lv_objno. "<--this is the document ID which we want to delete DATA(ls_object_a) = VALUE borident( objkey = <fs_links>-instid_a objtype = <fs_links>-typeid_a ). DATA(ls_object_b) = VALUE borident( objkey = <fs_links>-instid_b objtype = <fs_links>-typeid_b ). EXIT. ENDLOOP.​
  2. Delete binary relation
     IF <fs_links> IS ASSIGNED. CALL FUNCTION 'BINARY_RELATION_DELETE' EXPORTING obj_rolea = ls_object_a obj_roleb = ls_object_b relationtype = 'ATTA' * FIRE_EVENTS = 'X' EXCEPTIONS entry_not_existing = 1 internal_error = 2 no_relation = 3 no_role = 4 OTHERS = 5. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF.​
  3. Delete SO Object
     DATA: ls_folder_id TYPE soodk, ls_object_id TYPE soodk. ls_folder_id-objtp = <fs_links>-instid_b+0(3). ls_folder_id-objyr = <fs_links>-instid_b+3(2). ls_folder_id-objno = <fs_links>-instid_b+5(12). ls_object_id-objtp = <fs_links>-instid_b+17(3). ls_object_id-objyr = <fs_links>-instid_b+20(2). ls_object_id-objno = <fs_links>-instid_b+22(12). CALL FUNCTION 'SO_OBJECT_DELETE' EXPORTING folder_id = ls_folder_id object_id = ls_object_id EXCEPTIONS communication_failure = 1 folder_not_empty = 2 folder_not_exist = 3 folder_no_authorization = 4 forwarder_not_exist = 5 object_not_exist = 6 object_no_authorization = 7 operation_no_authorization = 8 owner_not_exist = 9 substitute_not_active = 10 substitute_not_defined = 11 system_failure = 12 x_error = 13 OTHERS = 14. IF sy-subrc = 0. COMMIT WORK AND WAIT. ENDIF. ENDIF. ​

There is no proper error handling and code modularization, so please do it yourself.

Conclusion:

If you follow these above mentioned steps, you will be able to selectively delete the attachments from and order.

Read 10 times

Leave a comment

Make sure you enter all the required information, indicated by an asterisk (*). HTML code is not allowed.