FileNet CMIS:尽管通过id选择了一个存储库,但仍返回了两个存储库

时间:2012-10-23 09:53:47

标签: cmis filenet-p8 filenet

我有一个FileNet p8服务器,其中包含2个CMIS存储库:RepoARepoB

我想使用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错误吗?或者我错过了什么?

3 个答案:

答案 0 :(得分:4)

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

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

factory.CreateSession(cmisParameters);

答案 1 :(得分: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;
        }
    }
}

答案 2 :(得分:0)

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