[Gelöst] Variant und DATETIME CC

20. Januar 2016 14:43

Hallo,
gibt es eine Möglichkeit, eine Variable vom Typ Variant darauf zu prüfen, ob ihr Inhalt vom Typ DATETIME ist? Es gibt ja die Möglichkeit, per Variantname.ISDATE zu prüfen, ob der Inhalt vom Typ Datum ist. Direkt sicherlich nicht, aber gibt es eventuell einen Workaround?

Mit freundlichen Grüßen
Zuletzt geändert von FragenFrager am 21. Januar 2016 17:12, insgesamt 3-mal geändert.

Re: Variant und DATETIME CC

20. Januar 2016 15:01

Variant unterstützt kein DateTime direkt.
Du kannst eine DateTime-Variable einem Variant ohne Fehler zuweisen, aber ISDATE und ISTIME geben beide false zurück.

Workarounds, die mir dazu einfallen:
  1. FORMAT(Variant) auswerten - entspricht es dem Aufbau nach einer DateTime-Variable?
  2. Mittels einer IF EineNeueCodeunit.RUN ... testen, ob du den Inhalt der Variante einer DateTime-Variable zuweisen kannst. Denn:
    Code:
    // Wenn Variant vom Typ DateTime ist, dann
    DateTimeVar := Variant; // geht
    DateVar := Variant; // geht nicht
    TimeVar := Variant; // geht nicht
Siehe auch Onlinehilfe: Variant Data Type

Re: Variant und DATETIME CC

20. Januar 2016 17:04

Hallo Natalie,
die Idee mit der Codeunit gefällt mir sehr gut, aber wenn ich es richtig sehe, kann ich das falsche DATETIME-Format nur im OnRun-Trigger der Codeunit abfangen? Ich habe das ganze mit Funktionen mit booleschen Rückgabewerten innerhalb einer Codeunit versucht, die ich von einem Testreport aus aufgerufen habe. Leider gab es hier beim Zuweisungsversuch einen Abbruch. Den würde es nicht geben, wenn ich mit IF Codeunit.RUN arbeite, richtig? Leider komme ich so nicht weiter, ich müsste das zu prüfende Feld als Parameter an die Codeunit übergeben. Ich habe auch schon überlegt, die zu prüfenden Felder in eine temporäre Tabelle zur übertragen, geht leider auch nicht, weil der Typ Variant nicht als Tabellenfeld zulässig ist.
Bleibt die Version mit dem Format, da fällt mir nur ein, den Wert der Variant-Variablen in eine Textvariable zu übertragen und dort die Positionen der Punkte für Tag, Monat, Jahr und des Doppelpunktes für die Zeitangabe zu ermitteln, oder gibt es da eine bessere Lösung?

Danke und viele Grüße
Frank

Re: Variant und DATETIME CC

20. Januar 2016 17:20

FragenFrager hat geschrieben:aber wenn ich es richtig sehe, kann ich das falsche DATETIME-Format nur im OnRun-Trigger der Codeunit abfangen?
Genau. Du kannst aber noch mehr Prüfungen in den OnRun-Trigger einbauen. Hierfür eine globale Optionsvariable schaffen (o.ä.) und diese im OnRun abfragen; eine globale Funktion schreiben, welche die Variable setzt, und diese Funktion vor dem IF Codeunit.RUN aufrufen.

Leider gab es hier beim Zuweisungsversuch einen Abbruch. Den würde es nicht geben, wenn ich mit IF Codeunit.RUN arbeite, richtig?
Genau so und nicht anders.

Re: Variant und DATETIME CC

21. Januar 2016 17:10

Hallo Natalie,
super, hat geklappt :-) .
Ich hatte erst Bedenken, dass beim Codeunit.RUN eine andere Instanz der Codeunit aufgerufen wird, in der die globale Variable nicht gesetzt ist, aber das ist nicht der Fall.

Besten Dank.