IBM Domino检索日期范围的重复日历事件

时间:2014-03-13 18:13:19

标签: lotus-domino lotusscript

使用新的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阅读每个复发品并在日期范围内进行测试?有什么想法吗?

1 个答案:

答案 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。