我正在获取给定两个日期的会议:例如,获取当前月份的所有会议。
假设我在指定期间有大约 45 次会议。我的网络服务需要很多时间。这就是我现在的做法:
我在日历视图中获取所有文档。
检查所有文件的开始日期和结束日期。
如果任何会议都在指定的时间段内,我正在构建一个数组并返回该数组。
这个对吗?
我正在获取给定两个日期的会议:例如,获取当前月份的所有会议。
假设我在指定期间有大约 45 次会议。我的网络服务需要很多时间。这就是我现在的做法:
我在日历视图中获取所有文档。
检查所有文件的开始日期和结束日期。
如果任何会议都在指定的时间段内,我正在构建一个数组并返回该数组。
这个对吗?
这种方式是正确的,但效率很低。更好地使用 NotesDatabase- 类并创建一个与 search- 方法一起使用的查询:这里是 LotusScript 中的示例(因为您没有指定语言)
Dim ses as New NotesSession
Dim db as NotesDatabase
Dim dc as NotesDocumentCollection
Dim strQuery as String
Set db = ses.CurrentDatabase
strQuery = {Form = "Appointment" & _
(StartDate >= [01.01.2014] & StartDate < [01.02.2014]) | _
(EndDate >= [01.01.2014] & EndDate < [01.02.2014])}
Set dc = db.Search( strQuery , Nothing, 0 )
'- Cycle through this collection...
当然,您需要通过从今天开始构建它来动态调整 strQuery ...但这将比您的版本性能更高。
如果您使用的是 Notes/Domino 9.0 或更高版本,则应使用内置日历类。这些可以从 LotusScript 或 Java 获得。这是一个使用 Java 的示例。给定一个数据库对象和一个日期范围,它会打印该范围内的所有条目:
private static void printRange(Database database, DateTime start, DateTime end) throws NotesException {
// Get the calendar object from the database
NotesCalendar calendar = database.getParent().getCalendar(database);
if ( calendar != null ) {
// Get a list of calendar entries
Vector<NotesCalendarEntry> entries = calendar.getEntries(start, end);
if ( entries != null ) {
// For each entry ...
Iterator<NotesCalendarEntry> iterator = entries.iterator();
while (iterator.hasNext()) {
NotesCalendarEntry entry = iterator.next();
// Read the iCalendar representation
String icalendar = entry.read();
// Get the Notes UNID
Document doc = entry.getAsDocument();
String unid = doc.getUniversalID();
// Print UNID and iCalendar to console
System.out.println("Entry UNID: " + unid);
System.out.println(icalendar);
}
}
}
}
NotesCalendar 和 NotesCalendarEntry 接口位于 lotus.domino 包中。如果您使用的是 LotusScript,则存在同名且具有相同方法的类。
关于上述代码的几个警告:
这是正确的,但当您有很多文档时性能不是很好。基本上,您将创建一个视图,其中第一列是会议(开始)日期,已排序。在 LotusScript 中,您可以访问视图,设置与开始日期匹配的第一次会议的“光标”,然后逐步浏览视图,直到到达结束日期之后的日期。
阅读 view 的 GetDocumentByKey 方法。进一步在这里:http: //publib.boulder.ibm.com/infocenter/domhelp/v8r0/index.jsp ?topic=%2Fcom.ibm.designer.domino.main.doc%2FH_LOCATING_DOCUMENTS_WITHIN_A_VIEW_OR_FOLDER.html
嗯……再想一想,如果你有一个开始日期但没有匹配的会议会发生什么……所以请参考 FTSearch() 方法。