Eine der hilfreichsten Funktionen in SAP sind Funktionsbausteine, welche mit Hilfe der SE37 ausgeführt werden können. Sie lassen sich auch bequem mit einem Funktionsaufruf in jedem Programm/Report einbinden.
Hier eine kurze Definition:
Funktionsbausteine in SAP sind wiederverwendbare, modularisierte Programmeinheiten, die bestimmte Funktionen oder Prozesse innerhalb des SAP-Systems ausführen. Funktionsbausteine können Parameter als Eingabe erhalten, verarbeiten und Ergebnisse zurückgeben. Sie sind besonders nützlich, um komplexe Logik zu kapseln und in verschiedenen Programmen oder Modulen wiederzuverwenden. Es gibt standardisierte Funktionsbausteine, die von SAP bereitgestellt werden, sowie benutzerdefinierte Funktionsbausteine, die spezifische Anforderungen abdecken.
Eine der größten Herausforderung bei diesen Funktionsbausteinen ist die korrekte Implementierung. Sobald ein wichtiger Parameter fehlt, ein Datentyp eines Parameters falsch definiert wird, erzeugt der Funktionsaufruf einen Dump-Fehler. Dieser lässt sich mit Hilfe der ST22 ausgeben und analysieren.
Betrachten wir hierfür den Baustein ARCHIVOBJECT_CREATE_FILE:
Der Funktionsbaustein wird verwendet, um Dokumente im SAP-System zu archivieren. Er erzeugt ein Archivobjekt und speichert eine Datei im Archivsystem. Dieser Funktionsbaustein ist Teil der ArchiveLink-Technologie, die das Verknüpfen und Verwalten von Dokumenten innerhalb von SAP ermöglicht.
Der korrekte Funktionsaufruf sieht wie folgt aus:
CALL FUNCTION 'ARCHIV_CREATE_FILE'
EXPORTING
archiv_id = 'QS'
document_type = 'PDF/Application.pdf'
path = 'c:\users\testuser\desktop\test.pdf
vscan_profile = '/SCMS/KPRO_CREATE'
IMPORTING
archiv_doc_id = lv_arc_doc_id
EXCEPTIONS
error_archiv = 1
error_communicationtable = 2
error_upload = 3
error_kernel = 4
blocked_by_policy = 5
others = 6.
Der Baustein erwartet also dementsprechend die oben genannten Exportparameter und gibt dafür den Importparameter archiv_doc_id wieder zurück. Die archiv_id ist die Archivierungs-ID, die das Archivierungssystem spezifiziert. Document_type ist der Typ des hochzuladenden Dokumentes. Der path ist der Pfad zur Datei, die archiviert werden soll. Der Pfad gibt an, wo sich die Datei befindet, die in das Archivsystem hochgeladen werden soll. Vscan_profile definiert die Virenscan-Einstellungen, die beim Hochladen der Datei verwendet werden sollen. Der Standardwert '/SCMS/KPRO_CREATE' spezifiziert ein Profil, das für die Erstellung von KPro-Objekten verwendet wird. Virenscan-Profile helfen dabei, sicherzustellen, dass keine schädlichen Dateien ins System gelangen. Hier ist der Default-Wert '/SCMS/KPRO_CREATE'
angegeben. Archiv_doc_id ist die ID des erstellten Archivdokuments. Nachdem die Datei erfolgreich archiviert wurde, wird diese ID zurückgegeben. Diese ID kann verwendet werden, um später auf das archivierte Dokument zuzugreifen oder es zu referenzieren. Unter Exceptions werden verschiedene Fehlerfälle abgefangen.
Um die Archiv_doc_id erfolgreich in einer Variable zu speichern, muss diese vorher mit dem passenden Datentypen initialisiert werden. Diese Datentypen sind oft unbekannt und lösen in den meisten Fällen Dumps aus, sobald einer falsch definiert wurde. Die Datentypen lassen sich in den Bausteinen ganz leicht herausfinden. Der kürzeste Weg ist es, sich den Baustein entweder in der SE37 anzeigen zu lassen oder nach erfolgreichen Implementieren im Programmcode einen Doppelklick darauf auszuführen. Anschließend gelangt man zu dem genannten Baustein. Hier sieht man am Anfang des Codes, welche Datentypen hinter welchen Parametern erwartet werden. Für unser Beispiel sieht das wie folgt aus:
function archivobject_create_file.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(ARCHIV_ID) LIKE TOAAR-ARCHIV_ID
*" VALUE(DOCUMENT_TYPE) LIKE TOADD-DOC_TYPE
*" VALUE(PATH) LIKE SAPB-SAPPFAD
*" VALUE(VSCAN_PROFILE) TYPE VSCAN_PROFILE
*" DEFAULT '/SCMS/KPRO_CREATE'
*" EXPORTING
*" VALUE(ARCHIV_DOC_ID) LIKE SAPB-SAPADOKID
*" EXCEPTIONS
*" ERROR_ARCHIV
*" ERROR_COMMUNICATIONTABLE
*" ERROR_UPLOAD
*" ERROR_KERNEL
*" BLOCKED_BY_POLICY
*" OTHERS
*"----------------------------------------------------------------------
Wir sehen hier, dass die archiv_id denselben Datentypen hat, wie das Datenelement ARCHIV_ID in der Tabelle TOAAR. Duch einen Doppelklick auf den Eintrag 'TOOAR-ARCHIV_ID' gelangen wir zu der Tabelle TOOAR und sehen dort die ARCHIV_ID. Aus der Tabelle können wir nun feststellen, dass das Datenelement hinter diesem 'SAEARCHIVI' ist.
Eine lokale archiv_id Variable lässt sich also wie folgt deklarieren:
DATA lv_archiv_id type tooar-archiv_id.
Mit Hilfe dieses simplen und kurzen Tricks, lassen sich Funktionsbausteine effizient und zielorientiert implementieren.
Weitere wichtige Hinweise zu der Implementierung von Funktionsbausteinen:
Default-Parameter können zu Dump-Fehlern führen, am besten man gibt diese mit, wenn der Funktionsaufruf fehlerhaft verläuft
manche Funktionsbausteine benötigen Tabellen, diese werden dann mit TABLES unter EXPORTING aufgeführt
Sollten Sie auf weitere Probleme oder Hindernisse stoßen, melden Sie sich gern!
Wir finden eine Lösung!