2012-10-23 2 views
0

두 개의 CMIS 리포지토리가 포함 된 FileNet p8 서버가 있습니다 (RepoARepoB).FileNet CMIS : ID가 하나만 선택 되어도 두 개의 리포지토리가 반환되었습니다.

내가 하나 또는 RepositoryId 세션 매개 변수를 사용하여 다른를 선택하고 싶지만, 난 항상이 개 저장소로 끝날 :

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

GetRepositories() 메소드는 매개 변수 맵의 저장소 ID를 무시하고 사용 가능한 모든 저장소를 반환합니다. 이는 주어진 엔드 포인트에서 기존 저장소에 대한 정보가없는 경우에 유용합니다.

따라서 대상 저장소의 ID를 알고 있으면 모두 가져올 필요가 없습니다. 이 경우 CreateSession() 메서드를 사용하면됩니다.

factory.CreateSession(cmisParameters); 
0

현재로서는 다음 해결 방법을 사용하고 있습니다.

더 나은 해결책은 대단히 환영합니다! SessionFactory를

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 스펙을 따릅니다.

관련 문제