Generische Objektdienste (Archive Link): Wie lege ich nach Ablage eines Dokumentes die Verknüpfung an?

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
4 Beiträge • Seite 1 von 1
4 Beiträge Seite 1 von 1

Generische Objektdienste (Archive Link): Wie lege ich nach Ablage eines Dokumentes die Verknüpfung an?

Beitrag von DeathAndPain (Top Expert / 1833 / 222 / 401 ) »
Hallo zusammen,

Nach über 10 Jahren muss ich mich mal wieder mit den Generischen Objektdiensten beschäftigen. Diese sind nach meinem Verständnis modulübergreifend und können als diese kleine Toolbox eingebunden werden. Letzteres passiert bei meinem Modul mehr oder weniger automatisch.

Das Customizing ist jetzt so weit gediehen, dass man damit Dokumente vom lokalen Rechner im ArchiveLink ablegen kann. Nur sollte man sie hinterher auch wieder anzeigen können, und dafür ist dem Buch SAP Records Management zufolge eine Verknüpfung zwischen dem Objekt und der erzeugten Dokumenten-ID im Objektverknüpfungsmodell erforderlich (siehe Transaktion SOBL_MODEL). Es reicht also nicht aus, dass ArchiveLink beim Ablegen eine Verknüpfung zwischen Objekt und Dokumenten-ID herstellt: damit man das erzeugte Dokument hinterher auch wieder über die Generischen Objektdienste anzeigen lassen kann, ist eine solche zusätzliche Verknüpfung erforderlich.

1. Problem: Wie bekomme ich die Dokumenten-ID des Archivs für das neu abgelegte Dokument?

Für dieses Problem habe ich durch Debuggen eine... halbe... Lösung gefunden. Es gibt den FB ARCHIV_GET_CONNECTIONS, mit dem man alle existierenden Dokumenten-IDs zu einem Objekt samt Ablagedatum holen kann. Man könnte also den FB vor der Ablage aufrufen und hinterher nochmal und die Rückgaben vergleichen. Die beim zweiten Aufruf neu hinzugekommenen Einträge wären dann die neuen. Kommt mir aber irgendwie krückig vor.

2. Problem: Wie kann ich nach dem Aufruf der Generischen Objektdienste ein User Exit einbinden, damit ich diese zusätzliche Verknüpfung erzeugen kann?

Die Verknüpfung selbst wird dem Buch zufolge mit der Methode CL_BINARY_RELATION=>CREATE_LINK angelegt. Dazu muss ich neben dem BOR-Typ und der Objekt-ID, die ich natürlich habe, auch die erzeugte Dokumenten-ID kennen (siehe Problem 1). Aber auch, wenn ich diese Daten habe, weiß ich nicht, wie ich im Standard ein entsprechendes Coding eingebunden bekomme. Da diese Verknüpfungen offenbar wichtig für das Konzept der Generischen Objektdienste (GOS) sind, hätte ich erwartet, dass bei der Dokumentenablage-Funktion in den GOS eine entsprechende Funktionalität bzw. ein User Exit (BADI etc.) vorhanden ist, der hierfür genutzt werden kann. Ich habe aber noch nicht mal im Debugger einen passenden Absprungpunkt finden können.

Von daher ist mir nicht klar, wie man das mit den Verknüpfungen in den GOS richtig implementiert.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Generische Objektdienste (Archive Link): Wie lege ich nach Ablage eines Dokumentes die Verknüpfung an?

Beitrag von IHe (Specialist / 148 / 35 / 48 ) »
Bei der Verwendung von Archivelink wird zunächst ein Archivobjekt mittels ARCHIVOBJECT_CREATE_TABLE erstellt und anschließend die Objektverknüpfung mittels ARCHIVE_CONNECTION_INSERT:

