Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Devil am 29.02.08 - 09:25:19

Titel: Kalendereintrag
Beitrag von: Devil am 29.02.08 - 09:25:19
Hallo zusammen,

ich habe folgendes Problem. Ich entwickle gerade eine Urlaubsdatenbank in welcher der Benutzer die Möglichkeit hat, dass wenn sein Urlaub genehmigt ist über einen Button seinen Urlaub in seinen persönlichen Kalender einzutragen. Wenn nun das Startdatum der 01.03.2008 ist und das Enddatum der 03.03.2008 dann trägt mein Script nur einen Eintrag bei 01.03.2008 ein aber an den anderen zwei Tagen fehlt ein Eintrag.

Ich hab hier mal mein Script gepostet. Was fehlen da noch für Felder die gefüllt werden müssen oder bin ich es völlig falsch angegangen?


Sub Click(Source As Button)
   
   Dim ss As New NotesSession
   Dim db As NotesDatabase
   Dim dbl As NotesDatabase
   Dim ws As New NotesUIWorkspace
   Dim uiDoc As NotesUIDocument
   Dim Doc As NotesDocument
   
   Set uiDoc = ws.CurrentDocument
   Set Doc = uiDoc.Document
   Set dbl = ss.CurrentDatabase
   
   Dim BoxTyp As Long
   Dim Antwort As Integer
   Dim BoxMsg As String
   Dim StringStartDate As String
   Dim StringEndDate As String
   
   BoxTyp = MB_OK + MB_ICONINFORMATION
   BoxMsg = |Es wurde ein automatischer Eintrag in ihrem Kalender vorgenommen!|
   Messagebox BoxMsg, BoxTyp, "Hinweis"
   
               'Kalendereintrag in Mailfile erstellen
   Dim dateRange As NotesDateRange
   
   StringStartDate = uidoc.FieldGetText("StartDate")
   StringStartDate = StringStartDate + " 04:00 AM"
   
   StringEndDate = uidoc.FieldGetText("EndDate")
   StringEndDate = StringEndDate + " 11:00 PM"
   
   Dim startDate As New NotesDateTime(StringStartDate)
   Dim endDate As New NotesDateTime(StringEndDate)
   Dim rtitem As NotesRichTextItem
   
   rc = Evaluate(|@MailDbName|)
   Set db = ss.GetDatabase(rc(0), rc(1))
   Set doc = db.CreateDocument
   Set dateRange = ss.CreateDateRange
   Set dateRange.StartDateTime = startDate
   Set dateRange.EndDateTime = endDate
   Set rtitem = doc.CreateRichTextItem("Body")
   doc.Subject = uidoc.FieldGetText("Subject")
   Call rtitem.AppendText("Link zur Urlaubsantrag DB, die diesen Eintrag bei der Buchung automatisch erstellt hat: ")
   Call rtitem.AppendDocLink(dbl, dbl.Title)
   'doc.CHAIR = uidoc.FieldGetText("CreatedBy")
   'doc.PRINCIPAL = uidoc.FieldGetText("CreatedBy")
   'doc.Location = uidoc.FieldGetText("Location") + ", " +uidoc.FieldGetText("Room")
   doc.Form = "Appointment"
   doc.AppointmentType = "2"
   Set doc.TimeRange = dateRange
   Set doc.CalendarDateTime = startDate
   Set doc.startDate = startDate
   Set doc.startDateTime = startDate
   Set doc.startTime = startDate
   Set doc.endDate = endDate
   Set doc.endDateTime = endDate
   Set doc.endTime = endDate
   Call doc.ReplaceItemValue("Org_Table", ORS_ITEM_PLANNER)   
   doc.KLCategories_2 = "Urlaubsplan"   
   doc.Alarms = "0"
   doc.Logo="StdNotesLtr14"
   doc.BookFreeTime = ""
   doc.Duration = 105
   doc.SequenceNum = 1
   doc.OrgTable = "CO"
   doc.tmpOwnerHW = "1"
   doc.WebDateTimeInit = "1"
   doc.ComputeWithForm False, False
   doc.save True, False
   'Call uidoc.Save
   uidoc.EditMode = False
End Sub
Titel: Re: Kalendereintrag
Beitrag von: klaussal am 29.02.08 - 09:35:33
Steht in CalendarDateTime nur das Startdatum ? Wenn ja, liegt hier der Hund begraben.
Titel: Re: Kalendereintrag
Beitrag von: Devil am 29.02.08 - 09:41:36
In CalendarDateTime steht 01.03.2008 04:00:00 CET
Titel: Re: Kalendereintrag
Beitrag von: klaussal am 29.02.08 - 09:47:04
Ebend.

Dann vergleich das mal mit einem Termin im Kalender (der über mehrere Tage geht)....
Titel: Re: Kalendereintrag
Beitrag von: m3 am 29.02.08 - 09:55:18
Zitat
In the case of Repeating All-Day Events, one parent document and multiple child documents (one for each repeating instance) are created. All the documents use the “Appointment” form. The children have the “CalendarDateTime” item and therefore appear in the Calendar view. The parent document has no “CalendarDateTime” item and can be seen only in the “All Documents” view.

