2012-10-23 23 views
0

我有一个FileNet p8服务器,其中包含2个CMIS存储库:RepoARepoBFileNet CMIS:尽管选择了一个ID,但返回了两个存储库

我想选择一个或使用RepositoryId会话参数其他,但我总是与2个库结束:

var cmisParameters = new Dictionary<string, string>(); 
cmisParameters[SessionParameter.BindingType] = BindingType.AtomPub; 
cmisParameters[SessionParameter.AtomPubUrl] = "myurl"; 
cmisParameters[SessionParameter.User] = "myuser"; 
cmisParameters[SessionParameter.Password] = "mypassword"; 
cmisParameters[SessionParameter.RepositoryId] = "RepoB"; 

SessionFactory factory = SessionFactory.NewInstance(); 
IList<IRepository> repositories = factory.GetRepositories(cmisParameters); 
foreach (var repository in repositories) 
{ 
    Console.WriteLine(repository.Id); 
} 

的输出是:

RepoA 
RepoB 

予指定的RepositoryId所以我认为输出应该只有RepoB

它是一个已知的FileNet错误?或者我错过了什么?

回答

4

SessionFactory的GetRepositories()方法忽略参数映射的存储库ID并返回所有可用的存储库。如果您没有关于给定端点上现有存储库的信息,这很有用。

因此,如果您知道目标存储库的ID,则无需全部获取它们。在这种情况下,您可以简单地使用CreateSession()方法。

factory.CreateSession(cmisParameters); 
0

现在我只是使用下面的解决方法。

任何更好的解决方案非常欢迎!

IList<IRepository> repositories = factory.GetRepositories(cmisParameters); 
IRepository repository = null; 
// Get the repository. 
if (repositories.Count == 1) 
{ 
    // Normal case 
    repository = factory.GetRepositories(cmisParameters)[0]; 
} 
else 
{ 
    // Workaround for FileNet 
    Console.WriteLine("Sync", "Unexpected nb of repos: " + repositories.Count); 
    string repositoryId = cmisParameters[SessionParameter.RepositoryId]; 
    foreach (IRepository potentialRepository in repositories) 
    { 
     if(potentialRepository.Id.Equals(repositoryId)) 
     { 
      repository = potentialRepository; 
     } 
    } 
} 
0

有多个存储库实际上是正常情况。仅暴露一个存储库的端点是例外情况。 FileNet遵循CMIS规范。

相关问题