0

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

null
    • Micha
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

    • Böhm & Herold GbR Fotoautomat Berlin
    • Sebastian_Bohm
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hi Micha,

    dankeschön.

    Wenn ich das bei Datum 1 bei "nach Änderung" eintrage, bekomm ich die Fehlermeldung

    "Die Funktion ist nicht definiert: appointment...)"

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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.

    • Böhm & Herold GbR Fotoautomat Berlin
    • Sebastian_Bohm
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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.

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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". 

    • Böhm & Herold GbR Fotoautomat Berlin
    • Sebastian_Bohm
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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...

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Autsch. Semikolon heißt das Ding. ;)

    • Böhm & Herold GbR Fotoautomat Berlin
    • Sebastian_Bohm
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Das hat gefehlt, Dankeschön!!!!

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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.

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Oh, falscher Thread ... 😱

Content aside

  • vor 4 JahrenZuletzt aktiv
  • 11Antworten
  • 3916Ansichten