Code: Alles auswählen.

   lv_archive_id_ed = iv_archiv_id.

    CALL FUNCTION 'ARCHIVOBJECT_CREATE_TABLE'
      EXPORTING
        archiv_id                = lv_archive_id_ed
        document_type            = iv_doc_type
        length                   = lv_length
      IMPORTING
        archiv_doc_id            = lv_arc_id
      TABLES
        archivobject             = lt_archivobject
        binarchivobject          = lt_bin
      EXCEPTIONS
        error_kernel             = 1
        error_communicationtable = 2
        error_archiv             = 3.
    IF sy-subrc = 0.

      lv_object_id  = iv_sap_belegnr.
      lv_sap_object = iv_sap_objekt.                                           "VTTL, VBRK LIKP o.ä.

      lv_creadat      = sy-datum.

      lv_dokumentart = iv_dokumentart.

      CALL FUNCTION 'ARCHIV_CONNECTION_INSERT'
        EXPORTING
          archiv_id             = lv_archive_id_ed
          arc_doc_id            = lv_arc_id
          ar_date               = lv_creadat
          ar_object             = lv_dokumentart
          object_id             = lv_object_id
          sap_object            = lv_sap_object
          doc_type              = iv_doc_type
        EXCEPTIONS
          error_connectiontable = 1
          OTHERS                = 2.
      IF sy-subrc <> 0.
        RAISE gos_link_error.
      ENDIF.
    ELSE.
      RAISE archiv_create_error.
    ENDIF.
  ENDIF.
Ohne Archivelink nur mit GOS sieht der Ablauf etwas anders aus:

Code: Alles auswählen.

* PDF speichern
  lv_so_obj_id = ls_folder_id.
  CALL FUNCTION 'SO_DOCUMENT_INSERT_API1'
    EXPORTING
      folder_id                  = lv_so_obj_id
      document_data              = ls_document_data
      document_type              = 'PDF'
    IMPORTING
      document_info              = ls_docinfo
    TABLES
      contents_hex               = lt_contents_hex
    EXCEPTIONS
      folder_not_exist           = 1
      document_type_not_exist    = 2
      operation_no_authorization = 3
      parameter_error            = 4
      x_error                    = 5
      enqueue_error              = 6
      OTHERS                     = 7.

  CASE sy-subrc.
    WHEN 1.
      RAISE folder_not_exist.
    WHEN 2.
      RAISE document_type_not_exist.
    WHEN 3.
      RAISE operation_no_authorization.
    WHEN 4.
      RAISE parameter_error.
    WHEN 5.
      RAISE doc_insert_error.
    WHEN 6.
      RAISE doc_insert_error.
    WHEN 7.
      RAISE doc_insert_error.
  ENDCASE.

  ls_object_a-instid = iv_objectkey.
  ls_object_a-typeid = iv_object.
  ls_object_a-catid  = 'BO'.

  ls_object_b-instid = ls_docinfo-doc_id.
  ls_object_b-typeid = 'MESSAGE'.
  ls_object_b-catid  = 'BO'.

  TRY.
      CALL METHOD cl_binary_relation=>create_link
        EXPORTING
          is_object_a = ls_object_a
          is_object_b = ls_object_b
          ip_reltype  = 'ATTA'.
    CATCH cx_obl_parameter_error .
      RAISE link_parameter_error.
    CATCH cx_obl_model_error .
      RAISE link_model_error.
    CATCH cx_obl_internal_error .
      RAISE link_internal_error.
  ENDTRY.

  IF iv_commit = abap_true.
    COMMIT WORK.
  ENDIF.
Wenn es um lokale Dateien im Anwenderdialog mit Archvelinkablage geht ist dies eine gute Alternative:

