Domino 9 und frühere Versionen > Entwicklung
Zeitvergleich kompliziert, warum so komisch?
eknori:
Ja, zwischen dem was du bei JNotes downloaden kannst und dem, was irgendwie den Weg hierhin gefunden hat ;D gibt es einen Unterschied.
Allerdings sollte man auch den R5 Planer mit den entsprecjenden Parametern zu umnauen können, daß er so aussieht wie meiner. Zumindest nach Aussage von Jörn Schwarze von ULC ( JNotes )
Das Mit den COnfig Dateien habe ich auch nicht so richtig verstanden. Gut, du kannst natürlich die Parameter, die dem Planer übergeben werden auch aus einer Textdatei beziehen. Das würde dann die Sache dynamischer machen, da du dann niemanden ans Desig lassen muß. Aber ob das damit gemeint ist ??
Ulrich
Rob Green:
hihihi*** ich komme wohl um eine Einblick in Java einfach nicht mehr drum.
Was ich nachbauen möchte ist:
in der Buchungsmaske sollen entsprechend
- der eingestellte Raum zur Lokation XYZ (mehrere Standorte möglich, damit auch mehrere Räume je Standort )
- die Ressource(n) wie Beamer etc.. zum Standort
- die gewünschte Start-End Zeit
innerhalb der Maske als eigener Planer auftauchen, der nur diese Infos bekommt und dann die belegten Zeiten pro Tag/Woche/Monat in Balkenform anzeigt. Also eigentlich ein nachgebauter R6 Planer vom Notes Original.
Ist das Deines Erachtens sehr aufwendig oder geht das einigermassen, wenn Du Deinen Aufwand mit Deinem Java Planer betrachtest? Immerhin bietet die Noteshilfe zu allen Notesklassen die komplementären Scriptklassen..sollte also eigentlich recht gut gehen, sich da einzuarbeiten.
eknori:
@Rob:
Ich habe deine theoretischen Überlegungen zur Ermittlung von Terminkollisionen mal in eine Formel verpackt.
zunaächst einmal eine Variable ueberschneidung mit 1 vorbesetzen; also grundsätzlich immer von einer Ueberschneidung ausgehen.
dann
if SZn > EZa then
ueberschneidung = 0 ' keine Überschneidung
else
if SZn < EZa AND EZn < SZa then
ueberschneidung = 0
end if
end if
trifft also keine der Bedingungen zu, dann haben wir eine Terminüberschneidung.
Das ganze dann in einer Schleife über alle Dokumente für den betreffenden Tag.
eknori
Rob Green:
nur ein Hinweis, falls das unklar oder undeutlich ist:
der Vergleich muß unbedingt ein Datums/Zeitwert sein..eine Zeitangabe alleine bringt nix...denn es kann ja auch Termine geben wie:
01.02.2003 09:00 - 05.02.2003 10:00
Wenn man jetzt nur die Uhrzeit nehmen würde (09:00 - 10:00) dann käme man mit der "Formel", wie Du sie oben gepostet hast nicht darauf, daß dieser Termin mit einem anderen vom 03.02.2003 15:00 - 03.02.2003 16:00 kollidiert.
Ist zwar klar, aber es sei nur zur Sicherheit nochmals erwähnt.
Im Sript hab ichs momentan so, daß ich zuerst den RAUM suche, ob der schon überhaupt irgendwann belegt worden ist, anhand der Bezeichnung des Raums (also nicht ausgehend von der Zeit!!!). Dann nehme ich mir in eine Collection alle entsprechenden Raumtermine und mache erst dann den Datums/Zeitvergleich.
Ich habe mich deswegen für diese Variante entschieden, da es wie gesagt mehrtägige Termine geben kann vom obigen Typ.
Auch ein Explode von Datumswerten einer LookUp Ansicht würde nichts bringen, da man ausgehend vom neuen Termin - die beiden Eckwerte Startdatum und Enddatum nehmend - nicht unbedingt die richtigen Termine findet (zB dann wenn neuer Termin vom 01.02. - 05.02. läuft, und für den Raum schon ein Termin am 03.02.-04.02. gebucht worden ist). Sucht man also "wo ist denn ein Termin am 01.02....nix...wo ist ein Termin am 05.02...nix..." und das ist natürlich falsch.
Auszug aus Code:
--- Code: ---'Variablen für Zeitvariablen des jetzigen Docs und der zu vergleichenden Docs
Dim dateNEUStart As Variant
Dim dateALTStart As Variant
Dim dateNEUnde As Variant
Dim dateALTEnde As Variant
'Ziehe Startdatumzeit zB. "12.03.2003 16:00" und EndDatumZeit zB. "12.03.2003 18:00" des jetzigen Docs
dateNEUStart = uidoc.FieldGetText( "StartdatumZeit" )
dateNEUEnde = uidoc.FieldGetText( "EndDatumZeit" )
startdateNEU$ = Cstr(dateNEUStart)
enddateNEU$ = Cstr(dateNEUEnde)
'Erzeuge von den beiden Anfangs und Endwerten NotesDateTime Objekte
Dim dtimefromNEU As New NotesDateTime(startdateNEU$)
Dim dtimetoNEU As New NotesDateTime(enddateNEU$)
.....
'Dann der Vergleich später...
'hole erstes Alt-Doc aus Collection heraus zwecks Vergleich
Set AltDoc = DocColl.getFirstDocument
While Not AltDoc Is Nothing
'Checklauf wenn jetziges Doc nicht neu ist
If flag=False Then
unidAlt$ = AltDoc.UniversalID
If unidAlt$ <> unid$ Then 'wenn UNID nicht übereinstimmt ist es ein anderes Alt-Doc
dateALTStart = AltDoc.StartdatumZeit(0)
dateALTEnde = AltDoc.EndDatumZeit(0)
startdateALT$ = Cstr(dateALTStart)
enddateALT$ = Cstr(dateALTEnde)
Dim dtimefrom2ALT As New NotesDateTime(startdateALT$)
Dim dtimeto2ALT As New NotesDateTime(enddateALT$)
'ist Startdatumzeit NEU > EndeDatumZeit ALT ? ..keine Überschneidung..da neue Termin nachher beginnt...wenn nicht, muß man noch weiter checken
If dtimefromNEU.TimeDifference( dtimeto2ALT ) > 0 Then
meldung$={- Raum } & Cstr(doc.Raum(0)) & {: -} & Chr(10)
Else
'ist EndeDatumZeit NEU < StartDatumZeit ALT ? ..keine Überschneidung, da neue Termin vorher fertig
If dtimetoNEU.TimeDifference( dtimefrom2ALT ) < 0 Then
meldung$={- Raum } & Cstr(doc.Raum(0)) & {: -} & Chr(10)
Else
meldung$={- Raum } & Cstr(doc.Raum(0)) & {: - Terminüberschneidung } & Chr(10) & startdateALT$ & { - } & enddateALT$ & Chr(10)
Sperrflag$="1"
End If
End If
--- Ende Code ---
Und abstrakt ist die Formel gemäß Deiner Schreibkonvention:
if SZn > EZa then
ueberschneidung = 0 ' keine Überschneidung
else
if EZn < SZa then 'habe die erste Bedingung wech, da bereits in ersten IF
ueberschneidung = 0
end if
end if
eknori:
und warum nicht gleich
if SZn > EZa OR EZn < SZa then
ueberschneidung = 0 ' keine Überschneidung
end if
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln