Neu Workflows - Else Ausführung - Rekursion

akBenutzer

Gut bekanntes Mitglied
24. April 2017
191
19
Hallo,

ich fände es sinnvoll, dass man bei den Workflows noch eine weitere Aktion ausführen kann.

-> Wenn die Bedingungen nicht erfüllt werden, dann führe etwas anderes aus...

Ich weiß man kann dies als eine Bedingung so schreiben, mein Gedanke dahinter ist folgender:
1) Ich habe einen Workflow der 1 Std. nach dem Versand ausgeführt werden soll.
2) Dazu habe ich die Bedingung, dass sich im Lieferschein eine Tracking-Nr befindet (diese werden manuell/automatisch nachgetragen)
3) Wenn dann nach einer Stunde immer noch keine Tracking-Nr eingetragen ist, dann führe den gleichen Workflow wieder aus und warte wieder eine Stunde.

Hier wünsche ich mir die rekursive Aufrufmöglichkeit des Workflows. (Im Else Fall dann wieder den Workflow in die Queue einfügen).

Mit freundlichen Grüßen
Artur
 
  • Gefällt mir
Reaktionen: fibergirl

gnarx

Sehr aktives Mitglied
18. Januar 2018
3.823
525
Man kann doch einen WF in einem WF aufrufen. Heißt doch wenn keine Trackingnummer dann führe den 2. WF aus.
 

akBenutzer

Gut bekanntes Mitglied
24. April 2017
191
19
@gnarx Klar kann man das machen. Was aber wenn ich auf eine bestimmte Bedingung warten möchte und dies dann jede Stunde abfragen möchte? Ich kann doch nicht 48 Workflows machen. Das Problem ist ja, dass ich "zeitlich" begrenzt bin und einen Workflow nur einmal nach einer bestimmten Zeit ausführen kann.
-> Mein Wunsch ist ja eine bestimmte Bedingung abzufragen, die aber mit dem ersten Abfragen nicht unbedingt vorhanden sein muss => Der Else Fall soll ja dafür sorgen, dass die Abfrage erneut ausgeführt werden kann.
 

akBenutzer

Gut bekanntes Mitglied
24. April 2017
191
19
@Dalibor Josic Danke für den Vorschlag. Dies funktioniert aber nicht. Hier nochmal das Problem etwas veranschaulicht, damit man sieht, was mit dem rekursiven Aufruf gemeint ist:

Es gibt einen Workflow W, der (z. B.) bei einem Auftrag A ausgeführt werden soll.
Die notwendigen Bedingungen sind aber zeitabhängig und von Auftrag zu Auftrag unterschiedlich.
Ich möchte das W so schnell wie möglich ausgeführt wird. Also lasse ich W nach einer Stunde ausführen und prüfe, ob die Bedingungen erfüllt sind für A. Sind die Bedingungen nicht erfüllt, dann wird W also nicht ausgeführt (Da es ja keinen Else-Fall gibt, war es das erstmal). Ich kann jetzt natürlich einen zweiten Workflow erstellen, der nach 2 Stunden ausgeführt wird und die gleichen Bedingungen und Aktionen hat wie mein erster nur später.
-> Ich habe aber Aufträge, welche die Bedingungen von W erst nach 3-4 Tagen erfüllen und manche nach 1 Stunde. Ich kann nicht x-Workflows erstellen, damit die Aktionen so schnell wie möglich ausgeführt werden können.

=> Hier sehe ich zwei Lösungsansätze:
1. Einen Else-Fall, damit ich den Workflow einfach nochmal aufrufen kann und dieser sich in die Queue einreiht
2. Einen veränderten Ausführungsplan, der z. B. so lange im Zeitversatz geprüft wird, bis die Bedingung erfüllt ist (und nicht nur einmal).

Mir ist die 1. Lösung natürlich am liebsten, da mit einer Else-Ausführung dann auch viele andere Lösungen möglich werden, für andere Workflows.

Danke und Gruß
 
  • Gefällt mir
Reaktionen: fibergirl

fibergirl

Sehr aktives Mitglied
14. April 2016
828
253
Möglicherweise kannst Du in diesem Spezialfall nicht einen, sondern jeweils zwei gleichermaßen zeitversetzte Workflows starten, der eine für den Ja-Fall, der andere für den Nein-Fall (der hier den else-Zweig abdeckt).

Nur so in Kladde gedacht...
 

Dalibor Josic

