0

Termin aus Datum, Uhrzeit und Dauer erstellen | do as server

Liebe Ninoxprofis,

ich möchte aus einem Datum, einer Uhrzeit und einer Dauer ein Terminfeld befüllen. Dazu habe ich einen Button erstellt, der mit angehängtem Skript, die Arbeit perfekt erledigt. Konnte ich der Dokumentation entnehmen - danke.

Nun sollte ich diese Zeilen in ein umfangreicheres Skript einbetten, welches ich mit "do as Server" über den Server ausführe und plötzlich bekomme ich ein anderes Ergebnis. Gleiches passiert auch dann, wenn ich im Feld "Dauer" das Skript ins Feld "Trigger nach Änderung" schreibe.

Es passieren zwei Dinge: Die Minuten werden immer als volle Stunde angezeigt und die Stunde der Startzeit wird auf +1 gesetzt. Aus 12:00 Uhr wird 13:00 Uhr und aus 12.13 Uhr wird auch 13:00 Uhr usw.. Ähnliches passiert auch beim Enddatum.

Ich komm leider nicht drauf, an was das liegt. Kann mir jemand helfen?

Liebe Grüße Sigi

PS Irgendwann kenn ich mich dann aus und dann hoffe ich, dass ich auch helfen kann :-).

do as server
let yy := year(Datum);
let dd := day(Datum);
let mm := month(Datum);
let Ahh := number(item(split(text(Uhrzeit), ":"), 0));
let Amin := number(item(split(text(Uhrzeit), ":"), 1));
let Dhh := number(item(split(text(Dauer), ":"), 0));
let Dmin := number(item(split(text(Dauer), ":"), 1));
OP_Zeitslot := appointment(datetime(yy, mm, dd, Ahh, Amin), time(Dhh, 0))
end

9 Antworten

null
    • Kruna
    • vor 11 Monaten
    • Gemeldet - anzeigen

    HAllo Siegfried, nachdem ich mich etwas eingelesen habe, scheint das etwas mit den Servern zu tun zu haben und seit JAhren ein bug zu sein.

    Bei der Stundenangabe könnte man Abhilfe schaffen, indem man eine Stunde abzieht, also in Zeile 5

        let Ahh := number(item(split(text(Uhrzeit), ":"), 0))-1;

    schreibt. Was die Minutenangabe angeht, finde ich gerade leider keine Lösung.

    Gruß Kruna

      • siegfried
      • vor 11 Monaten
      • Gemeldet - anzeigen

       Hallo Kruna,

      besten Dank für deine Bemühungen und die Info. Das klingt allerdings so, als ob ich einen anderen Weg suchen und finden muss. Jedenfalls hast du mir aber viel Zeit erspart. Als Neuling sucht man den Fehler ja immer bei sich selber...

      Danke und liebe Grüße

      Sigi

      • Kruna
      • vor 11 Monaten
      • Gemeldet - anzeigen

      ich habe auch mal im engl. Forum gelesen und es scheint tatsächlich so zu sein auch wenn einige Beiträge Jahre alt sind.

      Ich habe mal eine beispiel db hinzugefügt, wie man es evtl anders machen könnte. Ob das bei Dir passt, das weiß ich natürlich nicht, aber vllt hilft es ja in irgendeienr Form weiter.

      • siegfried
      • vor 11 Monaten
      • Gemeldet - anzeigen

       Da ich den Termin tatsächlich als Kalendereintrag weiterverwenden muss, hilft mir diese Variante leider nicht weiter. Die Idee finde ich aber cool. Trotzdem danke :-).

    • mirko3
    • vor 11 Monaten
    • Gemeldet - anzeigen

    Hallo Siegfried. Trigger werden grundsätzlich auf dem Server ausgeführt, daher das selbe Ergebnis wie im Button unter "do as server...end". Du könntest das umgehen, wenn Du die Bildung des Termins aus dem Bereich "do as server...end" herausläßt. Ausserdem kannst Du das Datumfeld, Zeitfeld und Zeitdauerfeld direkt eingeben, z.B. so

    let term := text(appointment(datetime(Datum, Uhrzeit), Zeitdauer));
    do as server
    sonstiger Code
        OP_Zeitslot := term
    sonstiger Code
    end
    

    Mirko

      • siegfried
      • vor 11 Monaten
      • Gemeldet - anzeigen

       Hallo Mirko,

      danke - da habe ich viel gelernt und eigentlich wäre dies genau das Richtige. Die Direkteingabe der Felder funktioniert, sofern ich das richtig getestet habe, nur in einem Textfeld oder auch in einem Formelfeld.

      Dann habe ich dasselbe Problem wie beim Lösungsansatz von Kruna und sehe keine Möglichkeit, den Termin in den Kalender zu bekommen weil das Feld "im Kalender anzeigen" nicht existiert. Oder gibt es da einen anderen Ansatz?

      Jedenfalls bedanke ich mich recht herzlich. Notfalls versuche ich es, mein Skript außerhalb des "do as server" Befehls zu platzieren.

      Liebe Grüße Sigi

      • mirko3
      • vor 11 Monaten
      • Gemeldet - anzeigen

      Wenn OP_Zeitslot ein Terminfeld ist, dann wird dieses gefüllt und auch im Kalender angezeigt, wenn der Code im Button liegt. Ein appointment() lässt sich mit (datetime, duration) oder auch mit (datetime, time) befüllen, oder mit zwei datetimefeldern usw. Aber egal, mit appointment() kann man das Terminfeld füllen. Wenn es auf dem Server berechnet wird, dann kommt es häufig zu Verwerfungen, ein alter Bug, der noch immer nicht ausgeräumt ist. Besser wäre es also, das appointment() ausserhalb von do as server...end berechnen zu lassen und es dann zu übergeben. In meinem Beispiel klappt das. Mirko

    • siegfried
    • vor 11 Monaten
    • Gemeldet - anzeigen

    OMG - da habe ich vorhin einen Anfängerfehler gemacht. Danke für die Geduld.

    Jetzt funktioniert alles einwandfrei! Sowohl die Direkteingabe auf ein Terminfeld wie auch die Bearbeitung außerhalb der "do as server" Befehls. 

    Ein großes Dankeschön!

    Liebe Grüße Sigi

      • Rafael_Sanchis
      • vor 9 Monaten
      • Gemeldet - anzeigen

       

      Sorry Sigfrido how resolve the problem ?