2012-01-27 6 views
1

다음 오류가 발생합니다.Sharepoint CMIS 커넥터 webservice를 통해 createDocument를 성공적으로 호출하는 방법은 무엇입니까?

서비스 메서드에 대한 하나 이상의 입력 매개 변수가 없거나 잘못되었습니다.

ObjectService.createDocument (repositoryId, objectPropertyCollection, rootFolderId, myContentStream, ObjectService.enumVersioningState.none, NULL, addAclcontrol, NULL, extType REF);

이 호출됩니다.

//Get repositoryId, and rootFolder id. 
string repositoryId = RepositoryStore[contentType]; 
RepositoryService.cmisRepositoryInfoType repoInfo =_controller.RepositoryClient.getRepositoryInfo(repositoryId, new RepositoryService.cmisExtensionType()); 
string rootFolder = repoInfo.rootFolderId; 
string theActualName = filename.Substring(filename.LastIndexOf("\\") + 1); 

//Create a cmisContentStreamType. 
ObjectService.cmisContentStreamType fileStream = new ObjectService.cmisContentStreamType(); 
fileStream.stream = File.ReadAllBytes(filename); 
fileStream.filename = theActualName; 
fileStream.length = fileStream.stream.Length.ToString(); 
fileStream.mimeType = "application/pdf"; 

//Setting the acl objects needed to create the document. 
ObjectService.cmisAccessControlEntryType homeMembers = new ObjectService.cmisAccessControlEntryType(); 
ObjectService.cmisAccessControlEntryType owners = new ObjectService.cmisAccessControlEntryType(); 
ObjectService.cmisAccessControlEntryType viewers = new ObjectService.cmisAccessControlEntryType(); 
ObjectService.cmisAccessControlEntryType visitors = new ObjectService.cmisAccessControlEntryType(); 

ObjectService.cmisAccessControlPrincipalType ownersPrincipalType = new ObjectService.cmisAccessControlPrincipalType(); 
ownersPrincipalType.principalId = @"Home Owners"; 
owners.principal = ownersPrincipalType; 
owners.permission = new string[] { "cmis:all" }; 
ObjectService.cmisAccessControlPrincipalType homePrincipalType = new ObjectService.cmisAccessControlPrincipalType(); 
homePrincipalType.principalId = @"Home Members"; 
homeMembers.principal = homePrincipalType; 
homeMembers.permission = new string[] { "cmis:write" }; 
ObjectService.cmisAccessControlPrincipalType viewersPrincipalType = new ObjectService.cmisAccessControlPrincipalType(); 
homePrincipalType.principalId = @"Viewers"; 
homeMembers.principal = viewersPrincipalType; 
homeMembers.permission = new string[] { "cmis:read" }; 
ObjectService.cmisAccessControlPrincipalType visitorsPrincipalType = new ObjectService.cmisAccessControlPrincipalType(); 
homePrincipalType.principalId = @"Home Visitors"; 
homeMembers.principal = visitorsPrincipalType; 
homeMembers.permission = new string[] { "cmis:read" }; 

ObjectService.cmisAccessControlEntryType[] addAclControl = new ObjectService.cmisAccessControlEntryType[] { homeMembers, owners, viewers, visitors }; 

ObjectService.cmisExtensionType exttype = new ObjectService.cmisExtensionType(); 

ObjectService.cmisPropertiesType objectPropertyArray = MakedocumentPropertiesList(theActualName,fileStream.length); 


private ObjectService.cmisPropertiesType MakedocumentPropertiesList(string fileName,string contentStreamLength) 
{ 
List<ObjectService.cmisProperty> arrProps = new List<ObjectService.cmisProperty>(); 
ObjectService.cmisPropertiesType props = new ObjectService.cmisPropertiesType(); 

arrProps.Add(GetPropertyString("Name", "cmis:name", "mydocuemntname", "FileLeafRef")); 
arrProps.Add(GetPropertyId("cmis:baseTypeId", "cmis:baseTypeId", "cmis:document", "cmis:baseTypeId")); 

props.Items = arrProps.ToArray(); 

return props; 

} 

