Domino 9 und frühere Versionen > Entwicklung

Zeitvergleich kompliziert, warum so komisch?

<< < (3/5) > >>

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