Hallo,
ich habe ein kleines Script umgeschrieben, welches mir aus einer Datenbank heraus per Schaltfläche einen Kalendereintrag vom Typ "Personal" erzeugt.
Dabei werden vorgegebene Felder gefüllt. Leider habe ich dabei 2 Probleme. Doch erst der Code
Sub Click(Source As Button)
Dim Session As New NotesSession
Dim Workspace As New NotesUIWorkspace
Dim TheDocument As NotesDocument
Dim db As notesDatabase
Dim UserName As String
Set UIDoc = Workspace.CurrentDocument
Set TheDocument = UIDoc.Document
Set db = New NotesDatabase("", "")
'Variable für den Betreff deklarieren
Dim Subject As String
Subject = Uidoc.FieldGetText("CalEntrySubject")
'Variable für die Terminart deklarieren
Dim Terminart As String
Terminart = Uidoc.FieldGetText("termin")
' Mail-Datenbank öffnen
db.openmail
' Datumsvariable deklarieren
Dim Datum As String
Datum = Uidoc.FieldGetText("Datum")
'Kalenderfelder
Dim CalendarEntry As New NotesDocument(db)
Dim rtitem As New NotesRichTextItem(CalendarEntry, "Body")
Call rtitem.AddNewline(1)
Call rtitem.AppendText("Klicken Sie auf die Verknüpfung, um das Originaldokument zu sehen.")
Call rtitem.AddNewline(2)
Call rtitem.AppendDocLink(TheDocument, "Dokument")
UserName = Session.CommonUserName
CalendarEntry.Form = "Appointment"
CalendarEntry.Principal = UserName
CalendarEntry.Chair = Session.UserName
'CalendarEntry.ExcludeFromView = "D"
'CalendarEntry.OrgTable = "CO"
'CalendarEntry.SequenceNum = 1
CalendarEntry.Subject = Subject
CalendarEntry.KTE_SL_ART = Terminart
'Appointment Type 4 = Reminder , 3 = meeting, 2 = event, 1 = anniversary, 0 = Personal
'Kalenderfelder füllen
CalendarEntry.AppointmentType = "0"
CalendarEntry.StartDate = Cdat(Datum)
CalendarEntry.StartDateTime = Cdat(Datum)
CalendarEntry.CalendarDateTime = Cdat(Datum)
Call CalendarEntry.save(True, True)
End Sub
Mein erstes Problem.
Durch die Variable "Terminart" wird ein Feld im Kalenderdoc gefüllt, welches ein Symbol in der Kalenderansicht hervorruft. Erzeugt ich nun per button den Eintrag, wird dieses Symbol nicht angezeigt. Klicke ich im Kalender aber das Dokument an und speicher es erneut, wird es angezeigt.
Mein zweites Problem.
Es gibt auch noch das Feld TimeRange, welches die Start und Endzeit bestimmt. In meiner Maske habe ich ebenfalls ein Feld "Uhrzeit", indem ich die Dauer per Schieberegler einstelle und diese dann im Feld angezeigt wird. Meines Wissens werden die Werte dann in "StartDateTime" und "EndDateTime" abgelegt. Ist doch richtig oder?
Wie kann ich das Feld TimeRange mit diesen Werten füttern?
Für einen Hinweis wäre ich sehr dankbar.
Grüße
Ralf
Hallo,
ich habe gestern mal etwas rumgebastelt und versucht, selbst etwas auf die Beine zu stellen, wobei sich meine Script Kenntnisse in Grenzen halten. Ich habe gerade begonnen mit dem R5 Script Buch von Addison-Wesley. Danke nochmal für den Hinweis der C & S.
Bisher klappt auch alles recht gut. Nur 1 Ding will noch nicht wie gewünscht. Doch erstmal der neue Code (Anmerkung: Ich erhebe nicht den Anspruch, einen tollen Code geschrieben zu haben ;) )
Sub Click(Source As Button)
Dim db As New NotesDatabase("", "")
Dim ws As New notesuiworkspace
Dim session As New notessession
Dim uidoc As notesuidocument
Dim doc As notesdocument
Dim doc2 As notesdocument
Dim betreff As String
Dim datum As Variant
Dim beginn As Variant
Dim ende As Variant
Dim username As New NotesName(session.UserName)
Set uidoc = ws.currentdocument
Set doc = uidoc.document
betreff = uidoc.FieldGetText("Betreff")
datum1 = doc.GetItemValue("Datum")
beginn1 = doc.GetItemValue("Uhrzeit")
ende1 = doc.GetItemValue("Uhrzeit1")
datum = datum1(0)
beginn = beginn1(0)
ende = ende1(0)
Call db.OpenMail
Set doc2 = New NotesDocument(db)
doc2.ExcludeFromView = "D"
doc2.SequenceNum = 1
doc2.OrgTable = "C0"
doc2.Form = "Appointment"
doc2.AppointmentType = "0"
doc2.Principal = session.Username
doc2.Chair = session.UserName
doc2.Subject = betreff
doc2.Repeats = ""
doc2.StartDate = Cdat(datum)
doc2.EndDate = Cdat(datum)
doc2.StartDateTime = Cdat(beginn)
doc2.EndDateTime = Cdat(ende)
Dim rtitem As NotesRichTextItem
Set rtitem = New NotesRichTextItem (doc2, "body")
Call rtitem.AddNewline(1)
Call rtitem.AppendText("Bitte hier klicken, um das Dokument zu öffnen.")
Call rtitem.AddNewline(1)
Call rtitem .AppendDocLink(doc, db.Title)
Call doc2.ComputeWithForm( True, False )
Call doc2.Save(True,False)
Msgbox "Ihr Termin wurde eingetragen"
End Sub
Ich kann damit einen Eintrag erzeugen, leider wird dieser nicht in der normalen $Calendar Ansicht gezeigt. Die Felder für die Maske und den Typen sind korrekt belegt. Rufe ich das Dokument in der Mail DB auf, wird es auch als Termin angezeigt mit den korrekten Daten. Nur nicht in der Kalenderansicht. Speicher ich das Dokument erneut, steht es in der korrekten Ansicht. ???
Grüße
Wobei im Nachhinein betrachtet der erste Code wirklich nur die dringende Nachfrage nach einem Kalendereintrag befriedigen sollte und es auch prinzipiell tat. :D
Ich habe jetzt noch mit den Werten StartDateTime und EndDateTime zu tun. In meinem Beispiel nehme ich ja die Werte aus dem Array.
Habe ich in meinem Dokument 2 Felder (uhrzeit und uhrzeit1) welche mit Datum/Zeit gefüllt sind, klappt der Eintrag. Ich probiere es nun mit einem Steuerelement (mit Mehrfachwerten) und habe als Vorgabewert
@TextToTime(@Text(StartDateTime) + "-" + @Text(EndDateTime))
da ich es komfortabler finde, mit den Schiebereglern die Zeit einzustellen.
Das Problem hier ist aber, das jetzt der zurückgelieferte Wert im Array nur noch die Uhrzeit enthält. Dadurch wird (verständlicherweise) das Datum auf den 30.12.1899 gesetzt.
Ich habe schon probiert, die Variable "ende" mit
ende = datum1(0) & ende1(0)
zu kombinieren. Und bekomme dann eine "Type mismatch" Fehlermeldung. Liege ich richtig in der Annahme, das sie hervorgerufen wird, weil ich zwei Datentypen kombinieren möchte?
Grüße
Ich habe eben nochmal fix Deinen Code überflogen. Dir fehlen da aber noch ein paar essentielle Items, ich habe daher folgendes fix mal bei mir 'rausgeschnippelt:
docCalendarEntry.~$AltPrincipal = docRequest.Requester (0)
docCalendarEntry.~$BusyName = docRequest.Requester (0)
Set itemTemp = docCalendarEntry.GetFirstItem ("$BusyName")
itemTemp.IsNames = True
docCalendarEntry.~$BusyPriority = "1"
docCalendarEntry.~$CSversion = "2"
docCalendarEntry.~$NoPurge = docRequest.EndDate (0)
docCalendarEntry.~$PublicAccess = "1"
docCalendarEntry.AltChair = docRequest.Requester (0)
docCalendarEntry.BookFreeTime = ""
docCalendarEntry.Chair = docRequest.Requester (0)
docCalendarEntry.ExcludeFromView = ArrayAdd ("D", "S")
docCalendarEntry.Principal = docRequest.Requester (0)
docCalendarEntry.tmpOwnerHW = "1"
$BusyName und $PublicAccess sind essentiell für C&S bzw. den Zugriff.
HTH,
Bernhard