Kalender: Dauer des Kalendereintrags mittels Start- und Enddatum berechnen
Hallo, ich bin noch recht neu bei Ninox und gerade dabei, eine Art Event-Verwaltung umzusetzen.
Folgende Frage bezüglich Kalendereinträgen:
Im Kalender sollen alle Events, die wir haben, eingetragen werden. Das funktionioert über das Feld "Datum" auch gut. Wir benötigen keine Zeitangabe von bis.
Selten aber regelmäßig dauern Events jedoch länger als einen Tag. Und das soll natürlich auch so im Kalender eingetragen werden. Ich könnte jetzt über ein Terminfeld gehen, finde es aber sehr umständlich, hier auch immer eine Uhrzeit eintragen zu müssen.
Ich wünsche mir also entweder, dass ich das Feld "Termin" so konfigurieren kann, dass ich dort lediglich ein Datum und keine Uhrzeit eintragen kann/muss.
Oder, noch besser, 2 Datumsfelder. Das erste ist das Startdatum (und zumeist auch das Enddatum). Das zweite Feld wird dann nur eingeblendet, wenn man ankreuzt, dass das Event mehrere Tage geht und man trägt dort das Enddatum ein. Der Kalendereintrag in seiner Länge wird dann anhand dieser beiden Felder eingetragen.
Ist das möglich? Vielen Dank für eure Hilfe!
11 Antworten
-
Hy Sebastian
ja das geht:
appointment(Terminstart, Terminende)
TERMINFELD := appointment(DATUMSFELD 1,time(0,0),DATUMSFELD 2, time(23,59))
Jetzt könntest du noch das Datumsfeld 2 nach Änderung von Datumsfeld 1 befüllen mit:
DATUMSFELD 2 := DATUMSFELD 1
Das bei "nach Änderung" im Datumsfeld 1 hinterlegen.
grüße Micha
-
Hi Micha,
dankeschön.
Wenn ich das bei Datum 1 bei "nach Änderung" eintrage, bekomm ich die Fehlermeldung
"Die Funktion ist nicht definiert: appointment...)"
-
Hallo, sollen die Termine in der Monats- oder Wochenansicht des Kalenders angezeigt werden? Und falls (auch) Wochenansicht: Nur als Datumseintrag unter dem Tag (ganztägiges Ereignis) oder als vertikaler Balken über alle Uhrzeiten des Tages hinweg? Wenn letzteres okay ist, dann kann man tatsächlich die appointment()-Funktion nutzen. Also ein Feld vom Typ Termin erstellen und dieses bspw. per Trigger "Nach Änderung" in beiden Datumsfeldern automatisch füllen lassen:
TERMINFELD := appointment(STARTDATUM, ENDEDATUM + time(23, 59))
Bei STARTDATUM und ENDEDATUM würde man bei "Im Kalender anzeigen" in den Optionen "Nein" eintragen, beim TERMINFELD "Ja". Und letzteres könnte man im Formular auch ausblenden ("false" bei "Nur anzeigen, wenn"), im Kalender würde es trotzdem dargestellt.
Will man die Daten mehrtägiger Events in der Wochenansicht jedoch nur als Ganztagesereignis oben sehen, dann wird's wohl etwas komplizierter, glaube ich. Mir würde da spontan jedenfalls nur eine Extra-Tabelle mit den einzelnen Tagen einfallen. Wäre aber sicher auch machbar.
-
Hi, danke für die ausführliche Erläuterung!
Das funktioniert, allerdings nur, wenn das Feld ENDDATUM nicht leer ist.
Vermutlich müsste da noch sowas rein wie
if ENDDATUM = empty then ENDDATUM=STARTDATUM.
-
Hallo Sebastian, ja, so eine Abfrage wäre natürlich sinnvoll. Ich würde aber vielleicht schon bei Eingabe des Startdatums das Enddatum entsprechend befüllen. Denn zumeist sind es ja wohl eintägige Events, so dass man sich die manuelle Eingabe bei ENDDATUM sparen kann, andernfalls ändert man den Wert halt. Und wenn man schon dabei ist, dann kann man auch gleich das Feld STARTDATUM auf Inhalt überprüfen (Änderung kann ja auch ein Löschen des Inhaltes sein).
Die vollständige Formel für "Nach Änderungen" im Feld STARTDATUM könnte dann bspw. so aussehen:
if STARTDATUM then
if not ENDDATUM then
ENDDATUM := STARTDATUM
end
TERMINFELD := appointment(STARTDATUM, ENDDATUM + time(23, 59))
else
TERMINFELD := null
end
Und im Feld ENDDATUM:
if STARTDATUM and ENDDATUM then
TERMINFELD := appointment(STARTDATUM, ENDDATUM + time(23, 59))
else
TERMINFELD := null
end
Habe den Code jetzt nicht überprüft, hoffe aber, dass er so funktioniert.
Grundsätzlich: Die Abfrage auf "leer" macht man in Ninox mit "null". Also:
if FELD = null then ...
(wenn Feld leer)oder
if FELD != null then ...
(wenn Feld nicht leer)Letzteres kann man aber mit "if FELD" abkürzen. Ninox intrepretiert das automatisch als "Wenn das Feld einen Inhalt hat, also nicht leer ist".
-
Dankeschön, das funktioniert schon fast. Aber bei der Formel zu STARTDATUM wird ein Ende erwartet in Zeile 5. Hab jetzt 10 Minuten raufgestarrt und find den Fehler nicht...
-
Wahrscheinlich will er ein Seikolon nach dem "end" in Zeile 4:
if STARTDATUM then
if not ENDDATUM then
ENDDATUM := STARTDATUM
end;
TERMINFELD := appointment(STARTDATUM, ENDDATUM + time(23, 59))
else
TERMINFELD := null
end
-
Autsch. Semikolon heißt das Ding. ;)
-
Das hat gefehlt, Dankeschön!!!!
-
Ja, genau, Button und Schleife. Ich hab's jetzt nicht gestestet - also wie immer ohne Gewähr! -, aber eigentlich sollte derselbe Code funktionieren wie "Nach Änderungen" im Feld STARTDATUM, nur eben mit der Schleifenvariable davor:
for i in select TABELLE do
if i.STARTDATUM then
if not i.ENDDATUM then
i.ENDDATUM := i.STARTDATUM
end
i.TERMINFELD := appointment(i.STARTDATUM, i.ENDDATUM + time(23, 59))
else
i.TERMINFELD := null
end
end
Wenn sich die neu importierten Datensätze irgendwie von den vorhandenen unterscheiden, dann könnte man beim "select" auch einen entsprechenden Filter setzen, damit auch nur die neuen verarbeitet werden.
-
Oh, falscher Thread ...
Content aside
- vor 5 JahrenZuletzt aktiv
- 11Antworten
- 3970Ansichten