FlowHeater Logo

FlowHeater Support Forum

weil Einfach - produktiver ist

Freeware Version herunterladen (10 MB)

Mit der Freeware Version können bis zu 100.000 Datensätze verarbeitet werden!

Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
  • Seite:
  • 1

THEMA: IF Heater mit zwei oder mehreren IF Parametern

IF Heater mit zwei oder mehreren IF Parametern 3 Jahre 1 Monat her #2421

Hallo Zusammen,

ich möchte des Ergebnis des IfThenElse-Heaters von zwei Eingangsparametern abhängig machen und komme auf keine Lösung, Beispiel:

Wenn A=0 und B=J, dann X
Wenn A=0 und B=N, dann Y
Wenn A<>0 und B=J, dann Z

Weiß jemand, wie man das abbilden kann?
Kai

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

IF Heater mit zwei oder mehreren IF Parametern 3 Jahre 1 Monat her #2422

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Beiträge: 1316
Hallo Kai,

das geht derzeit nur über hintereinander verschachtelte IF-THEN-ELSE Bedingungen .

Die erste Bedingung prüft den Wert A=0 und gibt nur im Erfolgsfall den zweiten zu prüfenden Wert weiter (kein Else Parameter). Die zweite Bedingung braucht dann lediglich auf den gewünschten Wert des zweiten Wertes prüfen und gibt wiederum im Erfolgsfall (Bedingung trifft zu) den zu übernehmenden Wert weiter.

Um jetzt ggf. mehrere solcher Konstrukte einem Feld auf der WRITE zuweisen zu können benötigen Sie am Ende der Kette noch einen String Append Heater , der alle Eingangsparameter aufnimmt und nur gefüllte Werte (Option „Leere Felder ignorieren) an das gewünschte Feld weiterleitet.
Achtung: Der String Append Heater formatiert Werte automatisch als Zeichenfolge anhand der im ersten WRITE Adapter hinterlegten Standardformatierung .

Im Anhang finden Sie ein kleines Beispiel dazu.

Bei komplizierteren Bedingungen könnten solche Konstrukte auch über einen .NET Script Heater abgebildet werden, hier ein weiteres Bespiel: Komplexe If-Then-ElseIf ... Bedingung

Dateianhang:

Dateiname: if-then-el...gung.zip
Dateigröße:2 KB

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.
Anhänge:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

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.

IF Heater mit zwei oder mehreren IF Parametern 3 Jahre 1 Monat her #2463

Die Lösung ist etwas komplex und im Anhang im PDF dokumentiert. Es geht u.a. darum, den Wechsel der Belegnummer bei einer zeilenweisen Verarbeitung von Buchungssätzen zu erkennen und daraus den Ausgangsparameter abzuleiten.





Aus den zwei Eingangsparametern Belegnummer und Haben ist einer der 3 Ausgangsparamter SAB, BUC oder DIV abzuleiten, und zwar wie folgt:
- wenn Haben gleich 0 dann DIV
- wenn Haben <>0 und die Belegnummer = der Belegnummer in der daüberliegenden Zeile mit Haben = 0, dann SAB
- ansonsten BUC, d.h. Haben <>0 und Belegnummer geändert.
dazu sind mehrere IF-Heater notwendig, von links beschrieben:
1. Das erste IF selektiert, ob Haben=0, wenn ja, dann wir die Variable VBelegNr. gesetzt, wenn nein, dann passiert nichts (Die Variable ist notwendig, weil die Belegnummer sonst nicht gespeichert werden kann)
2. Das zweite IF prüft auf Haben <>0, wenn ja, dann wird die Belegnummer weitergereicht.
3. Das dritte IF prüft, ob die Belegnummer = VBelegNr. wenn ja, wird SAB gesetzt, wenn nein, dann BUC
4. Das vierte IF prüft wieder das Haben auf 0, wenn ja wird DIV gesetzt, ansonsten einer der beiden Werte aus dem dritten IF

Das war es und hat mir einiges Kopfzerbrechen bereitet.


