Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: tirreg am 19.09.03 - 08:31:39

Titel: Kalendar
Beitrag von: tirreg am 19.09.03 - 08:31:39
Hi,

ich schaffe es einfach nicht. will einen zeitraum (urlaub) über lotusscript in den userkalender eintragen lassen. er trägt immer nur einen tag ein. hat jemand schon mal so was geschrieben oder ne ahnung wie es geht?? hat das was mit dem feld calenderdatetime zu tun??

cheers tirreg :P
Titel: Re:Kalendar
Beitrag von: Rob Green am 19.09.03 - 14:39:06
hatte folgenden Weg (meine spez. Anwendung, ist also anzupassen !!!):

A: wieviel Urlaubstage
ein Feld, das die Anzahl der Tage berechnet:
@If(Feld_ABC!="ja";0;@Round((EndDate-StartDate)/86400;1))
(ergibt 1, 2, 3 oder 4 oder ....)
Damit weiß ich, wie oft die Schleife zum Anlegen der Termindocs laufen muß.

B: öffnen der Mail DB des Users und Kalendeintrag erzeugen
Dim Lokation As String
Dim userMailDb As New NotesDatabase( "", "" )
Dim reminderDoc As NotesDocument
Call userMailDb.OpenMail
If userMailDb.IsOpen Then
...
Set reminderDoc = New NotesDocument( userMailDb )
Dim rtItem As NotesRichTextItem
With reminderDoc
            .Form = "Appointment"
            .ReplaceItemValue "$Alarm", 1
            .ReplaceItemValue "$AlarmDescription", "Erinnerung"
            .ReplaceItemValue "$AlarmMemoOptions", ""
            .ReplaceItemValue "$AlarmOffset", 0
            .ReplaceItemValue "$AlarmUnit", "M"
            .ReplaceItemValue "NoticeType", "R"
            .ReplaceItemValue "tmpDoNotProcess", "1"
            .Subject = doc.subject(0) & { (ABCDEFG)}
            .Alarms = "1"
            .CalendarDateTime = dtimefromNEU.lsLocalTime
            .StartDate = dtimefromNEU.lsLocaltime
            .StartTime = dtimefromNEU.lsLocaltime
            .StartDateTime = dtimefromNEU.lsLocaltime
            .EndDate = dtimetoNEU.lsLocaltime
            .EndTime = dtimetoNEU.lsLocaltime
            .EndDateTime = dtimetoNEU.lsLocaltime
            .MeetingType = "0"
            .AppointmentType = "0"
            .ISMAILSTATIONERY = 1
         End With
reminderDoc.ComputeWithForm True,True
         reminderDoc.save True,False
         reminderDoc.PutInFolder( "$Alarms" )
         
      Else
         Print "Fehler: Kann die Maildatei nicht öffnen"
      End If

C: Und wie erzeuge ich die Serie?
oben in B siehst Du wie die Zeiten + Datum eingetragen werden (all diese Variablen mit "time" drin). Die kannst Du dynamisch erstellen. Wie? >

Beispiel, um letztes Datum incl. Zeit der "Beleihung bzw Urlaub" per adjust zu berechnen
            Set EndDateFirstT = New NotesDateTime(StartDateFirstT.dateonly & " " & StartZeitLastT.TimeOnly) ' Tag momentan 01.01.03 00:01 Uhr
            Set EndDateLastT  = New NotesDateTime(StartDateFirstT.dateonly & " " & EndZeitLastT.Timeonly) ' Tag momentan 01.01.03 bis Ende Uhrzeit 08:00 Uhr
            Call EndDateFirstT.AdjustDay( daycounter ) ' auf letzten Tag hochzaehlen zB 10.01.03 00:01 Uhr
            Call EndDateLastT.AdjustDay( daycounter ) ' auf letzten Tag hochzaehlen zB 10.01.03 08:00 Uhr

daycounter ist also der Zähler und gleichzeitig Deine Anzahl Urlaubstage im Maximum.
Zähler fängt also bei 0 an = 1. Urlaubstag
...
Zähler 6 = 7. Urlaubstag
etc...

Mit diesem Zähler gehst Du in eine For Schleife und kreierst wie bei B gezeigt die einzelnen Serientermine.

Klar? Nicht? Ist nicht trivial zu Beginn, aber nach einer Stunde ist es ok, glaub mir  ;) Beware: ich arbeite im obigen Beispiel mit "Urlaubstagen" wie
zB vom 01.01. 16:00 bis 10.01. 07:00 Uhr. Sieht man oben nicht, woher ich die Uhrzeiten hernehme, das ist "wo anders" im Code. Deine Urlaubstage werden wohl 24 Std. Termine sein, also pass es Dir ganz einfach an.
Titel: Re:Kalendar
Beitrag von: tirreg am 23.09.03 - 09:11:11
Hi Rob,

sowie ich das verstehe, legst du für jeden Urlaubstag ein neues Kalenderdocument an? Da ich aber auch die Möglichkeit will, den Kalendereintrag per Program zu löschen, müßte ich ja dann alle zugehörigen DokIds merken, damit ich ihn löschen kann. In den KalenderDocs aus der Mailschablone wird die TextListe CalendarDateTime mit den "Urlaubstagen" gefüllt. Hast Du da keine Routine, die das Feld korrekt erstellt :o

Cheers Tirreg