- 2. Mai 2014
  2 Kommentare

Generische Objektdienste: Anhänge über RFC anlegen

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.

Wir sind Ihr Dienstleister für die Entwicklung, die Ihr SAP noch besser macht.
Schon in der Ideenphase unterstützen wir Sie bei der Definition der Anforderungen. Die Konzeption und Umsetzung erfolgt durch unsere SAP Experten.

Sie erhalten die Komplettlösung – Ihr Projekt machen wir zu unserem Projekt. Mit professionellem Projektmanagement sicheren wir den Projekterfolg.

Gerne spreche ich mit Ihnen über Ihre Ausgangslage und zeige Lösungsmöglichkeiten auf. Auf Wunsch unterbreite ich Ihnen im Anschluss ein unverbindliches Angebot.

Kontaktieren Sie mich: Telefon 0211.9462 8572-16 oder per E-Mail info@erlebe-software.de
Ingo Biermann, Fachbereichsleiter

 

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

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_kfoltp ls_fol_idobjtp.
ls_folmem_kfolyr ls_fol_idobjyr.
ls_folmem_kfolno ls_fol_idobjno.
ls_folmem_kdoctp ls_obj_idobjtp.
ls_folmem_kdocyr ls_obj_idobjyr.
ls_folmem_kdocno ls_obj_idobjno.
lv_ep_note ls_folmem_k.
ls_noteobjtype ‚MESSAGE‘.
ls_noteobjkey 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_objectobjkey object_id.
ls_objectobjtype 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.


SHARE


2 Kommentare zu "Generische Objektdienste: Anhänge über RFC anlegen"

Hans Rösch - 5. November 2016 | 20:59

Hallo Herr Biermann,

wir wollen GOS-Objekte in ein anderes SAP-System übertragen (Zusammenführung von Stammdaten).

Innerhalb des gleichen Systems klappt es, die GOS können an andere Stammdaten angehängt werden.

Aber per rfc über die Systemgrenze klappt es komischerweise nur manchmal. Ab und zu Kurzdump mit „Feld hat falsche Länge bei ‚Remote Function Call'“.

Hilft es, wenn man Binärdaten in XSTRING wandelt und beim Empfänger wieder zurück? Oder hat das damit nichts zu tun?

Freundliche Grüße
Hans Rösch

Antworten

Schreiben Sie einen Kommentar

Bitte füllen Sie alle mit * gekennzeichneten Felder aus. Ihre E-Mail Adresse wird nicht veröffentlicht.