Dateianhang:

Dateiname: loesung-me...eter.pdf
Dateigröße:108 KB
Anhänge:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Letzte Änderung: von FlowHeater-Team.

IF Heater mit zwei oder mehreren IF Parametern 3 Monate 2 Wochen her #3520

Hallo,

ich habe diesbezüglich noch ein kleines Problem.

Ich benutze den XML Adapter als READ und den TextFileAdapter als WRITE.

In der XML sind nun Preise dargestellt. Ich möchte nur die aktuell gültigen Preise an die Write Seite abgeben. In der XML sind sowohl aktuell gültige, als auch ablaufende Preise
enthalten.

1) Der NET_LIST mit Gültigkeit bis zum 31.12.9999 soll als EKPreis übernommen werden

Bedingungen: Wenn PRICE_TYPE = net_list UND VALID_END_DATE = 99991231 dann gib PRICE_AMOUNT an EKPreis weiter.

Dies funktioniert mit der Beispiel-XML bei den Artikeln 1199044 & 1199045 auch. Bei dem Artikel 1199043 jedoch nicht.

2) Der NET_LIST_CALC gültig bis zum 31.12.9999 soll als StandardVKPreis übernommen werden

Bedingungen: Wenn PRICE_TYPE = net_list_calc UND VALID_END_DATE = 99991231 dann gib PRICE_AMOUNT an StandardVKPreis weiter.

Dies funktioniert derzeit bei keinem der Artikel. Lediglich bei dem Artikel 1199043 ist eine weiterer Preis angegeben, der bei VALID_END_DATE nicht 99991231 stehen hat. Diese Preise sollen auch unberücksichtigt bleiben.

Weiß jemand Rat?

Dateien siehe Anlage. (Layer Preise)
Anhänge:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

IF Heater mit zwei oder mehreren IF Parametern 3 Monate 1 Woche her #3521

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Beiträge: 1316
Hallo Herr Seiffert,

Um Bedingungen mit dem IF-THEN-ELSE Heater mit zwei Eingangsparameter vergleichen zu können müssen Sie einen kleinen Workaround anwenden.

Am einfachsten geht es wenn Sie die zwei Parameter vorher über einen String Append Heater vorher miteinander kopieren und dann in der Bedingung den kombinierten Wert vergleichen.

z.B. =99991231#net_list (hier wurde zusätzlich im String Append Heater das Zeichen # als Trennzeichen verwendet.

So geht es eigentlich relativ einfach. Im Anhang habe ich Ihnen ein kleines Beispiel basierend auf Ihre beigefügte XML Datei erstellt.

Allerdings gibt es hier ein kleines Problem. Sie wissen nicht wie viele Produktpreis Knoten in der XML Datei vorhanden sind. Im Beispiel habe ich jetzt mal die 6 Produktpreis verglichen die im ersten Artikel vorhanden sind. Würden jetzt 7 Preise zu einem Artikel geliefert würde der 7. (Preis)knoten nicht in die Verarbeitung mit einfließen, da der FlowHeater momentan XML Unterknoten nicht dynamisch lesen kann! Das sind derzeit leider die Grenzen bei der FlowHeater XML Verarbeitung auf der READ Seite.

Dateianhang:

Dateiname: xml-read.zip
Dateigröße:39 KB

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.
Anhänge:
Folgende Benutzer bedankten sich: Andre Seiffert

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

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.

IF Heater mit zwei oder mehreren IF Parametern 3 Monate 1 Woche her #3522

Hallo Herr Stark,

das bringt mich auf jeden Fall schon mal weiter. Ich hatte in meiner Schilderung leider noch einen kleinen Fehler eingebaut.

Es gibt 2 Varianten je Price_type net_list & net_list_calc:

Entweder gibt es einen Preis mit der Gültigkeit 99991231 oder zusätzlich zu diesem noch einen Preis der hinsichtlich der Gültigkeit kleiner als 99991231 ist. In meiner Urspungs-xml auf der Read Serite hatte als Grundlage eine falsche XML gewählt in der die Basis eine ganz andere war und zu viele Preisfelder enthalten waren.

