Sie wollen statt eines Auftrags eine andere Belegart von SAP Business One nach CAS genesisWorld importieren? Springen Sie hier ins BAF/SAP-Hauptmenü.
Sie suchen direkt nach dem Bauplan des Tasks im JSON-Format? Klicken Sie hier.
Sie verwalten Ihre Aufträge in Ihrem SAP Business One und möchten diese in Ihr CRM-System CAS genesisWorld übertragen. Dies soll einmalig gesammelt für all Ihre Aufträge erfolgen, ohne dass Dubletten erzeugt werden; anschließend möchten Sie, dass jede Änderung des Auftragsbestandes in SAP Business One in einer Aktualisierung des Auftragsbestandes in CAS genesisWorld resultiert: also sowohl bei Änderungen an BESTEHENDEN Aufträgen als auch beim Hinzukommen völlig NEUER Aufträge.
Ein maßgeblicher Mehrwert dieses Tasks ist, dass all Ihre Aufträge punktgenau mit Ihren CRM-Adressen verknüpft werden.
• die Ausgangstabelle für Belegköpfe der Belegart AUFTRAG in SAP Buniness One heißt: "ORDR"
• die passenden Positionen kommen aus der Tabelle: RDR1
• der Task besteht also aus zwei Hauptkomponenten: der Teil, der sich mit allem AUẞER den Positionen befasst, und der Teil, der sich MIT den Positionen befasst. Wir führen mit unserem Task bei diesem Belegimport also Informationen ZUSAMMEN.
• wichtige Eingaben bei SAP BO sind für Sie DocEntry (das eindeutige Kennzeichen für die verschiedenen Belegtabellen) und der CardCode, eine Art Kunden-ID.
Klicken Sie per Rechtsklick auf den Bauplan und öffnen Sie ihn als eigene Seite in einem neuen TAB, damit Sie Bauplan und Prozessbeschreibung auf Ihrem Bildschirm einfach parallel verfolgen können!
Klicken Sie auf den Task in der Taskliste, um den "Rahmen" des Tasks festzulegen.
1. Klicken Sie auf General.
2. Vergeben Sie einen passenden Namen für Ihren Task.
3. Nutzen Sie die Beschreibungsfelder (optional).
4. Stellen Sie den Type auf ActionGraph.
5. Stellen Sie das Loglevel auf Error.
6. Ordnen Sie Ihren Task einer Task Group zu (optional).
General |
---|
![]() |
Voraussetzung ist, dass Sie die Connections bereits unter Zuhilfenahme Ihrer Zugangsdaten im Reiter Connections des BAF-Hauptmenüs angelegt haben.
7. Wechseln Sie zu den Connections.
8. Klicken Sie auf Add Connection.
9. Legen Sie die Connection zu Ihrem SAP Business One ("SAPBO") an.
10. Legen Sie auf demselben Weg die Connection zu Ihrem CAS genesisWorld ("GW") Connection an.
8. |
---|
![]() |
9. |
![]() |
10. |
![]() |
11. Wechseln Sie zu den Inputs.
12. Klicken Sie auf Add Input.
13. Speichern Sie den neuen Input mit dem Namen "DOCENTRY" als String.
12. |
---|
![]() |
13. |
![]() |
Speichern Sie mithilfe des Diskettensymbols oben in der Kopfleiste Ihre Eingaben.
14. Klicken Sie auf Graph.
15. Klicken Sie rechts auf Open Editor.
Hier sehen Sie den komplett fertigen Task im Graph-Editor FLOW.EVENTGRAPH. Zur besseren Übersichtlichkeit ist der Task hier in eine linke Seite und eine rechte Seite oder "Hemisphäre" aufgeteilt.
Klicken Sie zwischen den beiden Tabs hin- un her, um den Übergang und die Aufgabenteilung des Tasks genauer nachvollziehen zu können.
← "Westseite" |
---|
![]() |
"Ostseite" → |
---|
![]() |
Erinnern Sie sich noch an die 4 Phasen beim Bauen eines Node-Graphen oder "Workflows" im Graph-Editor? Klicken Sie hier für einen Refresher!
In der folgenden Prozessbeschreibung gehen wir davon aus, dass Sie die Phasen 1-3 (also das Einfügen, Konfigurieren und Verbinden Ihrer Haupt-Nodes über Edges) parallel durchführen. Nur Phase 4 (die Transformationen) behandeln wir gesondert, um Ihren logischen Flow durch den Belegimport weniger holprig zu machen.
1. Fügen Sie in der zentral positionierten EVENTGRAPH-Oberfläche über Rechtklick CREATENODE > event > Start ein Start-Event.
1. |
---|
![]() |
2. Suchen Sie sich aus der Toolbox unten rechts einen SAPBO-SelectOne und positionieren Sie es per Drag & Drop rechts neben dem Start-Event.
Achten Sie darauf, nicht den GW-SelectOne zu nehmen, da Ihre Eingangsdaten von SAP kommen. Hier definieren Sie also die konkrete Richtung des Node-Flussdiagramms.
2. |
---|
![]() |
3. Definieren Sie für den SelectOne im Bereich der FLOW.PROPERTIES > tablename die alles entscheidende Tabelle, [dbo.].[ORDR].
3. |
---|
![]() |
4. Kreieren Sie über das Trichter-Symbol in der Zeile darunter zwei Dinge gleichzeitig ein: einen Filter, der auf das Feld "DocEntry" in der [dbo.].[ORDR]-Tabelle zugreift, sowie einen Port (Zugang) links im Node für den darin enthaltenen Wert.
Das Einstellen des Filters zur rechten Zeit (gleich am Anfang) und in der rechten Weise (sodass man alle Werte bekommt, die man braucht) ist eine häufige Fehlerquelle.
4. |
---|
![]() |
5. Verbinden Sie die ersten beiden Ports. Diese Handlung (das Verbinden der passenden Ports) führen Sie für den Rest dieser Prozessbeschreibung fortlaufend selbstständig durch.
5. |
---|
![]() |
6. Grenzen Sie nun ein, welche Felder Sie auch wirklich zur Weiterverarbeitung benötigen, indem Sie in der Zeile unter dem Filter innerhalb der FLOW.PROPERTIES auf das Datenbank-Icon klicken.
6. |
---|
![]() |
7. Verschieben Sie die verfügbaren Felder links hinüber auf die rechte Seite, um Ihre Auswahl benötigter Felder festzuschweißen.
Für sauberes Arbeiten ist es sehr wichtig, Ihre Nodes nicht durch Felder "zuzumüllen", die Sie gar nicht benötigen. Achten Sie deshalb darauf, niemals den Add all Button zu klicken, außer, Sie benötigen tatsächlich alle Felder. Wenn Sie einmal auf Add all geklickt haben, empfhielt es sich, die Auswahl von Neuem zu beginnen.
7. |
---|
![]() |
Der neukonfigurierte SelectOne-Node bildet jetzt einen Belegkopf in SAP ab, und zwar genau in der Form, wie Sie ihn für Ihre Weiterverarbeitung benötigen. Der nächste Node wird also ein Node sein, der diese Informationen nach CAS genesisWorld verschiebt. Folgerichtig wird dieser Node nicht unter SAPBO gruppiert sein, sondern unter GW. Es handelt sich dabei um einen GW-InsertOrUpdate: weil Sie damit einen Datensatz in CAS genesisWorld entweder EINFÜGEN ("insert") oder (falls er bereits vorhanden ist) AUKTUALISIEREN wollen.
8. Suchen Sie sich aus der Toolbox unten rechts einen GW-InsertOrUpdate-Node und positionieren Sie ihn per Drag & Drop rechts neben dem zuvor bearbeiteten SelectOne.
8. |
---|
![]() |
9. Definieren Sie für den InsertOrUpdate im Bereich der FLOW.PROPERTIES > tablename die alles entscheidende Tabelle: ihr "schöner" Name ist Receipt, aber auch den Systemnamen BSVOUCHER0 sollten Sie kennen und anzuwenden wissen, dieser Tabelle große Bedeutung zukommt.
9. |
---|
![]() |
Hier lernen Sie etwas zur Variabilität der alles entscheidenden Eingabe tablename: während Sie hier zuvor im Beispiel des SelecOne eine QUELLE definiert haben ( = etwas, woraus sich der SelectOne etwas "nimmt"), definieren Sie an derselben Stelle für den InsertOrUpdate dagegen einen ZIELORT ( = in welche Tabelle in CAS genesisWorld die Information "hineingeschoben" wird)!
10. Filtern Sie den InsertOrUpdate wie folgt auf die ZCC_EXTID-Tabelle:
10. |
---|
![]() |
Ein Gedankenspiel: würden Sie diesen Filter NICHT setzen, könnte Ihr InsertOrUpdate nur "inserten" und nicht "updaten": er (der Node) hätte kein Verständnis darüber, wie er erkennt, dass bereits ein Datensatz mit einer korrespondierenden ZCC_EXTID EXISTIERT, den es zu aktualisieren gilt. Sie befehlen so dem Node quasi: "Schaue nach, ob dieser Datensatz bereits vorhanden ist: wenn ja, aktualisiere ihn, wenn NICHT, lege ihn komplett neu an!"
11. Definieren Sie folgende resultfields:
11.1. | 11.2. |
---|---|
![]() |
![]() |
12. Fügen Sie über das Datenbank-Icon unter Inputs > dataobject alle im Bauplan genannten Felder hinzu.
13. Setzen Sie — wie bei Aufträgen in CAS genesisWorld immer der Fall — den fixen STATISTICFACTOR: 0 (Null):
Vergessen Sie nicht, immer wieder oben in der Kopfleiste über Save zwischenzuspeichern und bei der Verbindung Ihrer Ports darauf zu achten, dass manche Ports mehrere Edges auswerfen. Lesen Sie dazu hier den relevanten Trick zum Thema "Edgesplits".
13. |
---|
![]() |
1. |
---|
![]() |
Dies ist notwendig, weil wir DocEntrys aus mehreren Tabellen in eine einzige überführen; und damit sich identische DocEntrys nicht gegenseitig überschreiben, müssen sie mithilfe eines Präfix voneinander unterscheidbar gemacht werden.
2. |
---|
![]() |
Folgendes ist der Fall: In SAP wird beim Rechnungsempfänger ein CardCode gepflegt, der einem eindeutigen Kunden zuzuordnen ist. In CAS genesisWorld muss an diese Stelle die ADRESSE des Rechnungsempfängers geschrieben werden, und zwar über ihre eindeutige Zuordung, eine sogenannte GUID. Über einen Lookup wird also der CardCode in SAP an der beschriebenen Stelle durch die GUID einer CAS genesisWorld-Adresse überschrieben / ersetzt.
3. |
---|
![]() |
Lookup: |
![]() |
Filter: |
![]() |
Node |
---|
![]() |
Datenbanktransformation bei COMPNAME |
![]() |
Code-Transformation bei Script {...} |
![]() |
Damit ist der Belegkopf-Teil des Tasks weistgehend abgeschlossen. Im Folgenden werden die Nodes und Edgeflows behandelt, die sich um das Aktualisieren oder Erzeugen der BelegPOSITIONEN kümmern.
1. Fügen Sie einen SAPBP-Select aus der Toolbox rechts neben den InsertOrUpdate ein.
1. |
---|
![]() |
2. Tragen Sie beim alles entscheidenden tablename den Tabellennamen für die Belegpositionen der Aufträge ein, also: [dbo].[RDR1].
3. Filtern Sie wie folgt und kreieren Sie gleichzeitig einen Custom Input für die DOCENTRY als String (grün):
3. 1. | 3. 2. |
---|---|
![]() |
![]() |
4. Tragen Sie für den Select über das Datenbanksymbol in den FLOW.PROPERTIES alle im Bauplan für die Belegpositionen genannten Felder ein.
Wie Ihnen auffällt, werden die Feldnamen Ihrer Eingabe NICHT in den Select-Node hineingesetzt. Das liegt daran, dass sich Select ALLE Datensätze vornimmt; pro Feldname würden Sie also genauso viele Werte gelistet bekommen, wie es Datensätze gibt, also möglicherweise tausende! Deshalb bedienen Sie sich im folgenden Schritt einer SCHLEIFE: diese erlaubt es Ihnen, den Prozess des Herauslesens eines Datensatzes einmal gesondert nach Ihren Bedürfnissen (durch Transformationen etc) zu gestalten, was dann als Vorlage für den Select dient. Sie übergeben also die gerade eingetragenen Felder des Select in die Schleife hinein, um dort exemplarisch alles vorzunehmen, was Sie bei Ihrem Datentransport vornehmen müssen; die Schleife kümmert sich dann darum, dass dieser Prozess für jeden von dem Select herausgesuchten Datensatz durchgeführt wird.
5. Suchen Sie sich über die Toolbox einen ForChunked-Node heraus und setzen Sie ihn per Drag & Drop recht neben den Select.
5. |
---|
![]() |
Sobald Sie den Result-Port des Selects auf der linken Seite mit dem items-Port des ForChunked auf der rechten Seite verbinden, werden Sie Zeuge davon, wie alle für den Select definierten Felder auf die ForChunked-Schleife ÜBERTRAGEN und AUSGESCHRIEBEN werden. Das ist es, was wir meinen, wenn wir sagen, die Schleife führt EXEMPLARISCH für alle infragekommenden Datensätze die in den weiteren Schritten definierten Aktionen durch.
6. Suchen Sie sich über die Toolbox einen GW-InsertOrUpdate-Node heraus und setzen Sie ihn per Drag & Drop recht neben die ForChunked-Schleife.
6. |
---|
![]() |
Hier spiegeln wir also logischerweise den Prozess für den Belegkopf, vgl. dazu Punkt 17.
7. Wählen Sie für den neuen InsertOrUpdate bei tablename die genesisWorld-Belegpositionstabelle BSVOUCHERPOS.
8. Filtern Sie auf die ZCC_EXTID.
7. | 8. |
---|---|
![]() |
![]() |
9. Fügen Sie über das Datenbank-Icon unter Inputs > dataobject alle im Bauplan genannten Felder hinzu.
Feld | Lookup-Datenbanktransformation |
---|---|
![]() |
![]() |
2. |
---|
![]() |
3. |
---|
![]() |
Die folgenden Prozesschritte sind abschließende Zusätze, die sich auf BEIDE Teilbereiche des Belegimports beziehen, also auf Belegkopf und Belegpositionen.
1. Suchen Sie sich aus der Toolbox einen GW-CreateLink heraus und platzieren Sie ihn rechts neben dem ERSTEN InsertOrUpdate, dem für den Belegkopf.
1. |
---|
![]() |
2. Konfigurieren Sie den Node wie folgt:
2. |
---|
![]() |
Dieser Node hat die Aufgabe, eine Verknüpfung von der Verknüpfungsart PRIMÄRVERKNÜPFUNG anzulegen.
3. Wiederholen Sie Schritt 10 und und ändern Sie bei der Konfiguration des zweiten CreateLink-Nodes den linkname:
3. |
---|
![]() |
Dieser Node hat die Aufgabe, eine Verknüpfung von der Verknüpfungsart EMPFÄNGER anzulegen.
4. Suchen Sie sich abschließend aus Der Toolbox einen GW-Delete-Node heraus und platzieren Sie diesen zwischen dem Belegkopf-InsertOrUpdate und dem Select.
4. |
---|
![]() |
5. Konfigurieren Sie diesen wie folgt:
5. | 5. (Filter) |
---|---|
![]() |
![]() |
6. Klicken Sie anschließend oben mittig auf Toggle Flow und verbinden Sie das rechten OnExecute-Port mit dem linken OnExecute-Port des Selects für die Belegpositionen
Dieser Node stellt sicher, dass eine BEREINIGUNG der importierten Belegpositionen erfolgt.
Speichern Sie hierzu Ihren Task ein letztes Mal und wechseln Sie aus dem Graph-Editor zurück in das Rahmen-Menü des Tasks!
Klicken Sie auf Automatic Execution.
Klicken Sie ganz rechts auf Add Trigger.
Konfigurieren Sie Ihren Vollabgleich wie folgt:
3. |
---|
General: |
![]() |
DataObjects: |
![]() |
Start parameters: |
![]() |
Restart Policy: |
![]() |
Klicken Sie auf Automatic Execution.
Klicken Sie ganz rechts auf Add Trigger.
Was den Inkrementellen Abgleich in der ANLAGE funktional vom Vollabgleich unterscheidet, ist das "Tuning" der Sektion Automatic Execution INNERHALB der General-Konfiguration! Die Eingaben bei DataObjects und Start parameters bleiben gleich, wohingegen die Eingaben unter Restart Policy komplett entfallen.
3. |
---|
General: |
![]() |
DataObjects: |
![]() |
Start parameters: |
![]() |