private ObjectService.cmisPropertyString GetPropertyString(string displayName, string queryName, string value, string localName) 
{ 
ObjectService.cmisPropertyString title = new ObjectService.cmisPropertyString(); 
title.localName = localName; 
title.displayName = displayName; 
title.queryName = queryName; 
title.propertyDefinitionId = displayName; 
title.value = new string[] { value }; 
return title; 
} 

private ObjectService.cmisPropertyId GetPropertyId(string displayName, string queryName, string value, string localName) 
{ 
ObjectService.cmisPropertyId id = new ObjectService.cmisPropertyId(); 
id.localName = localName; 
id.displayName = displayName; 
id.queryName = queryName; 
id.propertyDefinitionId = displayName; 
id.value = new string[] { value }; 
return id; 
} 

답변

1

당신은 "CMIS : baseTypeId"설정할 수 없습니다 : 속성을,하지만 당신은 설정해야합니다 : 속성을 "CMIS는 objectTypeId"이것은 내가 설정에게 그 모든 매개 변수를하는 방법입니다. 두 번째 재산의 이드를 교환 해보십시오.

그 외에도 DotCMIS을 봐야합니다. 그것은 당신에게 많은 일을 줄 수 있습니다.

+0

고마워. 그것은 올바른 방향으로 저를 보냈습니다. 결국 cmisPropertyType을 변경하여 ObjectTypeId 정보가 들어있는 cmisPropertyId와 파일 이름이 포함 된 cmisPropertyString을 하나씩 두 개의 항목으로 변경했습니다. – ascarb

0

