Kalendereinträge

  • Hallo an alle!
    Ich möchte aus den Urlaubsanträgen in unserer Urlaubs-DB automatisch Kalendereinträge in der Mail-DB des Benutzers generieren. Dazu habe ich mir versuchsweise ein Script zusammengebastelt mit dem das schon halbwegs funktioniert. Allerdings wird nur der Termin am Startdatum eingetragen. Ich möchte aber an jedem Tag des Urlaubs einen Eintrag sehen. Was muß ich ändern?
    Wär schön, wenn jemand helfen könnte!
    Vielen Dank!
    kewy


    Hier mein Script: (bitte nich lachen, ich hab keine Ahnung von Lotus-Script)


    Dim workspace As New NotesUIWorkspace
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim uidoc As NotesUIDocument
    Dim dateRange As NotesDateRange
    Dim dauer As Integer
    Dim tmpdate As String
    Dim tmpdate2 As String
    Dim datum_von As String
    Dim datum_bis As String
    Dim startDate As NotesDateTime
    Dim endDate As NotesDateTime

    Set db = session.CurrentDatabase
    Set uidoc = workspace.CurrentDocument
    Set doc = New NotesDocument( db )
    doc.Form = "Urlaub"

    datum_von = uidoc.FieldGetText( "datum_1" )
    Messagebox datum_von ,, "TMP-Date: "
    datum_bis = uidoc.FieldGetText( "datum_2" )
    dauer = uidoc.FieldGetText( "Urlaubstage" )

    Set startDate = New NotesDateTime (datum_von)
    Set endDate = New NotesDateTime(datum_bis)


    rc = Evaluate (|@MailDbName|)
    Set db = session.GetDatabase(rc(0), rc(1))
    Set doc = db.CreateDocument

    doc.Form = "Appointment"
    doc.subject = "Urlaub-Test Date Range"
    doc.AppointmentType="2"
    Set dateRange = session.CreateDateRange


    tmpDate = datum_von + " 00:00:00"
    Set doc.CalendarDateTime = New NotesDateTime(tmpDate)
    tmpDate = datum_von + " 00:00:01"
    tmpDate2 = datum_bis + " 23:59:59"

    Set dateRange.StartDateTime = startDate
    Set dateRange.EndDateTime = endDate
    Set doc.TimeRange = dateRange
    doc.Duration = dauer
    doc.SequenceNum = 1
    doc.OrgTable = "P0"

    Set doc.StartDateTime = New NotesDateTime (tmpDate)
    Set doc.StartDate = New NotesDateTime (tmpDate)
    Set doc.EndDateTime = New NotesDateTime (tmpDate2)

    Call doc.ComputeWithForm(False,False)
    Call doc.Save(True,False,True)

  • Zitat



    doc.Form = "Appointment"
    doc.subject = "Urlaub-Test Date Range"
    doc.AppointmentType="2"
    Set dateRange = session.CreateDateRange


    du hast AppointmentType="2" -> also auf "Jahrestag" gesetzt.
    Der kann nur ein Startdatum haben ;)


    Versuchs mal mit AppointmentType = "0" = "Ganztägige Veranstaltung"


    Vielleicht reicht das schon....


    MfG
    Sven

    • Offizieller Beitrag

    AppointmentTyp2 = "2" steht für mehrtägige Termine.


    Ich würde mir einen Test-Termin erstellen und dann in der Eigenschaftbox die Felder ansehen. Die Felder würde ich dann per Script genauso (Typ und Inhalt) setzen.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • ups :o)


    hab mich auch verirrt in den unendlichen Weiten ...


    Jahrestag ist natürlich "1" und Veranstaltung "2" - SORRY!


    im übrigen sehe ich keinen 'Set doc.EndDate = ..." ???

  • Wo kann ich das denn mal nachlesen was welcher AppointmentTyp ist? In der Hilfe hab ich nix gefunden!
    Das mit der "2" hatte ich aus ´nem Buch rausgesucht.


    Ich hab im Script ein
    Set doc.EndDateTime = New NotesDateTime (tmpDate2). Reicht das nicht?


    Bei den Eigenschaften hab ich einen Unterschied gesehen:
    Wenn ich einen Eintrag direkt im Kalender erfasse, steht in CalendarDateTime jeder einzelne Tag/Uhrzeit drin. Über mein Script kommt nur der erste Tag an. Wie krieg ich denn wohl die ganze Liste der Tage in dieses Feld?

    • Offizieller Beitrag

    den Wert für AppointmentType bekommst Du raus, indem Du Dir in der Maske das Feld AppointmentType anschaust. Dort stehen die Einträge und ihre Aliase oder Du erstellst Dir ein Dokument und schaust in der Eigenschaftenbox die Feldinhalte an.


    In CalendarDateTime muss eine Liste der Startzeiten stehen.


    Gruß Dirk

  • Zitat


    tmpDate = datum_von + " 00:00:00"
    Set doc.CalendarDateTime = New NotesDateTime(tmpDate)


    ... damit setzt du nur das StartDatum, wenn du eine Liste der Urlaubstage/Zeiten setzt, steht auch mehr drin - denk ich

  • Ich denk' mal bau dir ne Schleife und setzt die Liste zusammen...


    hab mir mal die Schablone näher angesehen - puhh! Wird in der Maske wohl über JS berechnet ... da lass ich lieber die Fingers von ;)

  • Schade! JS kannich mindestens genauso schlecht wie Lotus-Script.
    Naja, ich geb noch nicht auf und bastel noch weiter.
    Vielleicht lande ich ja mal ´nen Glückstreffer.

    • Offizieller Beitrag

    nur so als Idee.


    Die Zeiten setze ich auf 4:00 Uhr, weil es bei den mehrtägigen Terminen so ist. Mit 00:00:00 Uhr gab es zumindest unter Notes 4.x und 5.x Probleme bei der Darstellung im Kalender.


    Das Script ist nicht getestet und habe ich auch so nicht im Einsatz - also bitte erst testen!


    Gruß
    Dirk

  • Hallo Dirk, vielen Dank.


    Ich mußte das Script aber folgendermassen abändern, damit ich es ohne Fehler speichern konnte: (hab es hoffentlich nicht kaputt geändert)
    -----------------------------------------


    'Backslash mußte anscheinend raus ?
    tmpDate = datum_von + " 04:00:00"


    Set ndt_datum_von = New NotesDateTime(tmpDate)
    Set ndt_datum_bis = New NotesDateTime(datum_bis + " 23:59:59")

    Dim ndt_CalendarDateTime() As NotesDateTime
    Redim ndt_CalendarDateTime(0)


    'Set mußte anscheinend rein
    Set ndt_CalendarDateTime(0) = ndt_datum_von.LSLocalTime
    Call ndt_datum_von.AdjustDay(1)

    i = 0
    While ndt_datum_von < ndt_datum_bis
    i = i +1
    Set ndt_CalendarDateTime(i) = ndt_datum_von.LSLocalTime
    Call ndt_datum_von.AdjustDay(1)
    Wend

    doc.CalendarDateTime = ndt_CalendarDateTime
    --------------------------------------

    Jetzt bekomm ich es gespeichert, aber beim Testen kommt ein "Type mismatch"


    Ich seh aber nicht warum!

  • Dann krieg ich auch wieder bei
    'Set ndt_CalendarDateTime(0) = ndt_datum_von.LSLocalTime'
    ein Type Mismatch.


    Nachdem ich hier einiges rumgetestet habe, glaub ich auch eher, daß es an ndt_datum_von liegt.
    Selbst wenn ich alles mit ndt_CalendarDateTime rausnehme, kommt es spätestens beim "while" zum Type Mismatch.
    Ich kann mir ndt_datum_von noch vor dem adjustDay anzeigen lassen, danach aber nicht mehr. Dann kommt der Fehler.

  • Versuch es mal mit folgendem Code-Teil:


    Set ndt_datum_von = New NotesDateTime(tmpDate)
    Set ndt_datum_bis = New NotesDateTime(datum_bis + " 23:59:59")

    Dim ndt_CalendarDateTime As Variant
    Redim ndt_CalendarDateTime(0)

    'Set mußte anscheinend rein
    ndt_CalendarDateTime(0) = ndt_datum_von.LSLocalTime
    Call ndt_datum_von.AdjustDay(1)

    i = 0
    While ndt_datum_von.TimeDifference(ndt_datum_bis) > 0
    Redim Preserve ndt_CalendarDateTime(i)
    i = i +1
    ndt_CalendarDateTime(i) = ndt_datum_von.LSLocalTime
    Call ndt_datum_von.AdjustDay(1)
    Wend

    doc.CalendarDateTime = ndt_CalendarDateTime