使用新的Notes 9.x日历功能但遇到重复会议的问题。要列出两个日期时间值之间的所有日历事件,但重复发生的事件会显示第一个事件,但不会显示属于我日期范围的事件。
编程是这样的:
Pid = "DAETNYR"
starttime = "2014-03-14T6:00:00Z"
endtime = "2014-03-14T19:00:00Z"
Set PersonDoc = NabHelp.SearchForPersonDoc(Pid)
server1 = PersonDoc.MailServer(0)
server1 = "TestServer1/IA/Servers/USA"
file1 = PersonDoc.MailFile(0)
Set UserMailDb = New NotesDatabase(server1, file1)
Set cal = Session.getCalendar(UserMailDb)
Set StartDate = New NotesDateTime( StartTime )
Set EndDate = New NotesDateTime( EndTime )
ForAll cale In cal.getEntries(StartDate, EndDate)
calestr = cale.ReadRange(StartDate, EndDate)
i = InStr(calestr, "RECURRENCE-ID:")
stop
If i > 0 Then
recurid = Mid$(calestr, i + 14, 16)
End If
If recurid = "" Then
Set caldoc = cale.Getasdocument()
Else
Set caldoc = cale.Getasdocument(0, recurid)
End If
End ForAll
我是否通过calestr阅读每个复发品并在日期范围内进行测试?有什么想法吗?
答案 0 :(得分:1)
对象模型有点棘手。 NotesCalendarEntry是表示周期性事件的所有实例的单个对象。如示例所示,您可以获取与单个实例[cale.Getasdocument(0, recurid)
]关联的文档,但您需要首先了解重复ID。
问题是NotesCalendar.getEntries()
没有告诉您任何重复ID在给定日期范围内的情况。 (顺便说一下,你的样本包括:cale.ReadRange(StartDate, EndDate)
。我不确定是什么,因为NotesCalendarEntry没有ReadRange()方法。)
最好使用NotesCalendar.readRange()
。返回一个iCalendar字符串,列出该范围内的所有事件,包括特定实例的重复ID。例如,以下是一些示例输出:
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
DTSTART:20140314T130000Z
DTEND:20140314T140000Z
TRANSP:OPAQUE
RECURRENCE-ID:20140314T130000Z
DTSTAMP:20140314T121932Z
SEQUENCE:0
CLASS:PUBLIC
SUMMARY:Two week sabbatical
LOCATION:Off site
UID:A56ADC092EA2323285257C75006B2B3F-Lotus_Notes_Generated
X-LOTUS-SUMMARYDATAONLY:TRUE
X-LOTUS-APPTTYPE:0
END:VEVENT
BEGIN:VEVENT
DTSTART:20140315T130000Z
DTEND:20140315T140000Z
TRANSP:OPAQUE
RECURRENCE-ID:20140315T130000Z
DTSTAMP:20140314T121932Z
SEQUENCE:0
CLASS:PUBLIC
SUMMARY:Two week sabbatical
LOCATION:Off site
UID:A56ADC092EA2323285257C75006B2B3F-Lotus_Notes_Generated
X-LOTUS-SUMMARYDATAONLY:TRUE
X-LOTUS-APPTTYPE:0
END:VEVENT
END:VCALENDAR
它显示了两个具有相同UID但具有不同重复ID的事件实例。当然,这只是每个实例的摘要数据。您可以像这样阅读实例详细信息(在Java中):
NotesCalendarEntry entry = cal.getEntry("A56ADC092EA2323285257C75006B2B3F-Lotus_Notes_Generated");
String instanceOne = entry.read("20140314T130000Z");
String instanceTwo = entry.read("20140315T130000Z");
以上所有假设您可以解析NotesCalendar.readRange()
返回的iCalendar格式。使用像ical4j这样的库在Java中很容易。使用LotusScript有点困难,但值得付出努力。新的NotesCalendar类大量使用iCalendar。