
Sie können in einer Datenflussanweisung einen programmierten Datenfluss verwenden. Mit einem programmierten Datenfluss können Sie komplexere Zuweisungen vornehmen, wie z. B.:
Vor der Zuweisung Berechnungen oder Prüfungen auf Containerelementen vornehmen
Vor der Zuweisung zwei oder mehr Containerelemente zusammenfassen.
Im Datenflusseditor können Sie pro Zeile jeweils einen programmierten Datenfluss definieren.
ABAP-Klasse oder Funktionsbaustein
Sie können einen programmierten Datenfluss als ABAP-Klasse oder als Funktionsbaustein implementieren.
ABAP-Klasse
Über eine ABAP-Klasse können Sie Datenflüsse implementieren.
Ein Datenfluss, der als ABAP-Klasse implementiert ist, wird in der Liste der Datenflussanweisungen als Erweiterung angezeigt und ist in allen Workflows sichtbar. Eine solche ABAP-Klasse eignet sich daher insbesondere dazu, unternehmensweite Erweiterungen zur Verfügung zu stellen.
Eine solche Erweiterung ist vollständig in den Datenflusseditor integriert. Sie können für die Klasse eigene Prüfungen implementieren und den Namen und die Symbole für die Anzeige der Erweiterung im Datenflusseditor festlegen.
Funktionsbaustein
Über einen Funktionsbaustein können Sie einen Datenfluss .
Ein Funktionsbaustein kann das Interface des BOR-Containers oder das Container-Interface verwenden.
Das Interface des BOR-Containers wird Kompatibilitätsgründen unterstützt. Aus folgenden Gründen empfiehlt es sich jedoch, für neue Funktionsbausteine das Container-Interface zu verwenden:
Beim Container-Interface gibt es keine Beschränkungen bzgl. der Datentypen. Der BOR-Container unterstützt hingegen die folgenden Datentypen nicht: REF TO, STRING, XSTRING, Felder mit einer Länge größer 255.
Beim Container-Interface sind keine Datentypkonvertierungen erforderlich. Dadurch ergeben sich Performance-Vorteile.
Programmierter Datenfluss mit ABAP-Klassen
Eine ABAP-Klasse für einen programmierten Datenfluss muss das folgende Interface implementieren:
Datenfluss : IF_SWF_IFS_BIND_TRANSFORM
Datenfluss : IF_SWF_IFS_BIND_TRANSFORM_CONT
Beide Interfaces bieten folgende Methoden:
Methoden der Interfaces
|
Methode |
Beschreibung |
|---|---|
|
CHECK |
Kompatibilitätsprüfung. Kann z. B. den Datentyp der Datenquelle prüfen. Wird vom Datenflusseditor aufgerufen, nachdem die Klasse ausgewählt wurde. Kann leer implementiert werden, falls keine Prüfungen erforderlich sind. |
|
TRANSFORM |
Benutzerdefinierte Datenflussanweisung. Wird zur Laufzeit aufgerufen. |
|
GET_SUPPORTED_OPTIONS |
Liste der unterstützen Optionen. Legt fest, welche Standardoptionen sichtbar sind. Wird vom Datenflusseditor aufgerufen. |
Wenn die statischen Methoden CHECK und TRANSFORM implementiert sind und die Klasse aktiviert ist, steht die Klasse als Auswahl im Listenfeld für die Datenflussanweisung unter Erweiterungen zur Verfügung.
Datenfluss Ausdruck -> Ausdruck mit IF_SWF_IFS_BIND_TRANSFORM
Das Interface ermittelt den Quell- und den Zielausdruck und übergibt diese als source_element und target_element an die benutzerdefinierte Klasse. Die Klasse kann in der CHECK-Methode z. B. den Datentyp des Quell- und Zielausdrucks ermitteln.
Ein Beispiel für diese Art des Datenflusses ist die Demo-Klasse CL_SWF_BND_TRANS_ADD_TO, die den Quellausdruck zum Zielausdruck addiert. Der Quellausdruck kann eine Tabelle sein.
Datenfluss Container -> Container mit IF_SWF_IFS_BIND_TRANSFORM_CONT
Ein Datenfluss Container Container kann nur Änderungen im Zielcontainer vornehmen. Änderungen im Quellcontainer sind nicht zulässig.
Das Interface ermittelt den Quell- und den Zielcontainer und übergibt diese als source_container und target_container an die benutzerdefinierte Klasse.
Zusätzlich übergibt das Interface den Datenflusszeitpunkt dataflow_event an die CHECK- und die TRANSFORM-Methode. So können Sie auf einen Aufruf zum Import- bzw. Exportzeitpunkt jeweils unterschiedlich reagieren. Zum Beispiel gilt bei einem Datenfluss zwischen dem Workflow und einem Schritt:
Zum Exportzeitpunkt ist der Workflow-Container der Quellcontainer, der Aufgabencontainer der Zielcontainer.
Zum Importzeitpunkt ist der Aufgabencontainer der Quellcontainer, der Workflow-Container der Zielcontainer.
In der CHECK-Methode können Sie Plausibilitätsprüfungen implementieren. Sie können z. B. prüfen, ob bestimmte Elemente im Quell- oder Zielcontainer definiert sind.
Anzeige im Datenflusseditor mit IF_SWF_IFS_BIND_PRESENTATION
Zusätzlich kann die Klasse das Interface IF_SWF_IFS_BIND_PRESENTATION implementieren. Das Interface stellt den Namen, die sprachabhängige Bezeichnung und die Ikone für die Klasse zur Verfügung. Diese werden angezeigt, wenn Sie im Listenfeld für die Datenflussanweisung die Klasse auswählen.
Methoden des Interfaces
|
Methode |
Beschreibung |
|
GET_ICON |
Für die Klasse angezeigtes Symbol. |
|
GET_NAME |
Eindeutige sprachunabhängige Bezeichnung für die Klasse, z. B. "Add to". |
|
GET_DESCRIPTION |
Sprachabhängige Bezeichnung, z. B. "Addieren zu". Diese Bezeichnung wird an folgenden Stellen angezeigt:
|
Die folgenden Methoden werden derzeit nicht verwendet. Sie müssen implementiert werden, können aber leer sein:
GET_SYMBOL
GET_TEXT_KEY
TO_HTML
TO_STRING
Programmierter Datenfluss mit Funktionsbaustein
Einen Funktionsbaustein für einen programmierten Datenfluss sollten Sie in der Funktionsgruppe erstellen, die in den Grunddaten des Workflow angegeben ist. Diese Funktionsgruppe sollte alle zu diesem Workflow erzeugten Objekte enthalten. Wenn Sie einen Funktionsbaustein über den Datenflusseditor anlegen, wird er automatisch in dieser Funktionsgruppe angelegt. Ist in den Grunddaten des Workflow noch keine Funktionsgruppe angegeben, wird sie automatisch erstellt.
Ein neu angelegter Funktionsbaustein basiert auf folgendem Funktionsbaustein:
BOR-Container: SWA_TEMPLATE_EXECUTE_DATAFLOW
Container-Interface: SWA_BINDING_TEMPLATE
Eine Beschreibung der Interfaces und Hinweise zur Programmierung finden Sie in der Funktionsbausteindokumentation.