Skip to main content
Weil einfach - produktiver ist

Der Daten Spezialist

Konvertieren Sie die Daten mühelos zwischen verschiedenen Formaten ohne Programmierkenntnisse dank Visual Designer. Effizient und super einfach.
Flowheater Download

Ich steh auf'm Schlauch... (Datumsüberprüfung)

Mehr
12 Jahre 8 Monate her #557 von Andreas Woll
Ich steh auf'm Schlauch... (Datumsüberprüfung) wurde erstellt von Andreas Woll
Hallo zusammen,

ich hab das Problem, dass meine Filterdefinition das Ergebnis dynamisch auf den Zeitraum gestern bis heute jeweils einengen soll.

Da ich mit VB und C# nicht vertraut bin, kann ich den Script-Heater nicht verwenden.

Ich wollte es über ifthenelse-Heater lösen, aber da scheint das Problem vorzuliegen, dass das zu prüfende Datum zwar dynamisch übergeben werden kann, aber der Prüfwert fest im Heater hinterlegt werden muss.

Hat da jemand eine Alternative oder weiß, was ich falsch mache?

Die Aufgabe:
Wert eines Datumsfeldes soll im Rahmen größer gleich "gestern und nicht größer "heute" sein. Das müsste ich mit zwei ifthenelse-heatern eigentlich lösen lassen.

Danke im Voraus.

Andreas Woll

Bitte Anmelden um der Konversation beizutreten.

Mehr
12 Jahre 8 Monate her #558 von Andreas Woll
Ich glaube es hinbekommen zu haben, aber vielleicht guckt ja ein C#-Profi mal drüber und findet noch was

Hier der Code des 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!
DateTime dbdate = Convert.ToDateTime((string)InValues[0].GetString());
DateTime gestern = Convert.ToDateTime((string)InValues[1].GetString());
//DateTime heute = Convert.ToDateTime((string)InValues[2].GetString());
string ret = String.Empty;

//Vergleich dbate mit gestern
//<0: dbdate liegt vor gestern
//=0; dbdate ist gleich gestern
//>0; dbdate liegt nach gestern
int result1 = DateTime.Compare(dbdate, gestern);

if (result1 == 0)
ret = "0";
else
ret = "1";
return ret;
}


Ich musste nachträglich nur auf Datensätze prüfen die zum relativen "gestern" aktuell waren und das Ergebnis ist soweit ok.

Bitte Anmelden um der Konversation beizutreten.

Mehr
12 Jahre 8 Monate her #561 von FlowHeater-Team
Hallo Herr Woll,

der IF-THEN-ELSE Heater kann z.Zt. als Bedingung nur einen bzw. mehrere statische Werte verarbeiten. Ihr Ansatz mit dem Skript ist schon richtig. Hier ein Skript so wie ich es lösen würde.

Sie benötigen hierfür nur noch einen Eingangsparameter = das Datenbankfeld mit dem Datum. Das Skript errechnet automatisch den gestrigen Tag und vergleicht das mit dem Datum des übergebenen Feldes. Ist das Datum gleich mit dem gestrigen Datum, findet eine Verarbeitung statt ansonsten nicht. Den Ausgang des .NET Script Heater müssen Sie mit dem Filter Heater verbinden.
Code:
public object DoWork() { if (InValues.Length == 0) throw new ArgumentException("min. 1 Eingangsparameter erwartet!"); // GetDateTime() hat den Vorteil, dass die Formatangaben // des Adapters berücksichtigt werden! object o = InValues[0].GetDateTime(); if (o == null) return true; // = Datensatz filtern DateTime dbdate = (DateTime)o; // Vom aktuellen Tag einen Tag (-1) abziehen = gestern! DateTime gestern = DateTime.Today.AddDays(-1); // nur Datumsangaben von gestern berücksichtigen if (dbdate.Date.CompareTo(gestern.Date) == 0) return false; // = nicht filtern, diese Datensatz bearbeiten // true = Datensatz filtern return true; }

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 um der Konversation beizutreten.

Mehr
12 Jahre 8 Monate her #562 von Andreas Woll
Hallo Herr Stark,

vielen Dank für Ihre Antwort.
Ihre Lösung ist auf jeden Fall um ein vielfaches eleganter als meine (auch wenn sie funktioniert).

Den "gestern"-Wert hab ich mir aus verschiedenen Heatern und Funktionen von Flowheater zusammengebaut (Bild). War selbst überrascht...

Ihr Programm ist auf jeden Fall eine super Alternative. Ich freue mich drauf gestoßen zu sein.

Noch eine Frage:
Ist es möglich die FHBatch vom Designer zu trennen?
Ich möchte einen Rechner mit dem FHBatch-Automat betreiben, aber über meine Workstation die Definitionen bauen. Geht das und ist das lizenzrechtlich Ihrerseits ok?


Noch eine Anregung:
Die Aufteilung nach Layern ist eine feine Sache und erleichtert das Splitten in verschiedene Funktionsblöcke der Definition (bei mir waren es Datenabruf+Formatierung, Datenfilterung und zu berechnende Felder). Was noch fehlt, ist eine verbesserte Layoutmöglichkeit des einzelnen Layers. Sie glauben ja garnicht was mich ungerade Linien stören. :)

