Enterprise Resource Planning Blog Posts by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
  • 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

ComponentPurpose

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 

rameshreddy_k_0-1765256445586.png

Step - 2: Click on Create and enter title description, type as Executable Program and Click on Save button. Then provide Package and request number. 

rameshreddy_k_1-1765256445599.png

Step-3 Declare all data declarations for tables

rameshreddy_k_2-1765256445663.png

Step– 4: Define Parameters for user input

rameshreddy_k_3-1765256445591.png

Step- 5 : Define the Notification number, Instid, Typeid, and Catid to get attachment.

rameshreddy_k_4-1765256445592.png

Step- 6 : using standard method (cl_binary_relation=>read_links) to get attachment from iw22 based on notification number

rameshreddy_k_5-1765256445590.png

Step-7 : using call function (BINARY_RELATION_DELETE) to delete Delete a Binary Relationship

rameshreddy_k_7-1765256445751.png

Step-8 Assigning values to (SO_OBJECT_DELETE) to Deleting an object from a folder

rameshreddy_k_8-1765256445830.png

 

rameshreddy_k_9-1765256445851.png

 

 

 

Execution Flow

🔹Step 1: Enter Notification Number

rameshreddy_k_0-1764757826112.png

🔹Step 2: Execute Program to Delete Attachment & Check IW22 Attachments → Confirm Deletion

rameshreddy_k_10-1753768019226.png
rameshreddy_k_11-1753768019230.png

rameshreddy_k_12-1753768019231.png

 

*&---------------------------------------------------------------------*
*& 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

 

Labels in this area