- Beiträge: 36
Lookup Heater bedingt ausführen
- Philip Herbert
- Autor
- Offline
- Benutzer
Weniger
Mehr
1 Jahr 6 Monate her #4835
von Philip Herbert
Lookup Heater bedingt ausführen wurde erstellt von Philip Herbert
Hallo,
gibt es eine Möglichkeit den Lookup Heater bedingt auszuführen ?
Ich habe eine InMemory Tabelle auf der Readseite mit sehr vielen zusammengehörigen Zeilen.
Hier möchte ich für die erste Zeile eine Datenbankabfrage durchführen, um zu entscheiden, ob diese und folgende Zeilen exportiert werden müssen.
Das Kriterium für die Prüfung (ein MD5 Hash) ist auch nur für die erste Zeile gültig / prüfbar.
Danke, Philip Herbert
gibt es eine Möglichkeit den Lookup Heater bedingt auszuführen ?
Ich habe eine InMemory Tabelle auf der Readseite mit sehr vielen zusammengehörigen Zeilen.
Hier möchte ich für die erste Zeile eine Datenbankabfrage durchführen, um zu entscheiden, ob diese und folgende Zeilen exportiert werden müssen.
Das Kriterium für die Prüfung (ein MD5 Hash) ist auch nur für die erste Zeile gültig / prüfbar.
Danke, Philip Herbert
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
1 Jahr 6 Monate her #4838
von FlowHeater-Team
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
FlowHeater-Team antwortete auf Lookup Heater bedingt ausführen
Hallo Herr Herbert,
ja und nein. Im Prinzip werden immer „alle“ Heater ausgeführt, auch wenn diese z.B. hinter einem ELSE Zweige stehen und die Bedingung zutrifft.
Sie müssten Sich ein kleines Konstrukt bauen, das nur Prüfungen für den ersten Satz vornimmt und diesen Wert sich solange merkt bis eine andere zusammenhängende Gruppe verarbeitet wird. Im Anhang finden Sie ein kleines Beispiel wie das umgesetzt werden kann.
Hier wird im ersten Verarbeitungsschritt die InMemory Adapter Tabelle eingelesen und bereits beim Einlesen geprüft ob diese Datensätze gefilterte werden können.
Das Ganze wird so erreicht, siehe Screenshot.
ja und nein. Im Prinzip werden immer „alle“ Heater ausgeführt, auch wenn diese z.B. hinter einem ELSE Zweige stehen und die Bedingung zutrifft.
Sie müssten Sich ein kleines Konstrukt bauen, das nur Prüfungen für den ersten Satz vornimmt und diesen Wert sich solange merkt bis eine andere zusammenhängende Gruppe verarbeitet wird. Im Anhang finden Sie ein kleines Beispiel wie das umgesetzt werden kann.
Hier wird im ersten Verarbeitungsschritt die InMemory Adapter Tabelle eingelesen und bereits beim Einlesen geprüft ob diese Datensätze gefilterte werden können.
Das Ganze wird so erreicht, siehe Screenshot.
- Über den AutoID Heater wird pro Gruppe hochgezählt. Wenn hier eine 1 kommt dann ist das der erste Datensatz einer Gruppe!
- Über den IF-THEN-ELSE Heater wird geprüft ob der ersten Datensatz der Gruppe verarbeitet wird. Ist das der Fall wird das Ergebnis des zweiten IF-THEN-ELSE Heater 3) verwendet falls nicht wird der Parameter $LAST$ zurückgegeben.
- Über diesen IF-THEN-ELSE Heater findet die eigentliche Prüfung statt. Hier müssten Sie Ihren Lookup Heater einbauen.
- Das ist jetzt das Konstrukt, das sich merkt was im ersten Datensatz der Gruppe geprüft wurde. Das Ganze geht über einen FlowHeater Parameter „$LAST$“ und jeweils einen SET/GET Parameter Heater.
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Philip Herbert
- Autor
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 36
1 Jahr 6 Monate her #4839
von Philip Herbert
Philip Herbert antwortete auf Lookup Heater bedingt ausführen
Hallo Herr Stark,
..bedeutet dann einen weiteren Ausführungsschritt in einer jetzt schon recht komplexen Verarbeitung.
Gibt es eigentlich eine Möglichkeit im gleichen Verarbeitungsschritt einen Wert per SET zu speichern und auch diesen Datensatz zu filtern ?
Ich habe den Eindruck, dass Filter auch ein SET verhindert.
ggf. wäre das sonst eine schöne Anforderung an den Filter-Heater: ein 2. Parameter, der in einer Variable abgelegt wird.
Danke, Philip Herbert
..bedeutet dann einen weiteren Ausführungsschritt in einer jetzt schon recht komplexen Verarbeitung.
Gibt es eigentlich eine Möglichkeit im gleichen Verarbeitungsschritt einen Wert per SET zu speichern und auch diesen Datensatz zu filtern ?
Ich habe den Eindruck, dass Filter auch ein SET verhindert.
ggf. wäre das sonst eine schöne Anforderung an den Filter-Heater: ein 2. Parameter, der in einer Variable abgelegt wird.
Danke, Philip Herbert
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
1 Jahr 6 Monate her #4840
von FlowHeater-Team
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
FlowHeater-Team antwortete auf Lookup Heater bedingt ausführen
Hallo Herr Herbert,
Sie können das auch ohne einen vorgelagerten Verarbeitungsschritt filtern. So wird halt beim Einlesen die große Datenmenge verarbeitet und beim Ausgeben nochmal. Hier fehlen mir ein paar Infos um ggf. bessere / andere Beispiele zu erzeugen.
Bzgl. des Set Parameter Heater) Die werden immer vor dem Filter Heater ausgeführt um ggf. die FlowHeater Parameter Werte in einer IF-THEN-ELSE Bedingung verwenden zu können, etc.
Sie können das selbst testen. Im Anhang habe ich Ihnen mal ein kleines Beispiel erstellt. Wenn Sie hier mal 2 Haltepunkte (siehe Screenshot) auf den Filter Heater sowie Set Parameter Heater setzen und die Definition im Test Modus ausführen sehen Sie dass zuerst der Set Parameter Heater ausgeführt wird.
Sie können das auch ohne einen vorgelagerten Verarbeitungsschritt filtern. So wird halt beim Einlesen die große Datenmenge verarbeitet und beim Ausgeben nochmal. Hier fehlen mir ein paar Infos um ggf. bessere / andere Beispiele zu erzeugen.
Bzgl. des Set Parameter Heater) Die werden immer vor dem Filter Heater ausgeführt um ggf. die FlowHeater Parameter Werte in einer IF-THEN-ELSE Bedingung verwenden zu können, etc.
Sie können das selbst testen. Im Anhang habe ich Ihnen mal ein kleines Beispiel erstellt. Wenn Sie hier mal 2 Haltepunkte (siehe Screenshot) auf den Filter Heater sowie Set Parameter Heater setzen und die Definition im Test Modus ausführen sehen Sie dass zuerst der Set Parameter Heater ausgeführt wird.
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Philip Herbert
- Autor
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 36
1 Jahr 6 Monate her #4841
von Philip Herbert
Philip Herbert antwortete auf Lookup Heater bedingt ausführen
Ich hatte das Problem, dass der IF Heater mit dem Vergleich ausgeführt wurde, ohne das zuvor der Wert zum Vergleichen abgespeichert wurde.
Nachdem ich den Schritt dann nochmal neu definiert habe, konnte ich dann auch mit Haltepunkten die korrekte Reihenfolge nachvollziehen.
Kann man die Reihenfolder der Abarbeitung nicht irgendwie darstellen ?
So läuft es jetzt jedenfalls:
Danke, Philip Herbert
Nachdem ich den Schritt dann nochmal neu definiert habe, konnte ich dann auch mit Haltepunkten die korrekte Reihenfolge nachvollziehen.
Kann man die Reihenfolder der Abarbeitung nicht irgendwie darstellen ?
So läuft es jetzt jedenfalls:
Danke, Philip Herbert
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Philip Herbert
- Autor
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 36
1 Jahr 6 Monate her #4843
von Philip Herbert
Philip Herbert antwortete auf Lookup Heater bedingt ausführen
Also irgendetwas verstehe ich hier einfach nicht.
der Lookup-Heater wird doch für jeden Datensatz ausgeführt.
Auch habe ich offenbar ein grundsätzliches Verständnisproblem zur Reihenfolge.
Ich komme immer wieder in einen Zustand, in dem ein direkt zugewiesener SET-Parameter erst zu spät ausgeführt wird (lt. Breakpoint), bzw. wo die Reihenfolge der Abarbeitung einfach nicht reproduzierbar bzw. nachvollziehbar ist,
Auch schaffe ich es nicht vom LookupHeater ein Ergebnis zu bekommen, ohne einen Eingangsparameter zu setzen.
Im LookupHeater ein WHERE Spalte = $RechnNr$ liefert immer NULL. Verwende ich $1 und (versuche) den Eingangswert vorher zu setzen, funktioniert der Lookup Heater, aber das Reihenfolge Problem tritt u.U. wieder auf.
Wo könnte hier das Verständnisproblem liegen ?
Danke, Philip Herbert
der Lookup-Heater wird doch für jeden Datensatz ausgeführt.
Auch habe ich offenbar ein grundsätzliches Verständnisproblem zur Reihenfolge.
Ich komme immer wieder in einen Zustand, in dem ein direkt zugewiesener SET-Parameter erst zu spät ausgeführt wird (lt. Breakpoint), bzw. wo die Reihenfolge der Abarbeitung einfach nicht reproduzierbar bzw. nachvollziehbar ist,
Auch schaffe ich es nicht vom LookupHeater ein Ergebnis zu bekommen, ohne einen Eingangsparameter zu setzen.
Im LookupHeater ein WHERE Spalte = $RechnNr$ liefert immer NULL. Verwende ich $1 und (versuche) den Eingangswert vorher zu setzen, funktioniert der Lookup Heater, aber das Reihenfolge Problem tritt u.U. wieder auf.
Wo könnte hier das Verständnisproblem liegen ?
Danke, Philip Herbert
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
1 Jahr 6 Monate her #4847
von FlowHeater-Team
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
FlowHeater-Team antwortete auf Lookup Heater bedingt ausführen
Hallo Herr Herbert,
das Problem ist die Aktivierungsreihenfolge. Bitte Screenshot beachten!
Das Problem bei Ihrer Definition ist wahrscheinlich, dass der Set Parameter Heater (1) als erstes ausgeführt wird und dann die ganze Kette durchlaufen wird. Der zweite Set Parameter Heater (2) wird erst danach aufgerufen.
Sie können das ändern indem Sie den ersten Set Parameter Heater (1) vom Designer löschen und erneut einfügen. So wird dieser ans Ende der Aktivierungsreihenfolge gesetzt und am Schluss der Set Parameter Heater ausgeführt.
Aktuell gibt es leider keine Möglichkeit das anders zu lösen. Es wird aber an einer Lösung des Problems gearbeitet.
In folgenden Forumsbeitrag finden Sie eine ziemlich genaue Beschreibung zur Aktivierungsreihenfolge der Heater . Verarbeitungsreihenfolge der Heater beeinflussen
das Problem ist die Aktivierungsreihenfolge. Bitte Screenshot beachten!
Das Problem bei Ihrer Definition ist wahrscheinlich, dass der Set Parameter Heater (1) als erstes ausgeführt wird und dann die ganze Kette durchlaufen wird. Der zweite Set Parameter Heater (2) wird erst danach aufgerufen.
Sie können das ändern indem Sie den ersten Set Parameter Heater (1) vom Designer löschen und erneut einfügen. So wird dieser ans Ende der Aktivierungsreihenfolge gesetzt und am Schluss der Set Parameter Heater ausgeführt.
Aktuell gibt es leider keine Möglichkeit das anders zu lösen. Es wird aber an einer Lösung des Problems gearbeitet.
In folgenden Forumsbeitrag finden Sie eine ziemlich genaue Beschreibung zur Aktivierungsreihenfolge der Heater . Verarbeitungsreihenfolge der Heater beeinflussen
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Philip Herbert
- Autor
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 36
1 Jahr 6 Monate her #4855
von Philip Herbert
Philip Herbert antwortete auf Lookup Heater bedingt ausführen
Es wäre schon wirklich gut, wenn man einen Lookup oder SQL Heater bedingt ausführen könnte (notfalls irgendwie per .NET Script).
Gerade bei der Abfrage externen Datenquellen kostet das sonst viel Performance.
Die beschriebene Lösung funktioniert zwar, generiert aber nun für jede gelesene Zeile weitere DB Abfragen.
Danke, Philip Herbert
Gerade bei der Abfrage externen Datenquellen kostet das sonst viel Performance.
Die beschriebene Lösung funktioniert zwar, generiert aber nun für jede gelesene Zeile weitere DB Abfragen.
Danke, Philip Herbert
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
1 Jahr 6 Monate her #4858
von FlowHeater-Team
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
FlowHeater-Team antwortete auf Lookup Heater bedingt ausführen
Hallo Herr Herbert,
hier mal 2 C# Skripte wie das mit dem .NET Script Heater durchgeführt werden kann. Der erste Parameter wird geprüft und nur wenn dieser mit „WAHR“ ausgewertet werden kann wird der Lookup bzw. das SQL abgesetzt.
SQL per Skript Ausführen
Daten Lookup per Skript ausführen
hier mal 2 C# Skripte wie das mit dem .NET Script Heater durchgeführt werden kann. Der erste Parameter wird geprüft und nur wenn dieser mit „WAHR“ ausgewertet werden kann wird der Lookup bzw. das SQL abgesetzt.
SQL per Skript Ausführen
Code:
public object DoWork()
{
bool execute = (bool)InValues[0].GetBool();
int key1 = (int)InValues[1].GetInt();
string key2 = (string)InValues[2].GetString();
// nur ausführen wenn der erste Eingangsparameter "WAHR" ist
if (execute)
{
// SQL zusammenbauen
string sql = String.Format("select value from IhreTabelle where Key1 = {0} and Key2 = '{1}' order by [ID] desc", key1.ToString(), key2);
// 0 = erster Adapter im aktuellen Step auf der Write Seite!
return AdaptersWrite[0].Execute(sql, true);
}
return "keine Ausführung!";
}
Daten Lookup per Skript ausführen
Code:
public object DoWork()
{
bool execute = (bool)InValues[0].GetBool();
int key = (int)InValues[1].GetInt();
// nur ausführen wenn der erste Eingangsparameter "WAHR" ist
if (execute)
{
string where = String.Format("key = {0}", key.ToString());
string orderby = "ID desc";
// 0 = erster Adapter im aktuellen Step auf der Write Seite!
return AdaptersWrite[0].Lookup("Tabelle", "Feldname", where, orderby);
}
return "keine Ausführung!";
}
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Ladezeit der Seite: 0.337 Sekunden