내가 코드를 가져다가 나는 그것이 .. 지금은 나를 위해 작동 수정 .. 살펴 :

 string user = txtLogin.Text; 
     string password = txtPwd.Text; 
     DemoCMISForms.RepositoryService.RepositoryServicePortClient repService = new DemoCMISForms.RepositoryService.RepositoryServicePortClient("BasicHttpBinding_IRepositoryServicePort2"); 
     repService.ClientCredentials.UserName.UserName = user; 
     repService.ClientCredentials.UserName.Password = password; 

     DemoCMISForms.ObjectService.ObjectServicePortClient objectService = new DemoCMISForms.ObjectService.ObjectServicePortClient("BasicHttpBinding_IObjectServicePort2"); 

     objectService.ClientCredentials.UserName.UserName = user; 
     objectService.ClientCredentials.UserName.Password = password; 

     //Get repositoryId, and rootFolder id. 

     RepositoryService.cmisRepositoryInfoType repoInfo = repService.getRepositoryInfo(idRep, new RepositoryService.cmisExtensionType()); 
     string rootFolder = repoInfo.rootFolderId; 
     string theActualName = textBox1.Text.Substring(textBox1.Text.LastIndexOf("\\") + 1); 

     //Create a cmisContentStreamType. 
     ObjectService.cmisContentStreamType fileStream = new ObjectService.cmisContentStreamType(); 
     fileStream.stream = File.ReadAllBytes(textBox1.Text); 
     fileStream.filename = theActualName; 
     fileStream.length = fileStream.stream.Length.ToString(); 
     fileStream.mimeType = "text/plain"; 

     //Setting the acl objects needed to create the document. 
     ObjectService.cmisAccessControlEntryType homeMembers = new ObjectService.cmisAccessControlEntryType(); 
     ObjectService.cmisAccessControlEntryType owners = new ObjectService.cmisAccessControlEntryType(); 
     ObjectService.cmisAccessControlEntryType viewers = new ObjectService.cmisAccessControlEntryType(); 
     ObjectService.cmisAccessControlEntryType visitors = new ObjectService.cmisAccessControlEntryType(); 

     ObjectService.cmisAccessControlPrincipalType ownersPrincipalType = new ObjectService.cmisAccessControlPrincipalType(); 
     ownersPrincipalType.principalId = @"Home Owners"; 
     owners.principal = ownersPrincipalType; 
     owners.permission = new string[] { "cmis:all" }; 
     ObjectService.cmisAccessControlPrincipalType homePrincipalType = new ObjectService.cmisAccessControlPrincipalType(); 
     homePrincipalType.principalId = @"Home Members"; 
     homeMembers.principal = homePrincipalType; 
     homeMembers.permission = new string[] { "cmis:write" }; 
     ObjectService.cmisAccessControlPrincipalType viewersPrincipalType = new ObjectService.cmisAccessControlPrincipalType(); 
     viewersPrincipalType.principalId = @"Viewers"; 
     viewers.principal = viewersPrincipalType; 
     viewers.permission = new string[] { "cmis:read" }; 
     ObjectService.cmisAccessControlPrincipalType visitorsPrincipalType = new ObjectService.cmisAccessControlPrincipalType(); 
     visitorsPrincipalType.principalId = @"Home Visitors"; 
     visitors.principal = visitorsPrincipalType; 
     visitors.permission = new string[] { "cmis:read" }; 

     ObjectService.cmisAccessControlEntryType[] addAclControl = new ObjectService.cmisAccessControlEntryType[] { homeMembers, owners, viewers, visitors }; 

     ObjectService.cmisExtensionType exttype = new ObjectService.cmisExtensionType(); 

     ObjectService.cmisPropertiesType objectPropertyArray = MakedocumentPropertiesList(theActualName, fileStream.length); 

     objectService.createDocument(idRep, objectPropertyArray, idFolder, fileStream, ObjectService.enumVersioningState.major, null, addAclControl, null, ref exttype); 
    } 

    private ObjectService.cmisPropertiesType MakedocumentPropertiesList(string fileName, string contentStreamLength) 
    { 
     List<ObjectService.cmisProperty> arrProps = new List<ObjectService.cmisProperty>(); 
     ObjectService.cmisPropertiesType props = new ObjectService.cmisPropertiesType(); 

     arrProps.Add(GetPropertyString(fileName, "cmis:name", fileName, "FileLeafRef")); 
     arrProps.Add(GetPropertyId("cmis:objectTypeId", "cmis:objectTypeId", "cmis:document", "cmis:objectTypeId")); 

     props.Items = arrProps.ToArray(); 

     return props; 

    } 

    private ObjectService.cmisPropertyString GetPropertyString(string displayName, string queryName, string value, string localName) 
    { 
     ObjectService.cmisPropertyString title = new ObjectService.cmisPropertyString(); 
     title.localName = localName; 
     title.displayName = displayName; 
     title.queryName = queryName; 
     title.propertyDefinitionId = displayName; 
     title.value = new string[] { value }; 
     return title; 
    } 

    private ObjectService.cmisPropertyId GetPropertyId(string displayName, string queryName, string value, string localName) 
    { 
     ObjectService.cmisPropertyId id = new ObjectService.cmisPropertyId(); 
     id.localName = localName; 
     id.displayName = displayName; 
     id.queryName = queryName; 
     id.propertyDefinitionId = displayName; 
     id.value = new string[] { value }; 
     return id; 
    } 

내가 복사 붙여 넣기 manip 후 변경되지 않은 일부 변수를 발견! 이 예제를 텍스트 파일과 함께 사용했습니다. 희망이 당신을 도왔습니다!

추신 : 나는 문서 유형의 문제를 처리하지 못했습니다. 텍스트 파일로 예제 functionnal을 만들었습니다. 또한 SP 사이트에서 호출하는 목록의 버전 관리는 문제이므로 이전에 확인해야합니다. 나는 어떤 문서든지 추가한다.

관련 문제