Wenn Bedingung xy, dann weiter bei Step z

Hallo,

ich habe ein Flow mit einem größeren Spreadsheet. Dieses teile ich in mehrere Bereiche auf über den Spreadsheetmapper. Für den ersten Teil soll dann Step a-d ausgeführt werden, für den zweiten Teil e-h usw.


Von der Abfolge habe ich mir das so gedacht:

- Großes Spreadsheet einlesen

- 1. Teilbereich mappen

- Wenn gemapptes Spreadsheet nicht leer, setze den Flow fort - wenn gemapptes Spreadsheet leer, springe direkt zu Step 2. Teilbereich mappen

- irgendwas

- irgendwas

- 2. Teilbereich aus großem Spreadsheet mappen

- Wenn gemapptes Spreadsheet nicht leer, ... usw.



Leider fehlt mit der Schritt mit dem Sprung. Bisher kenne ich nur StopFlowIF, aber ich würde den Flow schon gern fortsetzen, nur eben ein paar Steps überspringen.

Welcher Step wäre hier geeignet?


Vielen Dank für die Hilfe

Diana


Hallo Synesty,


lässt sich das Problem irgendwie lösen? Habt ihr diesen Post auf dem Schirm?


Ich würde mich sehr über eine zeitnahe Rückmeldung freuen. Besten Dank :)

Hallo Diana,


lässt sich deine Verarbeitung in zwei Flows aufteilen? Dann wäre der FlowExecutingStep etwas für dich. Hier kannst du an der Stelle wo du willst eine Bedingung einfügen. Nur wenn diese zutrifft (in deinem Fall: Spreadsheet ist nicht leer) dann führt dieser Step einen weiteren Flow aus.


Schau mal ob du das so umstellen kannst.

Hallo Paco,


vielen Dank für dein Interesse. Daran habe ich auch schon gedacht. Das wäre aber nur die allergrößte Notlösung. Denn viele Steps sind gleich und es wäre ein Vielfaches an Arbeit jedes Mal einen eigenen Flow zu bauen. Es bleibt auch nicht bei 2-3 Teilen, sondern es sind später gut und gerne 6-10 Teile. Es geht quasi darum, dass jedes Teil ein bisschen anders verarbeitet wird, aber dann kommen alle wieder zusammen und werden auf die gleiche Weise weiterverarbeitet.


Einzelne Flows bedeuten also:

- viel viel mehr Arbeit

- viel weniger Übersichtlichkeit

- und durch mehr Flows und Steps auch deutlich höhere Kosten, die wir nicht in Kauf nehmen würden


Eine Wenn-Dann Bedingung müsste doch auch anderen Nutzern bei vielen vielen Anwendungsfällen helfen. Ich kann mir nicht vorstellen, dass es hierfür noch keine Lösung gibt.


Viele Grüße

Diana

Hallo Diana,


tatsächlich gäbe es da was. Ich habe einen ähnlichen Fall und empfinde den den FlowExecutingStep als sehr aufwändig.


https://synesty.freshdesk.com/support/discussions/topics/11000019576?page=1


Vielleicht schauen sich die Mitarbeiter von Sysnesty das nochmal an und könnten das mit einfügen, wenn sich nur genug Interessenten finden.


Viele Grüße
Tobias M.

Aktuell ist nichts anderes geplant. Der FlowExecutingStep und FlowTrigger sind die beiden Möglichkeiten. Wiederverwendbare Logik sollte wie von Stefan vorgeschlagen in einen separaten Flow ausgelagert werden, der dann aufgerufen wird. Mittlerweile gibt es beim FlowExecuting Step eine Erweiterung, die die Arbeit damit vereinfacht. Und zwar kann man jetzt aus dem Aufrufer (A) direkt in den aufzurufenden Flow (B) in eine sog. Sub-Flow-Ansicht springen. Dabei werden die Flow-Variablen mit den Daten des Aufrufers befüllt. Das erleichtert das Entwickeln mit diesem Konstrukt um einiges.





