- Introduction
In Sap PM, Users frequently attach documents to notifications (IW22/IW23) However, there are scenarios where attachments need to be deleted
1) Attachments uploaded by mistake
2) obsolete/outdated documents
Business Requirement
1) User enters notification number on selection screen
2) Program identifies attachments linked via GOS
3) Retrieve link relationship ATTA
4) Delete Binary Relation entry
5)Delete SO Object(actual attachment from repository)
6) commit and confirm deletion
Technical Components
Gos / BDS | Attachment Management |
CL_BINARY_RELATION=>READ_LINKS | Read Attachment Links |
BINARY_RELATION_DELETE | Remove Relationship |
SO_OBJECT_DELETE | Delete Document |
Object Type | (Notification) |
Relation Type | ATTA |
Application Flow
1.user enters notification number(QMEL-QMNUM)
2.Program reads attachment links using BDS
3.Extract object A + Object B (Document references)
4.Delete Binary relation(ATTA)
5.Delete attachment file from sapoffice folder
6.commit work
Key ABAP Logic Implementation
Step – 1: Go to SE38 transaction code, Create Program, shown as below
Step - 2: Click on Create and enter title description, type as Executable Program and Click on Save button. Then provide Package and request number.
Step-3 Declare all data declarations for tables
Step– 4: Define Parameters for user input
Step- 5 : Define the Notification number, Instid, Typeid, and Catid to get attachment.
Step- 6 : using standard method (cl_binary_relation=>read_links) to get attachment from iw22 based on notification number
Step-7 : using call function (BINARY_RELATION_DELETE) to delete Delete a Binary Relationship
Step-8 Assigning values to (SO_OBJECT_DELETE) to Deleting an object from a folder
Execution Flow
🔹Step 1: Enter Notification Number
🔹Step 2: Execute Program to Delete Attachment & Check IW22 Attachments → Confirm Deletion
*&---------------------------------------------------------------------*
*& Report ZTEST_DELETE_ATTCH
*&---------------------------------------------------------------------*
*& Deleting IW22 attachments using custom ABAP program
*&---------------------------------------------------------------------*
REPORT ztest_delete_attch.
DATA : ls_object_a TYPE borident,
ls_object_b TYPE borident,
ls_folder_id TYPE soodk,
ls_object_id TYPE soodk,
ls_lpor TYPE sibflporb,
ls_relst TYPE obl_s_relt,
lt_relst TYPE obl_t_relt,
lt_list TYPE obl_t_link.
FIELD-SYMBOLS: <fs_list> TYPE obl_s_link.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_no TYPE qmel-qmnum OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
" Prepare the logical object
ls_lpor-instid = p_no.
ls_lpor-typeid = 'BUS2038'.
ls_lpor-catid = 'BO'.
" Relation filter: ATTA → Attachments
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_list.
" Read first attachment
READ TABLE lt_list ASSIGNING <fs_list> INDEX 1.
IF sy-subrc = 0 AND <fs_list> IS ASSIGNED.
ls_object_a-objkey = <fs_list>-instid_a.
ls_object_a-objtype = <fs_list>-typeid_a.
ls_object_b-objkey = <fs_list>-instid_b.
ls_object_b-objtype = <fs_list>-typeid_b.
" Delete relationship
CALL FUNCTION 'BINARY_RELATION_DELETE'
EXPORTING
obj_rolea = ls_object_a
obj_roleb = ls_object_b
relationtype = 'ATTA'.
" Prepare folder object for deletion
ls_folder_id-objtp = <fs_list>-instid_b+0(3).
ls_folder_id-objyr = <fs_list>-instid_b+3(2).
ls_folder_id-objno = <fs_list>-instid_b+5(12).
ls_object_id-objtp = <fs_list>-instid_b+17(3).
ls_object_id-objyr = <fs_list>-instid_b+20(2).
ls_object_id-objno = <fs_list>-instid_b+22(12).
" Delete document from repository
CALL FUNCTION 'SO_OBJECT_DELETE'
EXPORTING
folder_id = ls_folder_id
object_id = ls_object_id.
COMMIT WORK AND WAIT.
ENDIF.
Conclusion
This program automatically deletes attachments from iw22 notifications
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.