2014-03-13 61 views
1

使用新的Notes 9.x日历功能,但在重复会议中遇到问题。想要列出两个日期时间值之间的所有日历活动,但周期性事件显示第一个活动,但不显示在我的日期范围内的活动。IBM Domino检索日期范围的循环日历事件

程序是这样的:

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找到每个recurid并测试它针对的日期范围?有任何想法吗?

回答

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格式。在Java中使用ical4j这样的库很容易。使用LotusScript有点困难,但这是值得的。新的NotesCalendar类大量使用iCalendar。

+0

谢谢 - 这应该让我再次朝着正确的方向前进。欣赏信息:) – Derek