Die von Tobias angesprochene Lösung ist nur eine interne Notlösung gewesen, deren Entfernung nur noch eine Frage der Zeit ist.

Hallo Synesty,


das ist aber wirklich Mist. Jetzt habe ich also die Wahl zwischen:


- ganz vielen Einzelflows, die zu 70% die gleichen Steps verwenden.

- oder einen Megaflow mit zahlreichen Subflows, die teilweise nur 1-2 Steps beinhalten.


In erstem Fall entsteht ein sehr hoher Aufwand bei Änderungen und unübersichtlich ist es auch.

Bei 2 ist es noch viel unübersichtlicher.


Und in beiden Fällen werden die Kosten uns davon abhalten diese Lösung zu nutzen. Es heißt doch immer Synesty kann alles. Dass es jetzt daran scheitern soll einzelne Steps zu überspringen mag ich nicht glauben.


In den anderen Fällen wo eine Lösung vermisst wurde, habt ihr oft neue Variablen oder Techniken zeitnah importiert.


Kann mir jemand erklären, warum ihr es nicht möglich machen wollt, Steps zu überspringen? Hat das vielleicht sogar besagte finanzielle Gründe, weil man nicht mehr gezwungen ist, sehr viele Einzelflows anzulegen? Das wäre ein wirklich schahler Beigeschmack :/

Wenn nicht, was ist dann der Grund?


Enttäuschte Grüße

Diana

Hallo Diana,

wir müssen als Plattformbetreiber darauf achten, dass Prozesse schlank und schnell abgearbeitet werden. Schon heute ist es ein Problem, dass Flows zu viele Steps haben und damit zu komplex werden. Das macht Flows fehleranfällig, schwer intern zu optimieren, schwer zu debuggen, schwer zu verstehen usw..

Wir halten daher die Skip-Logik für sehr schädlich und werden diese nicht umsetzen. Synesty ist an einigen Stellen schon komplex genug.


Evtl. finden wir irgendwann in Zukunft dafür einen anderen Lösungsansatz. Da die Thematik aber sehr tief in der Plattform liegt, ist das sehr komplex und hat Auswirkungen auf alle Bereiche, insbesondere User-Interface, Abarbeitungslogik, Performace etc. . D.h. hier ist nicht mit einer Schnellschuss-Lösung zu rechnen.


Vielleicht können wir dir einen anderen Tip geben, wie du deinen Flow bauen kannst und trotzdem zum Ziel kommst.

Da wäre ein konkreteres Beispiel hilfreich.




Hallo Synesty,


vielen Dank für die schnelle Antwort. Ich verstehe, dass Prozesse schlank und schnell abgearbeitet werden sollen. Was ich nicht verstehe ist, warum viele Steps in einem Flow ein Problem darstellen, aber vermutlich habe ich dafür zu wenig Programmiererfahrung.


Eher im Gegenteil: Wie kann ein Prozess komplizierter werden, wenn ich Steps überspringe? Mein Ziel ist es ja auch die Flows schlank und schnell zu halten, indem ich eben nur benötigte Steps ausführe und nicht alle für alles.


Egal... ich freue mich über jegliches Interesse und jede Hilfe. Ich versuche mal das Problem genauer zu beschreiben.


Wir möchten mit Synesty unsere Auftragsverarbeitung automatisieren und vereinfachen. Hierfür lasse ich ausgewählte Aufträge in einen bestimmten Plenty Status laufen. Diese sollen nun von Synesty abgerufen und an die verschiedenen Lager übertragen werden. Im Anschluss werden erfolgreich übermittelte Aufträge auf einen Erfolgsstatus gesetzt und nicht erfolgreiche Aufträge oder Aufträge mit Auffälligkeiten (bestimmte Artikel, die so nicht verarbeitet werden können oder Packstationsaufträge, die eine Sonderbehandlung erfordern) sollen in andere Stati geschoben werden.