Es wäre schön, wenn mehrere zusammenhängende Heater (also durch Pipes verbundene) sich getrennt von anderen auf dem selben Layer verschieben lassen.

viele Grüße

Andreas Woll
Anhänge:

Bitte Anmelden um der Konversation beizutreten.

Mehr
12 Jahre 8 Monate her #564 von FlowHeater-Team
Hallo Herr Woll,

Ist es möglich die FHBatch vom Designer zu trennen?
Ich möchte einen Rechner mit dem FHBatch-Automat betreiben, aber über meine Workstation die Definitionen bauen. Geht das und ist das lizenzrechtlich Ihrerseits ok?

Sie benötigen für jede Installation eine eigene Lizenz! Ausnahme davon ist lediglich die Freeware Version.

Anregungen: Vielen Dank für die Anregungen, ich habe die Punkte mit auf die Liste der möglichen Erweiterungen gestellt. Bis das mit den geraden Linien umgesetzt ist wird es aber noch etwas dauern :)

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 um der Konversation beizutreten.

Mehr
12 Jahre 7 Monate her #632 von Cirrus-EDV
Hallo Herr Stark,

ich habe mal Ihren Code ausprobiert und das Problem, dass Flowheater nun alle Daten filtert.

Der Script-Heater bekommt den Datumswert über einen Formatheater als Date-Typ eingespielt. Aber ein Vergleich dieses Wertes zu dem aus der von Ihnen verwendeten Funktion resultierenden scheint nicht möglich, oder führt zumindest ins leere, obwohl der Code fehlerfrei kompiliert werden kann.

Wenn ich einen Vergleich mache, indem ich eine X-Variable mit einem Eintrag wie 21.08.2011 fülle, klappt es. Kann es sein, dass der Script-Heater einer anderen Locale folgt?

Übrigens wäre es in diesem Hinblick schön, wenn Flowheater bereits im Diagramm Debugtests ermöglichen würde, so dass man sehen kann, was rein und rausgeht.

Herzliche Grüße
Andreas Woll

Bitte Anmelden um der Konversation beizutreten.

Mehr
12 Jahre 7 Monate her #633 von Cirrus-EDV
Ich hab einen möglichen Fehler gefunden.
Wenn ich die Berechnung des gestrigen Tages in einen separaten Scriptheater baue und die Variable als Rückgabewert definiere, so kommt immer nur das Datum von Heute raus. Den zurückgegebenen Wert lasse ich einfach in eine Zusatzspalte ausgeben. Zusätzlich muss ich ihn durch einen Formatheater schicken, der den DateTime-Typ in einen Datetyp korrigiert. Dann sollte der Vergleich auch funktionieren, aber warum die AddDays(-1) nicht funktioniert verstehe ich nicht.

Können Sie mir einen Tipp geben?
Code:
// Diese Funktion ist zwingend erforderlich! public object DoWork() { //Dieser Beispielcode aggiert wie der Clone Heater //nur mit dem Unterschied, dass mehr als ein Parameter übergeben werden kann //und davon der letzte Parameter zurückgegeben wird :-) //weitere Infos bzw. Beispiele finden Sie in der (F1) Hilfe int count = InValues.Length; if (count > 0) return InValues[count - 1].GetValue(); throw new ArgumentException("min. 1 Eingangsparameter erwartet!"); DateTime yesterday = DateTime.Today.AddDays(-1); return yesterday; }