Sehr aktives Mitglied
22. Dezember 2014
1.183
142
Gaildorf
Die notwendigen Bedingungen sind aber zeitabhängig und von Auftrag zu Auftrag unterschiedlich.
Wer gibt diese Zeit bzw. was gibt die Zeit vor ?

Nicht falsch verstehen, ist nicht negativ gemeint: Beispiele wie Workflow W mit Bedingung X führt Aktion Z aus, damit kann man relativ wenig anfangen. Sei doch so nett und nenne uns hier ein konkretes Beispiel, damit man es einfach besser verstehen kann. Kannst mir auch gerne eine PN schreiben.

Bisher habe ich jedes Szenario hinbekommen. Vielleicht erlebe ich eine Premiere und es geht tatsächlich nicht :) mit den jetzigen Möglichkeiten dein Vorhaben umzusetzen.
 

akBenutzer

Gut bekanntes Mitglied
24. April 2017
191
19
@fibergirl Ja, so hätte ich eine Iteration. Ich möchte aber mehrere.
@Dalibor Josic Ich versuch's mit Beispielen deutlicher zu machen :D. Ich halte es gerne Allgemein, damit man mehr Fälle abdecken kann, was es natürlich in der "Übersetzung" komplizierter macht^^

Workflow unter Versand - Lieferschein Versendet:
Bedingung: Pakete.enthält.Sendungsnummer ist nicht leer
Aktion: Führe Programm aus.
==> Nennen wir diesen Worflow einfach mal WOR

Jetzt ist es so, dass wir beim Versanddatenexport mit Fedex, der Auftrag als "Verpackt und versendet" markiert wird. Die Tracking-ID wird aber nachträglich importiert.
=> In der Regel wird die Tracking-ID innerhalb einer Stunde importiert (es gibt aber genug Ausnahmen zur Regel).

1. Ansatz)
Jetzt habe ich also den WOR mit einer Ausführungszeit nach 1 Std.
Ich kann auch noch den WOR mit einer Ausführungszeit nach 2 Std. zusätzlich machen (und nach 3 Std, 4 Std, etc.). Da es auch mal vorkommt, dass es durch Zwischenfälle bis zu 3 Tage dauert. (Also theoretisch 72 Workflows)

2. Ansatz)
Jetzt habe ich also den WOR mit einer Ausführungszeit nach 1 Std. und ich habe einen ZWEITEN Workflow der das Gegenteil prüft: wenn also keine Tracking-ID drin ist, dann führe WOR aus (füge in die Queue). Damit wird dann nach 2 Std. WOR geprüft und wenn keine Tracking-ID vorhanden ist, das wars dann auch.

Beide Ansätze finde ich unzureichend.
Ich finde den Else-Fall am einfachsten, da hier ein rekursiver Aufruf möglich wird, damit Ansatz 2 auch so lange weiterläuft, bis die Bedingung erfüllt wurde.
Der Knackpunkt ist, dass es eine manchmal eine unbestimmte Zeit dauert, bis die Bedingung erfüllt ist und ich aber dennoch so schnell wie möglich meine hinterlegte Aktion ausführen möchte.

Ich hoffe Ihr könnt mein Problem verstehen, da ich vielleicht es zu komplex darstelle.

Grüße Artur
 

fibergirl

Sehr aktives Mitglied
14. April 2016
828
253
@akBenutzer
Wo steht denn, dass Du das Spielchen mit den zwei parallelen zeitgesteuerten Workflows nur einmal spielst?
Der else- Workflow ruft immer wieder beide auf! Bis irgendwann mal der true-Zweig kommt.
Damit ist es dann zuende.

Vielleicht habe aber auch noch etwas nicht verstanden.

Im übrigen, wie gesagt, würde ich ja auch eine Erweiterung der Workflows um einen else-Aktionsblock befürworten.
 

akBenutzer

Gut bekanntes Mitglied
24. April 2017
191
19
@fibergirl Ja Stimmt. Ich könnte beide Workflows ausführen lasen, das habe ich vorhin wohl überlesen und/oder falsch verstanden. Damit habe ich "nur" einen Workflow extra. => Danke.
Dies werde ich mal so umsetzen. In unserer jetzigen Aufstellung sind das insgesamt 10 Workflows extra -.-

Gibt es hier auch einen Moderator, der etwas zu den Else-Ausführungen sagen kann?
 

Dalibor Josic

Sehr aktives Mitglied
22. Dezember 2014
1.183
142
Gaildorf
@akBenutzer
Wo steht denn, dass Du das Spielchen mit den zwei parallelen zeitgesteuerten Workflows nur einmal spielst?
Der else- Workflow ruft immer wieder beide auf! Bis irgendwann mal der true-Zweig kommt.
Damit ist es dann zuende.

