View.getEntryCount()返回1500,但无法按键获取任何文档?

时间:2014-05-27 17:08:41

标签: java lotus-notes lotus-domino

我正在编写一个简单的独立Java类,它使用Lotus Domino的NCSO JAR远程连接到Domino服务器。

我正在建立会话,访问数据库,然后访问视图:

Session session = NotesFactory.createSession("host", "user", "password");
Database db = session.getDatabase(null, "MyDB.nsf");
View view = db.getView("MyView");

现在,我在视图中打印条目数:

int count = view.getEntryCount();

我得到一个非零数字(比方说1500)。

但是,我似乎无法按键加载任何文档。例如,对于字母表中的任何letter,我将通过此调用获得一个空文档集合:

System.err.println(view.getAllDocumentsByKey(letter, false));

当我尝试按键加载文档时,当我知道视图中存在该键时,我得到null

Document document = view.getDocumentByKey("DocKey"); // Equals null even though
                                                     // I know that 'DocKey' is
                                                     // the key of an existing
                                                     // document within the view.

当使用本地Notes调用(使用Notes.jar)时,据说相同的代码正在工作(虽然我没有检查)。

我错过了什么?

修改

我刚注意到session.getNotesVersion()返回版本8.5.2。我当前使用的NCSO.jar文件似乎没有一些随Notes 8添加的方法。因此,我使用的NCSO.jar文件可能属于早期版本Notes比我试图与之沟通的那个。这可能是原因吗?

2 个答案:

答案 0 :(得分:2)

如果相同的代码在本地工作,那么应排除视图的第一列未排序的可能性。假设,那么最可能的问题是文档受ReaderNames字段保护,并且您用于验证会话的标识无权访问文档。

答案 1 :(得分:0)

假设我理解你是对的,你想获得视图的第一个(查找)列包含以特定字母开头的任何内容的所有文档吗? 例如。你发送“A”到veiw.getAllDocumentsByKey()并期望一个包含“Apple”,“Alpha”,“Amoeba”和“Apricot”的集合被退回?

我会修改视图中的列只保留第一个字母: @Left(MyField的; 1) 然后,很容易执行查找,看看你是否得到了正确的结果。