在我的XPage应用程序的Java类中,我试图在Notes视图中处理Notes文档。 Notes视图包含多个Notes文档。要获取我想要的Notes文档,我使用2个键。这会产生错误。如果我只使用一个键,则返回Notes视图中的第一个Notes文档。 Notes视图包含两个排序列。第一列包含empLang值,第二列包含templateType值。这是我的代码:
String empLang = "en";
String templateType = "C";
Database dbCurr = session.getCurrentDatabase();
String viewName = "vieAdminTemplates" + empLang;
View tview = dbCurr.getView(viewName);
Vector viewKey = new Vector();
viewKey.addElement(empLang);
viewKey.addElement(templateType); // this line causes the code to fail
Document templateDoc = tview.getDocumentByKey(viewKey);
造成这个问题的原因是什么?
答案 0 :(得分:1)
一些想法
1)您可以将密钥连接到单个列中,因为您说这有效。类似于' en~C'
2)您可以使用database.search方法,其中包含一个隔离所需文档的公式语言字符串。它返回一个集合,然后从那里拉出文档。
答案 1 :(得分:1)
getDocumentByKey适用于多个列。双打有一个已知问题,但你没有打到那里。突出的一点是第二列只是一个字母。当你执行addElement或视图时,可以将其视为Char而不是String。
我建议调出它们的数据类型。 viewKey.get(1).getClass()。getName()我认为它为你提供了存储的类。对View Column值执行相同操作。
当你说它导致代码失败时,它是如何失败的?它不会返回任何内容或抛出错误吗?
我的下一步是尝试在View和Vector包含多个字符的位置进行测试,例如: “CC”,用于帮助检查Java getDocumentByKey和单个字符是否存在潜在问题。
答案 2 :(得分:0)
我很抱歉。这里的问题是代码中的视图名称不正确。有一个视图" vieAdminTemplates"但它没有第二列包含值" C"。使用正确的视图,代码工作正常。感谢您抽出宝贵时间回答我的问题。