ayahya82
ayahya82

Reputation: 386

How to display list of attachments from Generic Object Services

I have a report that should display an attachment list from an object.

For instance, in transaction FI02 (maintenance of banks), the GOS toolbar has the menu Attachment List:

GOS toolbar as context menu

GOS attachment list popup

I want to display this list. What is the best way to display it?

REPORT zay_gos_demo.

DATA ls_appl_object     TYPE gos_s_obj.
DATA lo_gos_api         TYPE REF TO cl_gos_api.
DATA lt_attachment_list TYPE gos_t_atta.
DATA lt_role_filter     TYPE gos_t_rol.

DATA ls_attachment   TYPE gos_s_atta.
DATA ls_attachm_cont TYPE gos_s_attcont.
DATA ls_atta_key     TYPE gos_s_attkey.

ls_appl_object-typeid = 'KNA1'.
ls_appl_object-instid = '0000000001'.
ls_appl_object-catid  = 'BO'. "BO - BOR Object
"CL - Persistent Class

START-OF-SELECTION.

* create instance of GOS API providing unique application object
  TRY.
  lo_gos_api = cl_gos_api=>create_instance( ls_appl_object ).
*   get attachment list for this object (if needed restrict selection
*   by adding certain roles to filter table; initial table means: get
*   attachments in all roles)
  APPEND cl_gos_api=>c_attachment TO lt_role_filter.
  APPEND cl_gos_api=>c_annotation TO lt_role_filter.
  APPEND cl_gos_api=>c_website TO lt_role_filter.
  lt_attachment_list = lo_gos_api->get_atta_list( lt_role_filter ).
CATCH cx_gos_api.
*   error handling
  ENDTRY.

I found other example and I want to test it:

REPORT zay_attachment_list_display.

DATA: go_attachments  TYPE REF TO cl_gos_attachments,
  g_att_container TYPE REF TO cl_gui_custom_container,
  ls_object       TYPE borident,
  lo_bitem        TYPE REF TO cl_sobl_bor_item.


ls_object-objtype = 'KNA1'.

ls_object-objkey = '0000000001'.


IF NOT go_attachments IS INITIAL.

  CLEAR go_attachments.

ENDIF.

CREATE OBJECT g_att_container
  EXPORTING
   container_name              = 'ATTS'
  EXCEPTIONS
   cntl_error                  = 1
   cntl_system_error           = 2
   create_error                = 3
   lifetime_error              = 4
   lifetime_dynpro_dynpro_link = 5.

IF sy-subrc NE 0.

*    ADD your handling

ENDIF.

CREATE OBJECT lo_bitem
 EXPORTING
  is_bor = ls_object.

IF go_attachments IS INITIAL.

CREATE OBJECT go_attachments
  EXPORTING
    io_object      = lo_bitem
    ip_check_arl   = 'X'
    ip_check_bds   = 'X'
    io_container   = g_att_container
*       is_layout      = ls_layout
*       ip_mode        = wf_mode
    ip_notes       = 'X'
    ip_attachments = 'X'
    ip_urls        = 'X'.

ELSE.

  go_attachments->set_container( g_att_container ).

ENDIF.

  go_attachments->display( ).

I created a custom control in dynpro 0100 and I named it ATTS. I still can't get the attachment list of GOS. Did I miss something?

Upvotes: 2

Views: 12439

Answers (1)

ayahya82
ayahya82

Reputation: 386

After weeks of searching and asking. it was really simple. just call the function GOS_ATTACHMENT_LIST_POPUP.

Example:

DATA: ls_object    TYPE sibflporb,
      save_request TYPE sgs_flag.
ls_object-instid = 'FR 1234567890'.
ls_object-typeid = 'BUS1011'.
ls_object-catid = 'BO'.
CALL FUNCTION 'GOS_ATTACHMENT_LIST_POPUP'
  EXPORTING
    is_object       = ls_object
    ip_mode         = 'E' " Edit mode
  IMPORTING
    ep_save_request = save_request.
IF save_request = 'X'.
  COMMIT WORK.
ENDIF.

Upvotes: 3

Related Questions