[SAP] Generische Objektdienste / Generic Object Services (GOS) / Ablage von SAPoffice-Dokumenten

Allgemein

  • Nutzung in Transaktionen zur Dokumentenablage unter GOS-Menü -> Anlegen -> Anlage anlegen
  • Es werden sog. SAP-Office-Objekte (Notizen, PDFs, Tabellen etc.) verknüpft. Diese werden über die SAP-Standard Ablagekategorie SOFFDB physisch in der SAP-Datenbank (Tabelle SOFFCONT1) selbst (nicht im externen Archivsystem) gespeichert
  • Nachteile: Speicherung der Daten physisch in SAP-Tabellen, nicht wie bei ArchiveLink in einem ext. Archivsystem

Transaktionen

OAC0 (CMS Customizing Content Repositories)
OAC2 (SAP ArchiveLink Dokumentarten global)
OAC3 (SAP ArchiveLink Verknüpfungen)
SWO1 (Business Object Builder)

Tabellen

SDOKSTCA (SDOK: Speicherkategorien physischer Informationsobjekte)
TOJTB (Business Object Repository Grunddaten)
SGOSATTR (SGOS: Attribute der generischen Dienste)
MDOBLREL (Modelldaten: Verknüpfungstypen)
SOOD (SAPoffice: Objektdefinition)
SOFM (SAPoffice: Mappe Inhalt)
SOC3 (SAPoffice: DB für Objekte (Import/Export))
SOC3N (SAPoffice: DB für Objekte (Header/Content)
SRGBTBREL (Verknüpfungen im GOS Umfeld)
SOFFLOIO (SOFF: Instanzen logischer Informationsobjekte)
SOFFPHIO (SOFF: Instanzen physischer Informationsobjekte)
SOFFCONT1 (SOFF: Tabelle für Dokumentinhalte (Import/Export))
SOFFPHF (SOFF: Dateien physischer Informationsobjekte)

Reports

RSGOSCHECK (Programm für GOS überprüfen)

Klassen

CL_GOS_ATTACHMENT_QUERY (Statistiken für Anlagen)
CL_BINARY_RELATION (API für Binäre Verknüpfung)
CL_ALINK_CONNECTION (ArchiveLink Verknüpfungen)

User-Parameter

SD_SWU_ACTIVE (Workflowbox in VA02 & VA03 aktivieren)

Links

[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.