Komplexe If-Then-ElseIf ... Bedingung
In diesem Beispiel geht es vor allem darum den Einsatz des IfThenElse Heater etwas genauer zu erklären sowie eine wesentlich elegantere Möglichkeit aufzuzeigen, wie solch relativ komplexen Gebilde (sind doch insgesamt 9 Heater), über den Einsatz des .Net Script Heaters, durch einen Heater zu ersetzen.
Alle Beispiele sind als fertige Definition Bestandteil des FlowHeaters und können direkt über den Designer geöffnet werden!
Ausgangssituation
Hier sehen wir wie eine Komplexe If-Then-ElseIf Bedingung mit dem If-Then-Else Heater definiert werden kann. Das Beispiel liest auf der Read Seite folgende kleine Textdatei ein
1;DE
2;EN
3;CA
4;was ganz falsches
Das 1. Feld ist lediglich eine fortlaufende ID. Uns interessiert hier nur das 2. Feld. Das Feld soll Länderkennzeichen widerspiegeln. In der Definition sollen dann anhand des Inhaltes die Ländernamen gebildet werden.
Der Weg der Daten über If-Then-Else oder Wenn-Dann-Sonst
Die Beschreibung geht von links nach rechts. Das Feld Länderkennzeichen wir zuerst einmal in den If-Then-Else Heater und eine weiteres mal in den Clone Heater gesteckt. Der Clone Heater wird hier zwingende benötigt, da ein Heater/Feld nicht direkt 2x mit einen anderem Heater Verbunden werden kann! Der If-Then-Else Heater wertet danach die erste eingehende Verbindung als If / Wenn Bedingung aus (siehe Bild rechts) und je nachdem was zutrifft wird entweder der zweite Eingangsparameter Then / Dann (= Bedingung trifft zu, true) oder optional Else / Sonst (= Bedingung trifft nicht zu, false) als Output zurückgeliefert.
Hinweis: Die Eingangsreihenfolge können Sie über das Kontextmenü (rechtsklick auf den Heater) ändern bzw. anzeigen lassen.
Trifft die Bedingung zu, wird der statische Wert aus dem X-Value Heater verwendet, ansonsten der Wert der über den Clone Heater in den If/Then/Else Heater eingeht. Danach geht´s im Prinzip auf dem gleichen Weg zum nächsten If/Then/Else Heater. Der Output der ersten Bedingung ist der Input bzw. die Bedingung des zweiten If/Then/Else Heater. Zusätzlich wird der Output in einen weiteren Clone Heater gesteckt, usw.
Der Weg der Daten über den .NET Script Heater
Lesen Sie auch weiter wenn Sie mit Programmierung nichts am Hut haben! Dieses Beispiel kann auch von nicht Programmierer verstanden und leicht angepasst werden!
Hier sehen Sie den C# Script Code der verwendet wird, den Code können Sie über einen Doppelklick auf den .Net Script Heater einsehen.
Als erstes wird geprüft ob überhaupt Eingangsparameter vorhanden sind, wenn nicht wird ein Fehler über die Anweisung throw new ArgumentException generiert und die FlowHeater Verarbeitung beendet.
Danach wird der erste Eingangsparameter mit der Anweisung string cmp = (string)InValues[0].GetString() der Variable cmp zugewiesen. Dann folgt die switch Anweisung, hier wird der Wert in cmp mit den statischen Werten DE, EN und CA verglichen. Je nachdem welcher Wert zutrifft wird der Wert unter der case "..." Anweisung zurückgegeben.
Als kleines Gimmick wurde zusätzlich ein Else / Sonst (default Anweisung) implementiert. Wenn keines der statischen Bedingungen zutrifft, wird der Wert "nicht vorhanden zurückgeliefert. Alternativ dazu kann dem .NET Script Heater ein zweiter Parameter übergeben werden, der dann anstatt des statischen Wertes "nicht vorhanden" verwendet wird. Probieren Sie es aus, fügen sie der Definition einfach einen weiteren X-Value Heater hinzu und Verbinden Sie den Ausgang mit dem Eingang des .Net Script Heaters.
public object DoWork()
{
if (InValues.Length == 0)
throw new ArgumentException("min. 1 Eingangsparameter erwartet!");
// der cast ist notwendig, da die Funktionen GetString, ...
// den Datentyp Object liefern!
string cmp = (string)InValues[0].GetString();
string ret = String.Empty;
switch (cmp)
{
case "DE":
ret = "Deutschland";
break;
case "EN":
ret = "England";
break;
case "CA":
ret = "Kanada";
break;
default:
// Falls keines der oberen vergleiche greift und dem .Net Script Heater
// ein weiterer Parameter übergeben wurde, dann wird dieser
// zurückgeliefert ansonsten der Text "nicht vorhanden"
if (InValues.Length > 1)
ret = (string)InValues[1].GetString();
else
ret = "nicht vorhanden";
break;
}
return ret;
}