Zum Inhalt springen

Plausibilitätsprüfung eines Datumseintrages in der smap


Torsten Szpöth

Empfohlene Beiträge

Hallo,

hat jemand eventuell schon eine Lösung wie man ein Datum in der smap auf Plausibiliät/Gültigkeit prüfen kann?

Beim Benutzen von smapone auf einem Mobilgerät kommt es vor, daß man bei der Eingabe des Datums, durch "Rollen", in einem nächsten oder vergangenem Jahr landet. 

Ich möchte gern, das ein Datumseintrag nicht in der Zukunft und nur eine bestimmte Anzahl von Tagen in der Vergangenheit liegen darf.

Dazu soll eine Meldung erscheinen. Ich habe dazu schon selbst eine Lösung (Anlage) bei der ich aber mit dem Zeitstempelbaustein arbeite und mit dem Datumseintrag verrgleiche und berechne.

Geht das auch mit Bezug auf eine Systemzeit oder einer anderen Lösung in der ich die Abweichung vom eingetragenen Datum berechnen kann? 
 

image.png

Bearbeitet von Torsten Szpöth
  • Like 2
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @Torsten Szpöth, leider sind die Möglichkeiten, mit Datumswerten zu rechnen, in der aktuellen Version von smapOne noch – ich möchte hier mal euphemisieren – ausbaufähig. Es ist durchaus denkbar, mit einer seeeeeeeehr langen/komplexen Formel so etwas wie von dir gewünscht zusammenzubauen.

In einem anderen Beitrag erklärt @Moritz Münzenmaier, wie man von einem vom User ausgewählten Datum zu einem Datum kommt, das exakt vier Jahr in der Zukunft liegt:

Wenn man dieses Beispiel ein wenig anpasst, kann man aus dem vom User ausgewählten Datum alle Werte auch als Zahlen extrahieren:

image.png.c93ea8de473ca52a70e135bb968f7bfa.png

Die Formeln dafür lauten

Day

IF(EQUALS(LEFT(TEXT({DateTime}), 2), "01"), 01, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "02"), 02, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "03"), 03, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "04"), 04, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "05"), 05, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "06"), 06, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "07"), 07, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "08"), 08, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "09"), 09, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "10"), 10, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "11"), 11, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "12"), 12, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "13"), 13, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "14"), 14, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "15"), 15, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "16"), 16, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "17"), 17, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "18"), 18, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "19"), 19, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "20"), 20, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "21"), 21, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "22"), 22, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "23"), 23, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "24"), 24, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "25"), 25, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "26"), 26, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "27"), 27, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "28"), 28, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "29"), 29, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "30"), 30, IF(EQUALS(LEFT(TEXT({DateTime}), 2), "31"), 31)))))))))))))))))))))))))))))))

Month

IF(EQUALS(RIGHT(LEFT(TEXT({DateTime}), 5), 2), "01"), 01, IF(EQUALS(RIGHT(LEFT(TEXT({DateTime}), 5), 2), "02"), 02, IF(EQUALS(RIGHT(LEFT(TEXT({DateTime}), 5), 2), "03"), 03, IF(EQUALS(RIGHT(LEFT(TEXT({DateTime}), 5), 2), "04"), 04, IF(EQUALS(RIGHT(LEFT(TEXT({DateTime}), 5), 2), "05"), 05, IF(EQUALS(RIGHT(LEFT(TEXT({DateTime}), 5), 2), "06"), 06, IF(EQUALS(RIGHT(LEFT(TEXT({DateTime}), 5), 2), "07"), 07, IF(EQUALS(RIGHT(LEFT(TEXT({DateTime}), 5), 2), "08"), 08, IF(EQUALS(RIGHT(LEFT(TEXT({DateTime}), 5), 2), "09"), 09, IF(EQUALS(RIGHT(LEFT(TEXT({DateTime}), 5), 2), "10"), 10, IF(EQUALS(RIGHT(LEFT(TEXT({DateTime}), 5), 2), "11"), 11, IF(EQUALS(RIGHT(LEFT(TEXT({DateTime}), 5), 2), "12"), 12))))))))))))

Year (für 2020 bis 2050)

IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2020"), 2020, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2021"), 2021, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2022"), 2022, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2023"), 2023, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2024"), 2024, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2025"), 2025, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2026"), 2026, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2027"), 2027, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2028"), 2028, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2029"), 2029, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2030"), 2030, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2031"), 2031, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2032"), 2032, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2033"), 2033, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2034"), 2034, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2035"), 2035, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2036"), 2036, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2037"), 2037, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2038"), 2038, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2039"), 2039, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2040"), 2040, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2041"), 2041, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2042"), 2042, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2043"), 2043, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2044"), 2044, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2045"), 2045, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2046"), 2046, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2047"), 2047, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2048"), 2048, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2049"), 2049, IF(EQUALS(RIGHT(TEXT({DateTime}), 4), "2050"), 2050)))))))))))))))))))))))))))))))

(@Mr Smap, vielleicht hast du ja wieder einfachere, leckerere Formeln? 😉)

Das bringt uns aber erstmal nur bedingt weiter: Zwar haben wir nun alle Datumswerte als Zahlen und können damit rechnen. Nun müssten halt die Algorithmen zum Rechnen von Datumswerten in smap-Formeln implementiert werden. Das ist stets eine komplexe logische Verkettung von AND()-Formeln, bei denen geprüft wird, ob Jahr, Monat und Tag in der Vergangenheit oder Zukunft liegen und wenn ja wie weit...

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Achso @Torsten Szpöth, ergänzend: ich brauche nun zum Vergleichen (mit dem aktuellen Zeitpunkt) auch immer das aktuelle Datum. Das liegt in einem smap-Entwurf leider noch nicht vor (bzw. ich kann in der smap nicht darauf zugreifen). Nach Absenden des Datensatzes (oder auch wenn ich den Datensatz als Aufgabe weiterleite), habe ich einige Datumswerte vorliegen (clientCreatedDate, sendDate, receivedDate, completedDate), so dass ich hier Berechnungen/Vergleiche anführen kann. In der smap liegen die Werte aber noch nicht vor oder sind nicht aufrufbar.

In sofern liegst du mit deiner Variante schon richtig, hier einen manuellen Zeitstempelbaustein einzuführen, um die wirst du sowieso nicht umhinkommen. Und dann kannst du auch mit den "einfachen" Formeln von smapOne zur Berechnung der Differenz verwenden. Diese kannst du dann darauf testen, ob das Datum in der Zukunft liegt oder wenn in der Vergangenheit, wie lange.

Und genau das hast du ja bereits erfolgreich umgesetzt. In sofern sehe ich da für den aktuellen Zeitpunkt keine wesentliche Verbesserungsmöglichkeit... 😞 

  • Like 3
Link zu diesem Kommentar
Auf anderen Seiten teilen

Bitte melde Dich an, um einen Kommentar zu hinterlassen

Du kannst nach der Anmeldung einen Kommentar hinterlassen



Jetzt anmelden
×
×
  • Neu erstellen...