我有一个FileNet p8服务器,其中包含2个CMIS存储库:RepoA
和RepoB
。
我想使用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错误吗?或者我错过了什么?
答案 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规范。