Code: Alles auswählen.

  CALL FUNCTION 'ARCHIV_CREATE_DIALOG_META'
    EXPORTING
      ar_object                = iv_archiv_object                              
      object_id                = iv_object_id                                  "z.B. TKNUM
      sap_object               = iv_sap_object                                 "z.B. VTTK
    IMPORTING
      archiv_doc_id            = lv_doc_id
      documentclass            = lv_doctyp
    CHANGING
      infiletab                = lt_infiletab
    EXCEPTIONS
      error_archiv             = 1
      error_communicationtable = 2
      error_connectiontable    = 3
      error_kernel             = 4
      error_parameter          = 5
      error_scanqueue          = 6
      canceled_by_user         = 7
      OTHERS                   = 8.

Folgende Benutzer bedankten sich beim Autor IHe für den Beitrag (Insgesamt 2):
ewxDeathAndPain

Ingo Hoffmann

ECC|S/4HANA|BTP
dbh SAP Solutions

Re: Generische Objektdienste (Archive Link): Wie lege ich nach Ablage eines Dokumentes die Verknüpfung an?

Beitrag von DeathAndPain (Top Expert / 1833 / 222 / 401 ) »
Vielen Dank soweit. Ich habe nur trotzdem nicht verstanden, an welcher Stelle ich dieses Coding hinterlegen soll. Die generischen Objektdienste sind ja quasi eine Black Box, die man halt einbindet (bzw. die an der Stelle, wo ich sie brauche, schon vom Standard angeboten werden). Da kann man draufklicken und ein Dokument ablegen. Anschließend ist es abgelegt. Ich lege es also gar nicht selber ab. Nur wird das Dokument anschließend in den GOS nicht wieder zum Anzeigen angeboten. Den ganzen Dropdown-Punkt für die Anzeige abgelegter Dokumente existiert im GOS-Symbol nicht. Ich bin davon ausgegangen, dass das daran liegt, dass die GOS-Verknüpfung nicht existiert. GOS legt sie also beim Ablegen von Dokumenten nicht eigenständig an. Coding von mir, das dies erledigen könnte, kommt nicht zur Ausführung mangels (mir bekanntem) User Exit im GOS. Das ist die Sackgasse, in der ich stecke.

Re: Generische Objektdienste (Archive Link): Wie lege ich nach Ablage eines Dokumentes die Verknüpfung an?

Beitrag von Lukas Sanders (ForumUser / 68 / 7 / 34 ) »
Blöde Frage: Ist das Archivcustomizing (SAP NetWeaver --> Application Server --> Basis-Services --> ArchiveLink --> Grundcustomizing --> Verknüpfungen bearbeiten) vollständig?

Ich verwende immer den Funktionsbaustein ARCHIV_CREATE_TABLE (welcher die o. g. Bausteine ARCHIVOBJECT_CREATE_TABLE und ARCHIV_CONNECTION_INSERT aufruft) und mache vorher im Customizing einen entsprechenden Eintrag (i. d. R. mit einer kundeneigenen Dokumentenart, welche vorher einen Punkt höher im Customizing angelegt wird).

Folgende Benutzer bedankten sich beim Autor Lukas Sanders für den Beitrag:
msfox


Seite 1 von 1

Vergleichbare Themen

1
Antw.
2070
Views
generische Objektdienste (BOR) Anlagen anlegen
von Kaiwalker » 14.05.2008 14:33 • Verfasst in ABAP Objects®
8
Antw.
8195
Views
generische Objektdienste (BOR) - Ermitteln Anzahl Anlagen
von Kaiwalker » 25.02.2008 09:15 • Verfasst in ABAP Objects®
3
Antw.
3708
Views
generische Objektdienste beim Business Objekt Mitarbeiter
von michael.schoeffer » 08.11.2006 15:36 • Verfasst in Human Resources
6
Antw.
11919
Views
Button "Generische Objektdienste" fehlt
von ReinerZufall » 27.07.2017 10:12 • Verfasst in SAP - Allgemeines
2
Antw.
2360
Views
Fileupload / Download eines Dokumentes
von Jogi2k5 » 13.05.2005 07:41 • Verfasst in Web-Dynpro, BSP + BHTML

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.