Sollte es also nur einen Preis geben gültig bis 99991231 dann soll dieser ausgegeben werden. Sollte es jedoch zusätzlich einen Preis geben der kleiner als 99991231 ist, und größer oder gleich dem aktuellen Tagesdatum ist so soll dieser ausgegeben werden. Ich glaube hier müsste der NOW-Heater noch mit einbezogen werden?
Somit ist dann sichergestellt, dass immer der derzeit gültige Preis ausgegeben wird.

Ich hoffe, ich habe mich verständlich ausgedrückt :unsure:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

IF Heater mit zwei oder mehreren IF Parametern 3 Monate 1 Woche her #3523

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Beiträge: 1316
Hallo Herr Seiffert,

dann geht das (fast) nur mit Hilfe des .NET Script Heater und einem kleinen C# Skript. Rein mit Heatern/Funktionen wird es leider schwierig bzw. bei der komplexen XML Struktur unmöglich.

Ich habe die Beispiel Definition etwas angepasst. Es wurden zwei weitere Layer eingefügt auf denen jeweils nur ein .NET Script Heater vorhanden ist. Der Heater benötigt von allen XML Preisknoten jeweils die Felder Valid_End_Date, price_type und PRICE_AMOUNT genau in der Reihenfolge.

Achtung: Die Reihenfolge ist wichtig sonst funktioniert das Skript nicht!

Das Skript kann für beide Preis Typen angewendet werden, es muss lediglich im Skript (siehe Kommentar) die zweite Zeile angepasst, je nachdem welcher Typ verglichen werden soll.
Das Skript geht über alle XML Preisknoten und prüft jetzt die zwei gewünschten Bedingungen, siehe Kommentare im Skript und gibt dann den richtigen gültigen Preis zurück.

.Net C# Skript
// nur hier Anpassungen vornehmen! "net_list_calc" oder "net_list"
string PriceType_Compare = "net_list";


// ab hier keine Änderungen mehr
public object DoWork()
{
	string sRetPrice = null;

	if (InValues.Length < 3)
		throw new Exception("min. 3 Eingangsparameter erwartet! (Valid_End_Date, price_type, PRICE_AMOUNT)");

	if ((InValues.Length % 3) != 0)
		throw new Exception(String.Format("Eingangsparameter {3} ist nicht durch 3 teilbar!"));

	// jeweils in 3er Blöcken lesen
	for (int i = 0; i < InValues.Length; i = i + 3)
	{
		// 1. Eingangsparameter Valid_End_Date
		string sValidEndDate = (string)InValues[i].GetString();
		
		// 2. Eingangsparemeter price_type
		string sPriceType = (string)InValues[i + 1].GetString();

		// 3. Eingangsparameter PRICE_AMOUNT
		string sPriceAmount = (string)InValues[i + 2].GetString();

		// Falls in einem Knoten keine Werte vorhanden sind
		if (sValidEndDate == null || sPriceType == null || sPriceAmount == null)
			continue;

		// Wenn PriceType gleich wie oben eingestellt und ValidEndDate gleich 99991231 und noch kein Preis zugewiesen!
		if (sPriceType == PriceType_Compare && sValidEndDate == "99991231" && sRetPrice == null)
			sRetPrice = sPriceAmount;

		// Wenn PriceType gleich wie oben eingestellt und ValidEndDate nicht 99991231 und größer/gleich aktuellem Datum
		if (sPriceType == PriceType_Compare && sValidEndDate != "99991231" && sValidEndDate.CompareTo(DateTime.Now.ToString("yyyyMMdd")) >= 0)
			sRetPrice = sPriceAmount;
	}

	return sRetPrice;	
}

Dateianhang:

Dateiname: xml-read-p...ript.zip
Dateigröße:29 KB

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.
Anhänge:
Folgende Benutzer bedankten sich: Andre Seiffert

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

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.
  • Seite:
  • 1
Ladezeit der Seite: 0.147 Sekunden