0

2つのCMISリポジトリを含むFileNetp8サーバーがあります: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バグですか?それとも私は何かが足りないのですか?

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

複数のリポジトリがあるというのは、実際には通常のケースです。1つのリポジトリのみを公開するエンドポイントは例外です。FileNetはここのCMIS仕様に従います。

于 2012-10-23T16:05:20.537 に答える