So lange es nur um 1 Lager geht, klappt das super. Ich hole die Datei ab, filtere auf das Lager, sortiere die Bestellungen, übermittle die erfolgreichen zur Ausführung an das Lager und ändere die Stati entsprechend in Plenty.


Ich brauche aber 3-4 Exportsteps (an Lager senden, erfolgreiche Aufträge weitersetzen, nicht erfolgreiche Aufträge weitersetzen 1, nicht erfolgreiche Aufträge weitersetzen 2) pro Flow/Lager. Zudem wird natürlich in Schritt 1 auch die große Datei abgerufen, die alle Lager enthält. Das frisst unnötigerweise Ressourcen.


Daher war meine Idee die komplette Datei abzurufen, auf erfolgreiche Bestellungen zu filtern, Lager1 zu filtern und Lager1 zu übermitteln, Lager2 zu filtern und Lager2 zu übermitteln, Lager3 zu filtern und zu übermitteln etc. und dann die erfolgreich durchgeführten Bestellungen in Plenty weitersetzen und die Problemfälle in einen anderen Status zu setzen. Ergo: Ich brauche nur 1 Ausführung für die Bestellungen, die große Datei muss nur 1x abgerufen werden und ich brauche nur *Anzahl-der-Lager* an Exportsteps + 2-3 für das Weitersetzen der Stati in Plenty. Zudem muss ich auhc das Filtern nur 1x programmieren und umsetzen und wenn eine neue Filtereigenschaft dazukommt, brauche ich das nur an 1 Stelle zu ergänzen.


Problem: Sind in der großen Datei für Lager1 keine Aufträge vorhanden, bekomme ich natürlcih einen Fehler, wenn ich eine leere Datei übermitteln will. Somit wird auch Lager 2 und 3 nicht übermittelt. Was ich brauche ist also: "Gibt es Aufträge für Lager1? Ja -> Lager 1 übermitteln, Nein -> Weiter mit Lager2"


Vielleicht habt ihr ja noch eine Idee, wie ich das lösen kann?


Viele Grüße


Haben gerade noch mal im Team nachgefragt:


Aussage war:

Klingt nach FlowExecuting Step (mit Condition).

Meistens ist es machbar einen zusätzlichen Flow zu erstellen, der für alle Lager ausgeführt werden kann und die LagerID als Flow-Variable zu übergeben:


FlowA:

1.Download Datei

2. Filter Lager 1

3. -> FlowExecuting Step ruft FlowB auf (mit weitere Verarbeitung, Status in Plenty setzen )


4. Filter Lager2

5 -> FlowExecuting Step ruft FlowB auf (mit weitere Verarbeitung, Status in Plenty setzen )

5. Filter Lager 3

6. -> FlowExecuting Step ruft FlowB auf (mit weitere Verarbeitung, Status in Plenty setzen )


Flow B (wird von FlowA mehrmals mit unterschiedlichen Parametern aufgerufen):

weitere Verarbeitung, Status in Plenty setzen


Alternative 1 FlowTrigger:

Auch mit dem FlowTrigger ließe sich das realisieren (ab Starter verfügbar). Da kann man nur keine Spreadsheets übergeben sondern würde nur die LagerID an FlowB übergeben. Dort muss dann auch der Abruf der Daten erfolgen.




Hallo Synesty,


vielen Dank für die ausführliche Antwort. Das Problem ist, dass die Lager die Aufträge auf unterschiedliche Weise bekommen. Bei den einen funktioniert der FTP-Upload zuverlässig, bei anderen musste ich direkt per API programmieren, damit kein Fehler auftritt.


Kann ich denn für eine Übergabe per FTP oder API auch alle relevanten Parameter übergeben? Dann hätte man zumindest nur 2 Subflows (FTP Übergabe mit entsprechenden Variablen und API Übergabe mit entsprechenden Variablen).


