Dynamischer Daten Import / Export

datenbank

weil Einfach - produktiver ist
Mit der Freeware Version können bis zu 10.000 Datensätze verarbeitet werden!
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
Willkommen im FlowHeater Support Forum!

Hier werden Fragen zum Umgang mit dem FlowHeater beantwortet.

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

Ich steh auf'm Schlauch... (Datumsüberprüfung) 5 Jahre 4 Monate her #557

  • Andreas Woll
  • Andreas Wolls Avatar
  • Offline
  • New Member
  • Beiträge: 3
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
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Ich steh auf'm Schlauch... (Datumsüberprüfung) 5 Jahre 4 Monate her #558

  • Andreas Woll
  • Andreas Wolls Avatar
  • Offline
  • New Member
  • Beiträge: 3
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.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Ich steh auf'm Schlauch... (Datumsüberprüfung) 5 Jahre 4 Monate her #561

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
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.
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.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Ich steh auf'm Schlauch... (Datumsüberprüfung) 5 Jahre 4 Monate her #562

  • Andreas Woll
  • Andreas Wolls Avatar
  • Offline
  • New Member
  • Beiträge: 3
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
Anhang:
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Ich steh auf'm Schlauch... (Datumsüberprüfung) 5 Jahre 4 Monate her #564

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
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.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Ich steh auf'm Schlauch... (Datumsüberprüfung) 5 Jahre 3 Monate her #632

  • Cirrus-EDV
  • Cirrus-EDVs Avatar
  • Offline
  • New Member
  • Beiträge: 3
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
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Ich steh auf'm Schlauch... (Datumsüberprüfung) 5 Jahre 3 Monate her #633

  • Cirrus-EDV
  • Cirrus-EDVs Avatar
  • Offline
  • New Member
  • Beiträge: 3
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?
// 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:
//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.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Ich steh auf'm Schlauch... (Datumsüberprüfung) 5 Jahre 3 Monate her #634

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
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 nicht gefunden

Anhang:
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.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Ich steh auf'm Schlauch... (Datumsüberprüfung) 4 Jahre 5 Monate her #978

  • Marko
  • Markos Avatar
  • Offline
  • Senior Member
  • Beiträge: 70
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
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Ich steh auf'm Schlauch... (Datumsüberprüfung) 4 Jahre 5 Monate her #981

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
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 nicht gefunden

Anhang:
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.
Der Administrator hat öffentliche Schreibrechte deaktiviert.
Moderatoren: FlowHeater-Team
Ladezeit der Seite: 0.100 Sekunden