IBM® Lotus Notes Calendaring & Scheduling Schema (http://www-12.lotus.com/ldd/doc/uafiles.nsf/docs/WPNotesCSSchema/$File/csschema.pdf)
Titel: Re: Kalendereintrag
Beitrag von: Devil am 29.02.08 - 10:00:30
Bei einem Termin der über mehere Tage geht steht in CalendarDateTime:
01.03.2008 04:00:00 CET
03.03.2008 04:00:00 CET

Wie füge ich dem Feld CalendarDateTime nun das Enddatum hinzu?

Call doc. ApppendItemValue("CalendarDateTime", EndDate) ??
Titel: Re: Kalendereintrag
Beitrag von: klaussal am 29.02.08 - 10:06:39
Ohne Gewehr; hab das hier gefunden:

Code
eval = Evaluate(|@Explode(@TextToTime(@Text(von_dat) + "-" + @Text(bis_dat)))| , doc)
	Forall x In eval
		x = x + " 04:00:00"
	End Forall
Titel: Re: Kalendereintrag
Beitrag von: m3 am 29.02.08 - 10:07:25
Multi-Value Felder werden in LotusScript durch ein Array repräsentiert => Array mit denZeitwerten aufbauen und einmal als Wert bei AppendValue übergeben.

@Klauss: Das Evalute ist nicht mehr notwenigd. Es gibt mittlerweile schon Split und Join. ;)
Titel: Re: Kalendereintrag
Beitrag von: klaussal am 29.02.08 - 10:09:24
@m3:

das hab ich einer DB, die schon uralt ist.... aber funzt  ;)
Titel: Re: Kalendereintrag
Beitrag von: Devil am 29.02.08 - 11:40:59
Sorry aber ich bin noch realtiv neu in Lotusscript. Ich hab nun noch folgendes Problem.

Ich muss ja wenn die ganztägige Veranstaltung von 01.03.2008 bis 03.03.2008 geht in CalendarDateTime folgendes eintragen:
01.03.2008 04:00:00 CET
02.03.2008 04:00:00 CET
03.03.2008 04:00:00 CET

Ich habe aber nur StartDate als NotesDateTime und EndDate als NotesDateTime. Wie berechne ich nun alle Tage und trage dies in das CalendarDateTime Feld ein??

Titel: Re: Kalendereintrag
Beitrag von: klaussal am 29.02.08 - 11:55:17
Siehe #6.


So ungefähr:
Zitat
eval = Evaluate(|@Explode(@TextToTime(@Text(von_dat) + "-" + @Text(bis_dat)))| , doc)
   Forall x In eval
      x = x + " 04:00:00"
   End Forall
   
   Dim datev() As Variant
   
   For i = 0 To Ubound(eval)
      Redim Preserve datev (i + 1)
      datev (i) = Cdat (eval(i))      
   Next
      
                ...
                ... 
   
   docMail.CalendarDateTime = datev
Titel: Re: Kalendereintrag
Beitrag von: Devil am 29.02.08 - 12:14:19
Okay also mit dem hier:

eval = Evaluate(|@Explode(@TextToTime(@Text(von_dat) + "-" + @Text(bis_dat)))| , doc)
   Forall x In eval
      x = x + " 04:00:00"
   End Forall


von welchem Datentyp muss von_dat und bis_dat sein? NotesDateTime?
Titel: Re: Kalendereintrag
Beitrag von: klaussal am 29.02.08 - 12:14:47
Datum.


Und hier  gibt es eine fertige Urlaubs-DB.

http://atnotes.de/index.php?board=8%3baction=display%3bthreadid=4126 (http://atnotes.de/index.php?board=8%3baction=display%3bthreadid=4126)
Titel: Re: Kalendereintrag
Beitrag von: Devil am 29.02.08 - 13:33:37
Also irgendwie funktioniert das nicht so ganz. StartDate und EndDate sind als Maskenfelder vom Typ Datum/Zeit.

Wenn ich das nun so versuche enthält mein eval keine Werte.


StringStartDate = Cdat(doc.StartDate(0) + " 04:00:00")
   StringEndDate = Cdat(doc.EndDate(0) + " 04:00:00")
   
   
   
   eval = Evaluate(|@Explode(@TextToTime(@Text(StringStartDate) + "-" + @Text(StringEndDate)))| , doc)
Titel: Re: Kalendereintrag
Beitrag von: Devil am 29.02.08 - 16:38:09
Okay hat sich nun erledigt. Vielen Dank für die Hilfe.
Titel: Re: Kalendereintrag
Beitrag von: klaussal am 29.02.08 - 17:24:59
Jetzt wäre es auch noch schön gewesen zu erfahren, wo es denn geklemmt hat.
Titel: Re: Kalendereintrag
Beitrag von: guesswho am 29.02.08 - 18:08:56
jepp, immer wieder schade, wenn man auf eine vermeintliche Lösung trifft, aber dann die eigentliche Lösung fehlt...

Jo
Titel: Re: Kalendereintrag
Beitrag von: koehlerbv am 29.02.08 - 22:50:03
Das ist wirklich schade, Jo. Trauriger ist aber eigentlich, wenn man immer wieder sieht, wie immer wieder Anwendungen neu "erfunden" werden, die es längst schon gibt: Stabil, viel umfangreicher, als es der "Newbee" hinbekommen würde - und viel, viel billiger als die "Neuerfindung". Welcher Chef kommt nur auf solche Schnapsidee, das Rad neu erfinden zu lassen?

Bernhard

Ein post scriptum an den "Teufel": Das Evaluate-Statement (wie gepostet) ist grundlegend falsch. Weierhin bin ich mir sehr sicher, dass es daher auch an anderen Stellen grundlegend noch klemmend wird. Daher: Wenn diese "Urlaubs-DB" jemals fertig wird, dann wird sie sehr teuer geworden werden (ha, das war futurum II ...  ;D)