Hmmm... ich habe gerade mal die Doku gelesen. Wir haben nur die Starter Version und dementsprechend keinen Zugriff auf Flow-in-Flow Bliebe also nur die FlowTrigger Variante. ber die passt auch nicht. Ich müsste dann ja doch für jedes einzelne Lager einen einzelnen Flow schreiben und genau das wollte ich ja vermeiden.


Das ist echt blöd. Die vorgeschlagenen Lösungen helfen mir leider nicht weiter bzw. sind finanziell einfach zu weit entfernt. Das ist wirklich schade, denn die Auftragsverarbeitung war das eigentliche Ziel bei der Anschaffung von Synesty. Das Eintragen der Paketnummern funktioniert zwar auch sehr gut und ist mega angenehm, aber die eigentliche Zeitersparnis käme erst durch die Auftragsexporte an die richtigen Stellen. Leider greift hier immer eine Limitierung, die es für uns unwirtschaftlich macht (Export-Steps, Anzahl der Flows oder sogar Flow-in-Flow Restriktion, da wir nur Starter sind).


Hmmm.. hätte wirklich nicht gedacht dass es an "Step überspringen" scheitert. Für einen Laien wirkt das Problem trivial, ist es nur anscheinend nicht :(


Gibt es denn vielleicht eine Möglichkeit den Flow trotzdem weiter ausführen zu lassen, auch wenn er Fehler bringt? Oder brechen diese zwangsläufig ab?

Gibts hier noch weitere Ideen?


Gibt es denn vielleicht eine Möglichkeit den Flow trotzdem weiter ausführen zu lassen, auch wenn er Fehler bringt? Oder brechen diese zwangsläufig ab?

Hallo Synesty,

ich muss mich mal hier anschließen. Gibt es für das Step überspringen schon eine Lösung?

Wir haben mehre Mandanten, für die wir versenden. Dadurch müssen wir von verschiedenen Orten Dateien laden und verarbeiten. Von Aufträgen, Produktdaten bis zu Versandreporten, es werden aber nicht immer Daten von unseren Mandanten bereitgestellt. Für jeden Mandaten mind. 3 Flow bereitzustellen ist nicht wirtschaftlich, nicht übersichtlich und verursacht eine höhere Auslastung, , schnell sind wir hier bei 40 Flow.

Ein paar kleinere Ansätze gibt es ja schon, z.B. beim E-Mail Versand mit Anhang. Eine Auswahl, ob eine E-Mail mit einem Anhang von 0 Byte verschickt werden soll oder nicht, ist ja vorhanden. Auch wenn Sie nicht viel nützt , wenn Sie hinter SpreadsheetExcelWriter steht und die erzeugte Datei immer mind. 4 KB hat.


Mit freundlichen Grüßen

S. Geier

Hallo,

eventuell eine Möglichkeit die mir hier spontan einfällt, um Steps zu "überspringen" wäre das ausnutzen des Filtersteps. Ist wie gesagt nur ein spontaner Einfall und von mir jetzt persönlich nicht getestet und kommt bestimmt auch auf den genauen Anwendungsfall drauf an.

Aber folgende Idee:
Mit dem TextHTMLWriter könnte man Gegebenheiten abprüfen und eine Filterbedingung für den Filterstep erstellen. Die Idee ist hier, dass wenn ein Step X übersprungen werden soll nimmt er den Filter als Quelle, welche entweder eine Bedingung enthält, bei der immer ein leeres Spreadsheet herauskommt (überspringen), oder halt das entsprechend gewünschte Spreadsheet (normale Ausführung).

Dann könnte man sicherlich auch mit mehreren StopFlowIf-Steps arbeiten, welche eventuell richtig positioniert dann die richtige Wirkung haben könnten (wenn bspw. eine leere CSV-Datei nicht hochgeladen werden soll etc.)


Hoffe es ist eine hiflreiche Anregung.


Gruß

Florian