Update:
Code:
//int count = InValues.Length; //if (count > 0) // return InValues[count - 1].GetValue(); //throw new ArgumentException("min. 1 Eingangsparameter erwartet!");

Ich hab obige Zeilen des Codes auskommentiert und schon scheint es zu funktionieren.

Bitte Anmelden um der Konversation beizutreten.

Mehr
12 Jahre 7 Monate her #634 von FlowHeater-Team
Hallo Herr Woll,

Der .NET Script Heater bietet die gleichen Umwandlungen wie der Gesamte FlowHeater. Je nachdem wo das Feld herkommt werden unterschiedliche Formatierungen verwendet.

Kommt der Wert von einem Feld der READ Seite und wurde darauf noch keine Umwandlung durchgeführt, kommt die Formatierung des Adapters der READ Seite zum Zuge.
Es werden hier nur Formatierungen vom Datentyp String in irgendeinen anderen Datentyp vorgenommen. Z.B. Sie haben eine Textdatei mit Datumformat mm/dd/yyyy dann stellt dieser Mechanismus sicher, dass mit einem GetDateTime dieser Wert auch umgewandelt werden kann.

In allen anderen Fällen zieht die Formatierung des Adapters der WRITE Seite.
z.B. Datentyp -> String oder String- > Irgendeinen Datentyp falls der erste Fall nicht zutrifft!

Mit dem Format Heater ist es ein wenig anderes. Der nimmt Initial die Formatierungen der WRITE Seite an. Diese Formatierung können Sie aber dann beliebig abändern, die ursprüngliche WRITE Adapterformatierung bleibt erhalten.

Wenn Sie z.B.im Formatheater für Datum mm/dd/yyyy eingestellt haben und im WRITE Adapter dd.mm.yyyy dann kann der .NET Script Heater das Datum nicht mehr erkennen. Der .NET Script Heater kann lediglich letzteres über die Formateinstellungen des WRITE Adapters umwandeln und erkennen. Ich habe Ihnen dazu ein kleines Beispiel erstellt, Siehe Anhang.

Anhang datumsformat.zip wurde nicht gefunden.


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 um der Konversation beizutreten.

Mehr
11 Jahre 10 Monate her #978 von Marko
Hallo Herr Stark

Wie müsste das .NET Script aussehen, damit ein Zeitfenster (Rückschau) von 8 Tagen gefiltert werden kann. Untergrenze: Heute -8 Tage
Obergrenze: Heute

Gruß
Klima

Bitte Anmelden um der Konversation beizutreten.

Mehr
11 Jahre 10 Monate her #981 von FlowHeater-Team
Dazu ist kein Script mehr notwendig. Sie können eine Datum Von/Bis Filterbedingung über 2 Parameter , einer IF-THEN-ELSE Bedingung und dem Filter Heater erledigen.

Die 2 Parameter (z.B. $DatumVon$ und $DatumBis$) müssen dabei mit dem gewünschten Zeitfenster gefüllte werden. Hierzu wird einmal der Parameter $DatumBis$ mit dem aktuellen Datum belegt und der Parameter $DatumVon$ mit aktuelles Datum -8 belegt.
Diese Parameter werden dann als Filter Bedingung im IF-THEN-ELSE Heater für den Filter Heater verwendet.

Im Anhang dazu befindet sich ein kleines Beispiel.

Anhang zeitfenster_filter.zip wurde nicht gefunden.


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 um der Konversation beizutreten.

Ladezeit der Seite: 0.374 Sekunden

FlowHeater - Der Daten Spezialist

Effiziente Datenintegration und Transformation mit FlowHeater - Ihre Lösung für nahtlosen Datentransfer.

Rechtliches

Support & Kontakt

Kontaktinformation

Telefon:
0951 / 99339792

E-Mail:
Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.


Copyright © 2009-2024 by FlowHeater GmbH. Alle Rechte vorbehalten.