[ABAP] Workflow: Workitems zu Objekt

* Einkaufsbelegnummer
PARAMETERS: p_po TYPE ekko-ebeln.
* Typ von Objekten in Persistenten Objektreferenzen, hier z.B. Klasse für Bestellungen
PARAMETERS: p_type TYPE sibftypeid DEFAULT 'CL_MM_PUR_WF_OBJECT_PO'.
* Kategorie von Objekten in Persistenten Objektreferenzen, hier z.B. Typ "Klassen"
PARAMETERS: p_catid TYPE sibfcatid DEFAULT 'CL'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_type.

* Sucht Objekttypen zu einem Muster
  DATA(it_objtypes) = cl_swf_utl_def_services=>query_objects( EXPORTING im_objcateg = p_catid
                                                                        im_objtype  = '*' ).

  DATA: it_return TYPE TABLE OF ddshretval.

* eigene Suchhilfe für Auswahl der Objekte anzeigen
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'TYPEID'      " Spalte der internen Tabelle bei value_tab
      dynpprog        = sy-repid
      dynpnr          = sy-dynnr
      dynprofield     = 'P_TYPE'      " Name des Dynpro-Feldes für die automatische Werterückgabe
      value_org       = 'S'           " Werteübergabe: C: zellenweise, S: strukturiert
      window_title    = 'Auswahl'
    TABLES
      value_tab       = it_objtypes   " Übergabe-Tabelle mit Werten für die Anzeige und Auswahl
      return_tab      = it_return     " Rückgabe-Tabelle mit den ausgewählten (geklickten) Elementen
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.

  IF sy-subrc = 0.
    IF lines( it_return ) > 0.
      MESSAGE it_return[ 1 ]-fieldval TYPE 'S'.
    ENDIF.
  ENDIF.

START-OF-SELECTION.

  DATA(lv_object_por) = VALUE sibflporb( instid = CONV #( p_po )
                                         typeid = p_type
                                         catid  = p_catid ).
  DATA: lv_return_code TYPE sy-subrc.
  DATA: it_task_filter TYPE STANDARD TABLE OF swr_task WITH DEFAULT KEY.
  DATA: it_worklist    TYPE STANDARD TABLE OF swr_wihdr WITH DEFAULT KEY.

* Workflow-Schnittstellen: Workitems zu Objekt
  CALL FUNCTION 'SAP_WAPI_WORKITEMS_TO_OBJECT'
    EXPORTING
      object_por  = lv_object_por
    IMPORTING
      return_code = lv_return_code
    TABLES
      task_filter = it_task_filter
      worklist    = it_worklist.

  cl_demo_output=>write_data( lv_object_por ).
  cl_demo_output=>write_data( lv_return_code ).
  cl_demo_output=>write_data( it_task_filter ).
  cl_demo_output=>write_data( it_worklist ).

* HTML-Code vom Demo-Output holen
  DATA(lv_html) = cl_demo_output=>get( ).

* Daten im Inline-Browser im SAP-Fenster anzeigen
  cl_abap_browser=>show_html( EXPORTING title       = 'Workflow'
                                        html_string = lv_html
                                        container   = cl_gui_container=>default_screen ).

* cl_gui_container=>default_screen erzwingen
  WRITE: space.

[ABAP] Anlagen zu Business-Objekten zählen

PARAMETERS: p_instid TYPE sibfboriid DEFAULT '000000001234567890'.
PARAMETERS: p_typeid TYPE sibftypeid DEFAULT 'BUS1001006'.
PARAMETERS: p_catid TYPE sibfcatid DEFAULT 'BO'.

START-OF-SELECTION.

* Schlüssel des Business-Objekts
  DATA(lv_object) = VALUE sibflporb( instid  = p_instid
                                     typeid  = p_typeid
                                     catid   = p_catid ).

* Statistiken für Anlagen -> Anlagen zählen
  DATA(it_stst) = cl_gos_attachment_query=>count_for_object( is_object = lv_object
                                                             ip_arl    = '' ).

* Übersicht zu angehangenen Objekten, COUNTER enthält die Anzahl
  cl_demo_output=>write_data( it_stst ).
  cl_demo_output=>display( ).

[ABAP] Klassen für Zugriff auf Business-Objekte

SAPoffice Dokumente

  • verlinkt auf Business Objekte via Object Relationship Service Tables
  • Klasse: CL_BINARY_RELATION (ersetzt FuBas SO_DOCUMENT*)
  • Tabellen: SRGBTBREL

Beispiel

* Quelle / Inspiration: https://www.inwerken.de/gos-anhange-auslesen-anlegen/

