0

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

我想使用RepositoryIdsession 参数选择一个或另一个,但我总是以 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

3 回答 3

4

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

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

factory.CreateSession(cmisParameters);
于 2012-10-23T12:01:53.173 回答
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;
        }
    }
}
于 2012-10-23T10:21:36.680 回答
0

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

于 2012-10-23T16:05:20.537 回答