从names.nsf目录中检索拒绝访问组成员

时间:2013-01-09 06:42:15

标签: java lotus-notes lotus-domino

我正在使用Lotus Notes版本8.5.2 ..我对lotus.domino java API相对较新。我需要检索Deny Access Group中的成员并将其放入文件中。如何使用API​​提供的访问成员...?在这方面的任何帮助表示赞赏..

我从答案中得到了以下代码。让我知道我是否朝着正确的方向前进。

lotus.domino.Document fDoc = null;
lotus.domino.Database fDb = null;
lotus.domino.View view = null;

fDb = NotesSess.getDatabase(sServerName, "names.nsf");
view = fDb.getView("DenyLists");
fDoc = view.getFirstDocument();
 while(fDoc != null)
   {
      java.util.Vector fItems = fDoc.getItems();
      for(int iCnt=0 ; iCnt < fItems.size();iCnt++)
          {
            lotus.domino.Item fItem = (Item) fItems.elementAt(iCnt);
                 if(fItem.getName()== "Members")
                      {
                         Vector fItemValues = fItem.getValues();
                         int fNumValues = fItemValues.size();
                         String fValueStr = null ;
                         for(int ii=0 ;ii < fNumValues ;ii++)
                           fValueStr = (String) fItemValues.elementAt(ii);
                        }
            }
    }

我会在变量fValueStr中找到成员吗?

2 个答案:

答案 0 :(得分:3)

可以在大多数服务器上的help\help85_designer.nsf本地找到Notes对象引用。 可以在此处找到Web版本(包含大量示例代码):http://publib.boulder.ibm.com/infocenter/domhelp/v8r0/index.jsp?topic=%2Fcom.ibm.designer.domino.api.doc%2Fr_domino_Database.html

这是一些伪代码:

我已经假设你已经初始化了NotesSession对象。

  1. 在服务器上打开names.nsf并将其分配给NotesDatabase对象。
  2. 获取视图DenyLists并将其分配给NotesView对象。
  3. 遍历视图将每个新文档分配给NotesDocument对象。
  4. 您要从拒绝访问组文档获取的NptesItem是成员,它包含用户列表或嵌套组。

答案 1 :(得分:0)

如@ PanuHaaramo评论中所述,您的代码是无限循环。如果在DenyLists视图中只有一个Group文档,那么while循环是不必要的,所以只需删除它。如果可能有多个,则保持while循环,但在结束之前添加fDoc = view.getNextDocument(fDoc)。

Panu也是正确的,你真正让自己变得更加困难。您可以使用getItemValue(“Members”)代替使用getItems()并循环遍历结果,这将返回字符串向量。

此外,如果您打算运行代码的环境可能在“拒绝访问”列表中使用嵌套组,那么您将需要编写其他代码来测试每个String以查看它是用户还是组 - 并且代码(递归地,因为拒绝列表中的组也可以包含组)访问任何嵌套组并获取其成员。