**********************************************************************
* Typen
**********************************************************************
TYPES: BEGIN OF ty_s_key,
         foltp     TYPE so_fol_tp,
         folyr     TYPE so_fol_yr,
         folno     TYPE so_fol_no,
         objtp     TYPE so_obj_tp,
         objyr     TYPE so_obj_yr,
         objno     TYPE so_obj_no,
         forwarder TYPE so_usr_nam,
       END OF ty_s_key.
**********************************************************************
* Selektionsbild
**********************************************************************
PARAMETERS: p_instid TYPE sibfboriid DEFAULT '000000001234567890'.
PARAMETERS: p_typeid TYPE sibftypeid DEFAULT 'BUS1001006'.
PARAMETERS: p_catid TYPE sibfcatid DEFAULT 'BO'.

START-OF-SELECTION.

* Schlüssel des Business-Objekts
  DATA(lv_object) = VALUE sibflporb( instid  = p_instid
                                     typeid  = p_typeid
                                     catid   = p_catid ).

* Verknüpfungsoptionen
* Verknüpfungstypen
  DATA(it_relopt) = VALUE obl_t_relt( ( sign   = 'I'
                                        option = 'EQ'
                                        low    = 'ATTA' " Anhänge
                                      )
                                      ( sign   = 'I'
                                        option = 'EQ'
                                        low    = 'NOTE' " Notizen
                                      )
                                      ( sign   = 'I'
                                        option = 'EQ'
                                        low    = 'URL'  " URLs
                                      )
                                    ).

  TRY.
* Verknüpfungen zum Objekt
      DATA(it_links) = VALUE obl_t_link( ).
      DATA(it_roles) = value obl_t_role( ).

* Verknüpfungen zum Objekt lesen
      cl_binary_relation=>read_links_of_binrels( EXPORTING
                                                   is_object           = lv_object
                                                   it_relation_options = it_relopt
                                                   ip_role             = 'GOSAPPLOBJ'
                                                 IMPORTING
                                                   et_links            = it_links
                                                   et_roles            = it_roles ).

      cl_demo_output=>write_data( it_links ).
      cl_demo_output=>write_data( it_roles ).

* Verknüpfungen vom Typ 'MESSAGE' durchgehen
      LOOP AT it_links ASSIGNING FIELD-SYMBOL(<l>) WHERE typeid_b = 'MESSAGE'.

        cl_demo_output=>line( ).

* Schlüssel einer Verknüpfung
        DATA(lv_key) = CONV ty_s_key( <l>-instid_b ).
        cl_demo_output=>write_data( lv_key ).

* Dokumenten-Grunddaten
        DATA(lv_doc_data) = VALUE sofolenti1( ).
* Dokumenteninhalt Text und Binär
        DATA(it_contx) = VALUE solix_tab( ).
        DATA(it_cont) = VALUE soli_tab( ).

* Daten des Dokuments lesen
        CALL FUNCTION 'SO_DOCUMENT_READ_API1'
          EXPORTING
            document_id                = CONV sofolenti1-doc_id( <l>-instid_b ) " Dokumenten-ID für SAPOffice == Instanz-ID
          IMPORTING
            document_data              = lv_doc_data
          TABLES
            object_content             = it_cont
            contents_hex               = it_contx
          EXCEPTIONS
            document_id_not_exist      = 1
            operation_no_authorization = 2
            x_error                    = 3
            OTHERS                     = 4.
        IF sy-subrc = 0.
          cl_demo_output=>write_data( lv_doc_data ).
          cl_demo_output=>write_data( it_cont ).
        ENDIF.

      ENDLOOP.

      cl_demo_output=>display( ).

    CATCH cx_root INTO DATA(e_txt).
      WRITE: / e_txt->get_text( ).
  ENDTRY.

Archivdokumente

  • Logische Dokumente, verlinkt auf Business Objekte via Connection Tables des Content Management Systems
  • Klasse: CL_ALINK_CONNECTION
  • Funktionen: find, find_by_doc_key, compose, insert, delete_by_key
  • Tabellen: TOAAR, TOAOM, TOJTB, TOA01, TOA02, TOA03

Beispiel

TRY.
    DATA(o_alink) = NEW cl_alink_connection( ).
* Suche von Verknüpfungen
    o_alink->find( EXPORTING 
                     sap_object = 'ZXYZ'                   " SAP ArchiveLink: Objekttyp des Business Objekts
                     object_id  = CONV saeobjid( '12345' ) " SAP ArchiveLink: Objekt-Id (Objektidentifikator)
                     mandt      = sy-mandt                 " Mandantenkennung des aktuellen Benutzers
                     archiv_id  = 'XY'                     " Content Repository Identifikation
                   IMPORTING
                     connections = DATA(it_conn) ).
    
    cl_demo_output=>display( it_conn ).
  CATCH cx_root.
ENDTRY.