Hier bieten wir Ihnen eine Einführung in das Bauen von Tasks. Für weniger forensiche Produktdokumentation wechseln Sie bitte ins Hauptmenü der Reihe BAF-Poduktinformation.
Um schnell und handlich die verwendeten BAF-Fachbegriffe nachzuschlagen zu können, empfiehlt es sich, die BAF-Enzyklopädie parallel zu öffnen. Alternativ können Sie die verlinkten Begriffe einzeln nachschlagen. Diese sind durch einen → gekennzeichnet.
BAF-Tasks sind das, was im BAF die eigentliche Arbeit verrichtet (die eigentliche Leistung erbringt). BAF-Tasks transportieren oder verschieben Informationen: von einem Ort, an dem man sie hat, an einen Ort, an dem man sie braucht.
Der BAF 2.0 verfügt über einen sogenannten Node-Graphen: das bedeutet, dass er die im Backend verborgenen Logiken des Tasks als anschauliche grafische Elemente in einer grafischen Oberfläche darstellt. Dies ermöglicht ein intuitives Erstellen von Tasks ("Bauen") durch Entwickler. Wenn wir im Folgenden also von Tasks reden, befassen wir uns in erster Linie mit dem Interface für das Erstellen und Korrigieren von Tasks: dem Graph-Editor.
Häufig werden die Begriffe BAF-"Task" und BAF-"Job" synonym verwendet.
Einen BAF-Task nennen wir hauptsächlich das Gebilde, das wir im BAF "→ Graph-Editor" (dem "→ FLOW.EVENTGRAPH") als Verbund von Kästen und Linien erkennen können. Dies ist wie oben beschrieben das eigentliche "handelnde / ausführende Objekt" im BAF. Der Anschaulichkeit halber setzen wir den "Task im Graphen" hier mit einem AUTOMOTOR gleich.
Sobald wir die Mechanik des BAF gedanklich verlassen und uns aus der Außenperspektive mit dem zu befassen beginnen, was die Tasks für uns "tun", fangen wir an, von einem "Job" ("BAF-Job") zu sprechen. Ein "BAF-Job" beleuchtet also einen NUTZEN; er dient uns als "Vehikel" (für Daten), und darum können wir den "Job des / vom / im BAF" der Anschaulichkeit halber mit einem AUTO vergleichen.
Wenn man an der Feinmechanik eines Autos arbeitet, arbeitet man am Motor: deshalb sprechen wir von "einen Task bauen".
Wenn wir von A nach B kommen wollen, sprechen wir nicht davon, dass es "dafür einen Motor gibt" — wir sagen, dass wir "dafür ein Auto" haben, und dementsprechend sagen wir auch "Wir haben einen BAF-Job dafür".
BAF-Jobs operieren nicht nur räumlich (also von Ort zu Ort), sondern auch zeitlich (einmalig, von Tag zu Tag, oder konstant in Echtzeit). Diese zwei "Dimensionen" lassen sich um Dimensionen von Zweck und Auftrag erweitern, also "in welcher WEISE" der BAF sonst noch operiert.
Dieses riesige Leistungsspektrum führt zu einer Vielzahl von Worten, die alle mit "Daten-" anfangen, und die der BAF alle "kann". Dies ist deshalb wichtig, weil die folgenden Artikel — genau wie Softwareentwickler — oftmals Worte wie "verschieben", "migrieren" oder "abgleichen" verwenden, die je nach Anwendungsfall dasselbe bedeuten können (aber eben nicht immer).
Blickweise | Synonyme der erbrachten Leistung |
---|---|
"räumlich" | Datenmigration, Datenumzug |
"zeitlich" | Datensynchronisation, Datenaktualisierung |
"relational" | Datenabgleich, Datenaustausch |
"metamorphisch" | Datentransformation |
Beachten Sie, dass es in der Informationstechnologie häufig eine Diskrepanz zwischen "Haben" und "Sehen" gibt: manche der obigen Voraussetzungen müssen Sie erwerben, können Sie aber nicht sofort an allen Orten "sehen": das bedeutet, dass Sie, bevor Sie im BAF etwas auswählen können, die Auswahlmöglichkeit vorher häufig selbst manuell "anlegen" müssen.
Im Aufbau. Lesen Sie in der Zwischenzeit den Artikel BAF Connections oder den passenden Enzyklopädie-Eintrag
Entweder erhalten Sie einen Task-Bauplan von Ihrem Auftraggeber oder Sie müssen diesen selbst erstellen. Ein für Sie vorbereiter Bauplan für einen Task kann verschiedene Formen haben: jedes "Referenzdokument", das Ihnen erklärt, was ein Task leisten können muss, ist als Bauplan zu verstehen. Meistens enthält ein Bauplan Tabellen- und / oder Feldnamen, Code-Strukturen oder Bezeichnungen wie "Methoden" / "Methods" oder "Modelle" / "Models".
Je weniger groß Ihr eigenes Verständnis der involvierten Softwaresysteme und ihrer Datensatztypen, bzw. der dahinterliegenden Datenmodelle ist, desto detaillierter sollte Ihr Bauplan sein, um einen funktionierenden Task bauen zu können.
Hier ein Beispiel, wie ein Bauplan in der Praxis aussehen könnte:
Bauplan im JSON-Format als Kommentar auf einem kollaborativen Online-Portal |
---|
![]() |
Öffnen Sie den Reiter Tasks links im Seitenmenü.
Klicken Sie rechts oben auf New TASK.
New Task | Konfigurationen |
---|---|
![]() |
![]() |
Type & Loglevel | Connection |
---|---|
![]() |
![]() |
Klicken Sie unter den → Inputs auf Add Input.
Vergeben Sie einen passenden Namen und wählen Sie einen Type.
Klicken Sie anschließend auf Save.
Falls erforderlich klicken Sie unter den Outputs auf Add Input (beachten Sie, dass hier der Name des Feldes aktuell irreführend ist; später wird hier Add Output zu lesen sein).
Vergeben Sie den Namen "RESULT" und wählen Sie einen Type. Klicken Sie anschließend auf Save.
Input | (Output) |
---|---|
![]() |
![]() |
Graph-Editor öffnen |
---|
![]() |
Im Graph-Editor sehen Sie fünf verschiedene Fenster vor sich, von denen das mittlere, der "→ FLOW.EVENTGRAPH" das namensgebende ist — gewissermaßen das Herzstück des comcon BAF.
Die verbleibenden Fenster sind die "FLOW.GRAPHPROPERTIES" und die "FLOW.CONSOLE", die sich zusammen die linke Spalte teilen, sowie die "FLOW.PROPERTIES" und die "FLOW.TOOLBOX", die sich zusammen die rechte Spalte teilen.
Ziehen Sie sich die Größe Ihrer Fenster durch Gedrückthalten der linken Maustaste so, dass Ihnen genug Platz zum Arbeiten im Graph zur Verfügung steht.
Linke Spalte | Mittlere Spalte | Rechte Spalte |
---|---|---|
"FLOW.GRAPHPROPERTIES": das "Grundgerüst" | "FLOW.EVENTGRAPH": bildliche Darstellung aller Nodes sowie deren Verbindungen via Ports | "FLOW.PROPERTIES": Merkmale einzelner Nodes (Name, Filter…) |
![]() |
||
"FLOW.CONSOLE": in Entwicklung | "FLOW.TOOLBOX": Such- und Einfügefunktion für neue Nodes |
Wie verändere ich die Größe der Fenster? | Mit STRG + SCROLLEN lässt sich die Größe und Auflösung ALLER Fenster im BAF ändern — nicht aber des Graphen! |
Wie zoome ich im Graph? | Durch Hinein- oder Herausscrollen lässt sich die Auflösung des Graphen erhöhen bzw. zoomen. |
Wie bewege ich mich im Graph von rechts nach links? | Durch das Gedrückthalten des Mausrads lässt sich das Sichtfeld im Graphen verschieben, ohne dass die Position des FLOW.EVENTGRAPH-Fensters davon beeinflusst wird! |
Wie verbinde ich zwei Punkte (Ports)? | Durch das Gedrückthalten der linken Maustaste lassen sich einzelne → Ports (die Punkte in grün, lila etc) miteinander verbinden. |
Wie verschiebe ich Elemente (Nodes)? | Wenn man die linke Maustaste innerhalb der Begrenzungen des → Nodes drückt und die Nodes dadurch quasi "greift", kann man sie an einen beliebigen Punkt im Graphen ziehen. |
Wie ändere ich die Reihenfolge der Punkte und Felder? | Mit ALT + linke Maustaste lassen sich die Namen / Feldbezeichnungen der Nodes hoch- und runterziehen. Die Maus muss dafür die zum Port gehörende Zeichenfolge auswählen, also in der Begrenzung des Nodes bleiben; Port-Punkte selbst lassen sich nicht direkt selbst verschieben, nur verbinden (siehe oben). |
Wie entknüpfe ich zwei Ports wieder, die ich versehentlich verbunden habe? | Die Verbindung zwischen zwei Ports lässt sich kappen, indem Sie auf den Zielport (dem Punkt selbst) mit der rechten Maustaste (!) klicken. |
Wie spare ich Zeit beim Einfügen identischer Nodes und ihrer bestehenden Edges? | Mit der linken Maustaste lassen sich mehrere Nodes einschließlich ihrer Ports und Egdes auswählen und über Copy kopieren. Fügt man diese dann wieder in den FLOW.EVENTGRAPH ein, bleiben die Edges vollständig erhalten: die einzelnen Ports müssen also nicht erneut verbunden werden. |
Wie gelange ich schneller von einem gelisteten Task in den Graph-Editor? | Ohne Umwege in den Graph-Editor gelangen Sie, indem Sie mit ALT + linke Maustaste auf den Namen des Tasks klicken. |
Beim Bauen eines Tasks geht es darum, Datenströme durch sogenannte → Nodes zu dirigieren und dabei gegebenenfalls zu transformieren. Nodes müssen manuell über sogenannte → Ports oder "Andockpunkte" verbunden werden.
Prinzipiell gibt es zwei Arten, Nodes zu generieren:
Die Eigenschaften Ihrer ausgewählten Nodes legen Sie maßgeblich über die FLOW.PROPERTIES oben rechts fest. Dazu zählen Tabellennamen, Filter und Felder. Außerdem lässt sich hier ein eingebauter Code-Editor öffnen, der das Transformieren ermöglicht.
Filterbedingungen, die Feldauswahl und der Code-Editor öffnen sich in Pop-up-Fenstern.
Am Anfang eines Tasks steht für gewöhntlich ein "→ Start-Event". Je nach Art des Tasks wird am Ende auch ein "→ RESULT" definiert.
Für gewöhnlich sollten nur Ports gleicher Farbe miteinander verbunden werden.
Hier finden Sie eine stark komprimierte Darstellung der Phasen des Arbeitens im Graph-Editor, also des "Bauens von Node-Graphen" oder "Workflows"! Diese sind als ABSTRAKTION der Arbeitsschritte zu verstehen: in der Praxis bauen Entwickler einen Task häufig von A-Z durch. Dies kann jedoch bei "Beginnern im BAF" für Überforderung sorgen. Einfacher ist es deshalb, sich das Bauen der komplexen Node-Struktur in Phasen vorzustellen — wenn man die Mausbewegungen und Erwägungen für jede einzelne Phase dann verinnerlicht hat, lassen sich die Phasen organisch miteinander kombinieren.
Icons | Name & Beschreibung |
---|---|
![]() |
Phase 1: Nodes einfügen. Dies funktioniert über die Suchfunktion in der FLOW.TOOLBOX oder per Rechtsklick im FLOW.EVENTGRAPH. |
![]() |
Phase 2: Nodes konfigurieren. Tabellen und Filterbedingungen definieren, (Inputs anlegen), Felder auswählen. Arbeitsbereich dafür sind die FLOW.PROPERTIES. |
![]() |
Phase 3: Ports verbinden, Nodes sortieren. Hier geht es nicht nur darum, die Datenströme tatsächlich in Fluss zu bringen, sondern auch darum, die Nodes in einer intuitiv nachvollziehbaren räumlichen Struktur zu arrangieren. Dies hilft herauszufinden, wo Transformationen erforderlich sind. |
![]() |
Phase 4: Transformieren. Transformationen lassen sich als eine hochgranuliertere Wiederholung von Phase 2 verstehen. Auch hier werden Nodes in den FLOW.PROPERTIES konfiguriert, nur dass diese Konfigurierung diesmal die Daten nach gewünschten Vorgaben manipuliert. |
Im nächsten Kapitel sehen Sie, wie die wiederkehrenden Elemente dieser Phasen tatsächlich in der Benutzeroberfläche des Graph-Editor aussehen.
Die Reihenfolge der hier dargestellten Schritte variiert; außerdem fallen manche je nach Task ganz weg. Das Folgende ist also als Auswahl wiederkehrender Prozessschritte beim Bauen von einfachen bis mittelschweren Tasks zu verstehen.
1. Start-Events erstellen | 2. Nodes hinzufügen |
---|---|
![]() |
![]() |
3. Inputs anpassen | 4. Tabellen auswählen |
---|---|
![]() |
![]() |
5. Filtern | 6. Felder auswählen |
---|---|
![]() |
![]() |
7. Ports verbinden ("Edges zeichnen") | 8. Nodes sortieren |
---|---|
![]() |
![]() |
9. Datenbanktransformation | 10. Code-Transformation an bestehendem Node |
---|---|
![]() |
![]() |
11. CustomSctipt hinzufügen | 12. Code-Code-Transformation via CustomScript |
---|---|
![]() |
![]() |
Springen Sie für detailliertere Angaben von hier aus gerne zu unserem Vorzeigebeispiel für den Bau eines Tasks.
Wie bereits angedeutet gibt 3 Arten von Transformationen:
Variante 2 und 3 zeichnen sich beide darüber aus, dass sie BEIDE den Code-Editor benötigen — sie unterscheiden sich nur darin, ob a) alle nötigen Nodes bereits vorhanden sind (Variante 2) oder b) ein zusätzlicher Hilfs-Node benötigt wird (Variante 3).
Da das Transformieren von Datenflüssen ein besonders komplexes Thema ist, widmen wir diesem hier eine eigene "Transformations-Bibliothek", gegliedert nach den 3 Arten.
Ort für Datenbank-Transformationen im Bereich FLOW.PROPERTIES |
---|
![]() |
Ort für Code-Transformationen im Bereich FLOW.PROPERTIES |
---|
![]() |
Um festzustellen, ob eine Informationsfluss / ein Edge / zwischen Port zu Port via Code transformiert wurde, lässt sich prüfen, ob sich vor dem Zielport eine geschweifte Klammer befindet.
So sieht ein im Code transformierter Port aus: |
---|
![]() |
Im folgenden sehen Sie eine BEISPIELBIBLIOTHEK mit Code-Transformationen. Diese sollen als Ansätze und Inspiration zu verstehen sein und können nur bedingt einen Crashkurs in Softwareentwicklung darstellen. Sollten die hier vorgeschlagenen Transformations-Codes keine Wirkung zeigen, können Sie sich von einer KI beraten lassen, wie Alternativen oder Code-Reparaturen aussehen könnten.
Ys setzen |
---|
![]() |
Langschrift und Kurzschrift einer Y / N Transformation |
---|
![]() |
Manchmal kann es vorkommen, dass Booleans umgedreht werden müssen. Das bedeutet, es gibt ein Feld auf der linken Seite, wo bei Aktive ein YES steht, rechts im Ziel das Feld allerdings Deactivated heißt, weshalb sich dort die Information "umkehren" muss. Statt eines ===
muss in diesem Fall ein !==
gesetzt werden:
Ungleich "tYes" zu unangekreuztem Boolean |
---|
![]() |
Gerade bei SAP kann es sein, dass ein Datum nicht korrekt vom BAF überführt werden kann, weil in der Quelle unterschiedliche Formate gepflegt werden. Zu diesem Zweck kann der BAF auf eine öffentliche Java-Library zugreifen und mit folgender Code-Modifikation am Date-Objekt ein sogenanntes "Moment" zuhilfeholen; "Moment" beschreibt also in diesem Fall eine Hilfsfunktion für die Datenformatierung:
moment(value)-Fix |
---|
![]() |
M → männlich, andernfalls weiblich |
---|
![]() |
Berechnen einer Nettosumme |
---|
![]() |
Suchen Sie sich Transformations-Nodes aus der Toolbox
Fügen Sie sie zwischen den problematischen Nodes ein
Verbinden Sie die passenden Ports.
Beispiele für Transformations-Nodes sind CountrytoIso oder formatTelephone.
Beispiele |
---|
![]() |
Woran erkennen Sie, dass ein Port nicht nur in einen, sondern gleich in ZWEI neue Ports eines anderen Nodes hinüberfließt? Dass er also nicht nur einen Edge, sondern mehrere auswirft ("Edgesplit")?
Hier ist ein Beispiel, wie man aus einem Task-Bauplan im JSON-Format eine solche Situation auf einen Blick erfassen kann: wenn nämlich zum Beispiel "leftFieldName"s für einen Wert doppelt vergeben sind, aber diese mit verschiedenen "rightFieldName"s gruppiert vorkommen:
Standard-Filter für Inkrementelle Abgleiche |
---|
![]() |
Stellen Sie sich vor, Sie haben den falschen Node in Ihren Task eingebaut und sämtliche Ports bereits korrekt verknüpft: wenn Sie jetzt den richtigen (neuen) Node einfügen, und die Anordnung der Felder der gleichen entspricht wie im vormaligen falschen, können Sie die Edges einfach "durchpausen", wie im folgenden Beispiel erkennbar wird. Dabei bedienen Sie sich der Dreidimensionalität des BAF, da Nodes sich nämlich übereinander schieben lassen.
Ab und an stehen Sie vor dem Problem, dass Sie nicht wissen, welchen Wert Sie für Ihr Zieldatenobjekt benötigen, bzw. in welcher Tabelle dieser zu finden ist. Sie ermitteln die gewünsche Information mit einem Trick: nämlich, indem Sie durch eine Code-Modifikation eine gezielte Fehlermeldung provozieren. Diese Fehlermeldung zeigt Ihnen an, bei welchen Werten es Probleme gab, und darunter finden Sie mit etwas Glück und Suchen den exakten Namen des Datentröpfchens, das Sie brauchen.
Zweckentfremden Sie einen Node temporär durch folgende Code-Modifikation:
Der BAF bietet Ihnen in zahlreichen Description-Feldern die Möglichkeit, Sinn und Zweck einer Funktion wie eines Nodes oder eines Inputs zu dokumentieren, um Ihre Handlungen für Ihr ganzes Team nachvollziehbar zu machen, egal ob es sich um Entwickler oder Endbenutzer handelt. Wir empfehlen Ihnen aus eigener Erfahrung, diese zu nutzen. Und keine Sorge: Sie werden dadurch nie Ihren Überblick über die eigentliche Mechanik Ihrer Nodes verlieren, da unter dem "schönen Namen", den Sie selbst vergeben können, im Kleingedruckten weiterhin die funktionellen Bezeichnungen wie "GWInstertOrUpdate" erhalten bleiben.
Auch bei der Vergabe von Namen sollten Sie sich um Nachvollziehbarkeit und Einheitlichkeit bemühen, um so den Mehrwert Ihrer Arbeit für andere zu steigern.
Bedenken Sie, dass der Graph des BAF Unicode-kompatibel ist und daher gängige EMOJIS in Ihre Tasks miteingebunden werden können. Dies kann Ihnen helfen, Ihre Tasks für sich und andere sinnvoll zu illustrieren, sodass Sie auf einen Blick bestimmte Nodes bestimmten Bereichen oder Aufgabenfeldern zuordnen können!
Testen lässt sich ein Task nie anhand der Struktur der Nodes selbst, nie in Isolation: für jeden Test werden TestDATEN benötigt. Man kann sich einen BAF-Task wie ein Arrangement aus Rohren in einem Labor vorstellen: die bunten Flüssigkeiten darin symbolisieren Datenströme. Auf der einen Seite wird also etwas hineingegeben (die Testdaten, zum Beispiel eine Kundennummer) und auf der anderen Seite erscheint ein gewünschtes Resultat (zum Beispiel eine Postadresse). Kommt nichts am anderen Ende heraus (wenn also Daten unterwegs "verlorengehen"), müssen die einzelnen Bestandteile nachjustiert werden, um zu einem zufriedenstellenden Ergebnis zu kommen.
Alternativ kann man sich auch des Bildes aus einem vorherigen Kapitel behelfen: wenn die Nodes mit ihren Ports und Edges einem AUTOMOTOR entsprechen, dann lässt sich die Fahrtüchtigkeit des dadurch betriebenen Autos nur dann testen, wenn man auch einen TREIBSTOFF hinzugibt, der umgewandelt wird (im Motor in Umdrehungen, im BAF in eine gewünschte Präsentation von Informationen).
Wichtig ist, zu verstehen: es gibt Testen des TASKS IM BAF und Testen der RESULTATE IN ANWENDUNGSSYSTEMEN. Ein Task kann noch so gut funktionieren: ob im Anwendungssystem für den Menschen logisch nachvollziehbare, verwertbare Informationen lesbar werden, ist als Frage unabhängig davon, wie technisch einwandfrei der Datenfluss im BAF aussieht!
Hinweis: Je komplexer ein Task, desto mehr Tests müssen durchgeführt werden, um sicherzugehen, dass der Task in jedem Fall tut, was er soll! Während bei einfachen Tasks durchaus zwei oder drei Tests ausreichen mögen, um sich von dessen Qualität zu überzeugen, können hochkomplexe Tasks ein Vielfaches davon erfordern, um alle möglichen Fehlerquellen abzudecken und sich ihrer Vermeidung gewiss zu sein!
Klicken Sie auf den Task in der Taskliste
Klicken Sie auf Export.
Als JSON als ZIP-Datei speichern.
Entpacken.
Ins Notepad kopieren. Nun ist der Task kpmplett in Textform lesbar, allerdings nicht lesbar. Kopieren Sie diesen und formatieren ihn sich in einer passende Anwendung nach Bedarf, um diesen besser lesen und studieren zu können.
Um die Abgleichszeit einzelner Nodes zu prüfen, klicken Sie auf Execute Method.
Klicken Sie auf Statistics und prüfen Sie das Kleingedruckte unter jedem einzelnen Node.
siehe ↑ Geschlecht.
Im Aufbau.
Kopieren Sie den zuvor angelegten Vollabgleich
Drücken Sie auf Paste
Konfigurieren Sie den neuen Abgleich durch einen Filter mit Trigger für Updates (Änderungen) und durch ein zeitliches Intervall zu einem Inkrementellen Abgleich um.
Standard-Filter für Inkrementelle Abgleiche |
---|
![]() |
Beispiel Inkrementellen Abgleich für den Import von SAP-Belegen nach CAS genesisWorld anlegen |
---|
![]() |