Vielleicht habe aber auch noch etwas nicht verstanden.

Im übrigen, wie gesagt, würde ich ja auch eine Erweiterung der Workflows um einen else-Aktionsblock befürworten.
Absolut korrekt.
 

gnarx

Sehr aktives Mitglied
18. Januar 2018
3.823
525
Thema: FedEx liest doch die Transaktionsnummern automatisch ein sobald in einem bestimmten Verzeichnis eine Datei liegt. Dabei ist es doch egal wann die Datei kommt.
 

akBenutzer

Gut bekanntes Mitglied
24. April 2017
191
19
@gnarx Nicht so ganz, aber kann man grob gesagt so sagen. Problem ist aber, dass Ich bei den Workflows nur bestimmte "Auslösende Ereignisse" habe und nicht sagen kann: "Führe aus, sobald die Datei da ist". Auslösendes Ereignis ist nun mal "Lieferschein versendet".
Über die JTL-Wawi-Extern.dll kann ich auch keine manuellen Workflows ansteuern... oder doch?
 

gnarx

Sehr aktives Mitglied
18. Januar 2018
3.823
525
Ist bei dir die FedEx Software eingerichtet?

Wenn ja gibt es einen FedEx Export und einen Import, je nachdem welche Leistungen du in Anspruch nimmst. Beides haben wir in JTL unter Versand -> Im / Exportvorlagen angelegt.
Die FedEx Software holt sich nun automatisch den Export und führt alles automatisch so aus wie es auch mit DHL z.B. läuft.
In der Wawi WMS/ Packtisch gebe ich den Export und den Import unter "Versand" an. So wird die Sendungsnummer automatisch eingelesen. Danach kannst du dann ja die WF`s laufen lassen.

Die Vorlagen für den Im und Export kann ich liefern sowie eine Anleitung wie man es einbindet. Einen Kontakt zu dem Einrichter der FedEx Software kann ich auch herstellen.
 

akBenutzer

Gut bekanntes Mitglied
24. April 2017
191
19
@gnarx Wir versenden mit Fedex. Alles schon eingerichtet. Für den Import der Sendungsnummern haben wir nicht die Lösung von T4DT genommen, ich habe den Import selbst programmiert. Da wir international unsere Produkte verkaufen, kann es zu Problemen in der Fedex Software kommen und trotz des Versanddatenexports kein Versandlabel seitens Fedex erstellt werden (sei es falsche Kundendaten, Ländereinstellung etc. ). Es ist ja auch nur ein Beispiel, warum wir einen ELSE-Fall wollen, ich wollte meine Fragestellung ja Allgemein halten, damit wir nicht bei dem Beispiel bleiben.^^
-> Wir weichen hier vom Thema ab (danke aber für die versuchte Hilfe ;) )

Moderator? Else-Fall?
 

gnarx

Sehr aktives Mitglied
18. Januar 2018
3.823
525
Was ich nicht verstehe ist warum ihr einen else haben wollt. Ihr könnt das doch in den "Erweiterten Eigenschaften" (WF) viel genauer abbilden oder verstehe ich da was nicht richtig.
Hier mal ein Beispiel. Du kannst am Ende auch noch ein else machen um abzufragen wenn alles nicht zutrifft:
Code:
{% for Item in Vorgang.AuftragsPositionen.ArtikelPositionen %}\
{% if Vorgang.Lieferung.Lieferadresse.LandISO == 'DE' %}{% assign landDE = true %}{% endif %}\
{% assign waren=Item.Artikel.Warengruppe.InterneWarengruppennummer %}\
{% assign menge=Vorgang.AuftragsPositionen.Positionen.ErstesObjekt.Menge %}
{% assign preis=Vorgang.Zahlungen.GesamtbruttopreisOhneVersandart %}\
{% if bezeichnung contains 'Intel' or Vorgang.AuftragsPositionen.ArtikelPositionen.ErstesObjekt.Artikel.Hersteller == 'Intel' %}{% assign titel = true %}{% endif %}\
{% if bezeichnung contains 'AMD' or Vorgang.AuftragsPositionen.ArtikelPositionen.ErstesObjekt.Artikel.Hersteller == 'AMD' %}{% assign titel2 = true %}{% endif %}
{% if waren == "42" and landDE =="true" and preis >= 20,00 %}P500
    {% elsif waren == "42" and landDE =="true" and preis <= 20,00 and menge >= 3 %}P500
    {% elsif waren == "53" and landDE =="true" and preis <= 20,00 and menge >= 3 %}P500
    {% elsif waren == "53" and landDE =="true" and preis > 20,00 %}P500
    {% elsif waren == "47" and landDE =="true" and menge == 1 %}P500
    {% elsif waren == "190" and landDE =="true" and menge == 1 %}P500
    {% elsif waren == "37" and landDE =="true" and preis >= 20,00 %}P500
    {% elsif waren == "37" and landDE =="true" and preis <= 20,00 and menge >= 2 %}P500
    {% elsif waren == "176" and landDE =="true" %}P500
    {% elsif waren == "37" and landDE =="true" %}P500
    {% elsif waren == "172" and landDE =="true" %}P500
    {% elsif waren == "170" and landDE =="true" %}P500
    {% elsif waren == "174" and landDE =="true" %}P500
    {% elsif waren == "46" and landDE =="true" and menge == 1 %}P500
    {% elsif waren == "71" and landDE =="true" and preis <= 20,00 and menge >= 3 %}P500
    {% elsif waren == "71" and landDE =="true" and preis > 20,00 %}P500
    {% elsif waren == "173" and landDE =="true" and menge >= 2 %}P500
    {% elsif waren == "61" and landDE =="true" and preis > 20,00 %}P500
    {% elsif waren == "72" and landDE =="true" and menge >= 3 %}P500
    {% elsif waren == "177" and landDE =="true" %}P500
    {% elsif waren == "181" and landDE =="true" %}P500
    {% elsif waren == "55" and landDE =="true" and preis <= 20,00 and menge >= 3 %}P500
    {% elsif waren == "55" and landDE =="true" and preis > 20,00 %}P500
    {% elsif waren == "34" and landDE =="true" and preis <= 20,00 and menge >= 3 %}P500
    {% elsif waren == "34" and landDE =="true" and preis > 20,00 %}P500
    {% elsif waren == "180" and landDE =="true" and preis <= 20,00 and menge >= 3 %}P500
    {% elsif waren == "180" and landDE =="true" and preis > 20,00 %}P500
    {% elsif waren == "169" and landDE =="true" %}P500
    {% elsif waren == "179" and landDE =="true" %}P500
    {% elsif waren == "84" and landDE =="true" and menge >= 2 %}P500
    {% else %}Nix trifft zu
{% endif %}
{% if bezeichnung contains 'ECC' %}{% assign titel = true %}{% endif %}\
    {% if waren == "42" and landDE =="true" and titel =="true"  %}P500
{% endif %}
{% endfor %}
 

Anhänge

  • 2021-05-26 09_22_12-CSB-JTL Server - AnyDesk.jpg
    2021-05-26 09_22_12-CSB-JTL Server - AnyDesk.jpg
    41,3 KB · Aufrufe: 11

akBenutzer

Gut bekanntes Mitglied
24. April 2017
191
19
Natürlich haben wir auch die Erweiterten Eigenschaften in reger Nutzung ;) ... Ich möchte einen Else-Fall, damit ich nicht (wie die derzeitige Lösung) einen weiteren Workflow schreiben muss. JTL bietet es ja nur an, einen Workflow nur ein einziges ausführen zu lassen. -> D. h. damit ich eine zeitlich wiederholende Bedingungsabfrage habe, brauche ich einen zweiten Workflow der das Gegenteil prüft und dann die Workflows wieder anstößt, siehe Post #11 und Post#12. Mit einem Else-Fall kann das mit einem Workflow geschehen
-> dass er bei Nichterfüllung einfach sich selbst noch einmal aufruft (meine gewünschte Rekursion).
Ich denke, dass kann man auch anders lösen -> z. B. einen Workflow einfach öfter ausführen lassen können.
Aber mit einem Else-Fall kann man sicherlich noch mehr anstellen, als eine Rekursion.
 

fibergirl

Sehr aktives Mitglied
14. April 2016
828
253
Mit den derzeitigen Workflows kann man etwas tun, wenn eine oder einige Bedingungen erfüllt sind.

Mit vorhandenem else-Zweig kann man das eine tun, wenn eine oder einige Bedingungen erfüllt sind, und das andere, wenn sie eben nicht erfüllt sind.
Ich habe diese Möglichkeit schon öfter vermisst.
Das wäre ein Riesen-Fortschritt.
 
  • Gefällt mir
Reaktionen: akBenutzer