# Generische Objektdienste: Anhänge über RFC anlegen Quelle: https://erlebe-software.de/abap-und-co/anhaenge-fuer-generische-objektdienste-ueber-rfc-anlegen/ Stand: 2026-07-28 **Generische Objektdienste** (GOS) können in vielen SAP Anwendungen genutzt werden. Sie bieten diverse Optionen um Business Objekte zu bearbeiten. Unter anderem können damit Anhänge zu Business Objekten hinzugefügt werden. Dieser Beitrag zeigt, wie auch über RFC Bausteine Anhänge zu Objekten hinzugefügt werden können. ## Generische Objektdienste in der SAP GUI In allen Anwendungen, in denen Generische Objektdienste zur Verfügung stehen, erfolgt die Anlage von Anhängen über die Oberfläche. Es gibt aber auch Fälle, in denen die Dokumente automatisiert angehängt werden sollen oder der Benutzer kein Zugriff auf das SAP System hat. [![Generische Objektdienste in der SAP GUI](https://erlebe-software.de/files/2014/04/041014_0711_AnhngefrGen1.png)](https://erlebe-software.de/files/2014/04/041014_0711_AnhngefrGen1.png) Abbildung 1: Generische Objektdienste in der SAP GUI ### Anlage in den Generischen Objektdiensten über einen Funktionsbaustein mit RFC Unterstützung #### Voraussetzungen zum Anlegen einer Datei Folgende Daten werden benötigt: - **Object-ID:** Das Objekt im SAP, dem der Anhang zugeordnet werden soll. Dies könnte z.B. ein Angebot im Bereich des Vertriebs sein. - **SAP-Object:** Objekttyp von SAP. Für ein Angebot wäre dies Beispielsweise "BUS2031". - **Dateiname:** Der Dateiname mit Endung, damit die Datei korrekt angelegt und später auch wieder geöffnet werden kann - **Dateilänge:** Die Länge der Datei im Binärformat. - **Datei:** Die Datei im Binärformat. #### Der Funktionsbaustein zum Einfügen Für das Einfügen der Daten wird der Funktionsbaustein SO_OBJECT_INSERT genutzt. Dieser wird wie folgt implementiert: | CALL FUNCTION 'SO_OBJECT_INSERT' EXPORTING folder_id = ls_fol_id object_type = 'EXT' object_hd_change = ls_obj_data IMPORTING object_id = ls_obj_id TABLES objhead = lt_objhead objcont = lt_content EXCEPTIONS active_user_not_exist = 35 folder_not_exist = 6 object_type_not_exist = 17 owner_not_exist = 22 parameter_error = 23 OTHERS = 1000. | | --- | #### Die Parameter des Funktionsbausteins Die Folder ID kann über den Funktionsbaustein SO_FOLDER_ROOT_ID_GET ausgelesen werden. Bei diesem Baustein wird zwischen verschiedenen Regionen unterschieden. Diese Regionen sind im Wertebereich der Domäne SO_FOL_RG zu finden. Der Ordner beschreibt, wo die Datei abgelegt wird. Über Object Type wird angegeben, um was für eine Art es sich bei diesem Anhang handelt. Die Werte dazu finden sich in der Tabelle TSOTD. Der Parameter Object HD Change enthält Informationen über die Datei wie beispielsweise der Dateiname, die Endung und auch die Dateilänge. Bei den Tabellen wird der Inhalt der Datei als Stream dem Parameter "objcont" übergeben. Hierbei kann es nötigt sein, dass der Filestream der Datei noch angepasst werden muss. Dazu können die folgenden Funktionsbausteine verwendet werden: - SCMS_BINARY_TO_XSTRING (Binär zu XString um die Zeilenlänge im nächsten Schritt kürzen zu können) - SCMS_XSTRING_TO_BINARY (Kürzen der Zeilenlänge und Konvertierung zu Binärstream) - SO_CONVERT_CONTENTS_BIN (Weitere Verarbeitung des Binärstreams) Die Tabelle für den Parameter "objhead" beinhaltet Kopfdaten der Anlage und kann wie folgt befüllt werden: | CONCATENATE '&SO_FILENAME=' iv_filename INTO ls_objhead. APPEND ls_objhead TO lt_objhead. ls_objhead = '&SO_FORMAT=BIN' . APPEND ls_objhead TO lt_objhead. | | --- | #### Verknüpfung zwischen Datei und Objekt Durch den Baustein wird die Objekt-ID des neu angelegten Objekts zurückgegeben. Über diese muss noch eine Verbindung zwischen dem angelegten Objekt und dem Beleg erstellt werden: | ls_folmem_k-foltp = ls_fol_id-objtp. ls_folmem_k-folyr = ls_fol_id-objyr. ls_folmem_k-folno = ls_fol_id-objno. ls_folmem_k-doctp = ls_obj_id-objtp. ls_folmem_k-docyr = ls_obj_id-objyr. ls_folmem_k-docno = ls_obj_id-objno. lv_ep_note = ls_folmem_k. ls_note-objtype = 'MESSAGE'. ls_note-objkey = lv_ep_note. CALL FUNCTION 'BINARY_RELATION_CREATE_COMMIT' EXPORTING obj_rolea = ls_object obj_roleb = ls_note relationtype = 'ATTA' EXCEPTIONS OTHERS = 1. | | --- | Für "ls_object" werden die Objekt-ID und das SAP-Objekt benötigt: | ls_object-objkey = object_id. ls_object-objtype = sap_object. | | --- | Nun ist der Anhang angelegt und die Verbindung besteht. Neben der Anlage von einfachen Anlagen können auch Business Dokumente sowie Dokumente im ArchivLink angelegt werden. Nutzen Sie Generische Objektdienste? Kennen Sie noch besondere Anwendungsfälle bei denen die Anlage von Anhängen über RFC nötig ist? Ich freue mich auf Ihre Kommentare. Für weitere Fragen zum Thema stehe ich ihnen gerne zur Verfügung.