Enterprise Resource Planning Blog Posts by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
dharmesh_kumar
Explorer
11,548
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.​


  2. 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.​


  3. 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.​


  4. 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.
4 Comments