简体   繁体   English

如何通过Sharepoint CMIS连接器Web服务成功调用createDocument?

[英]How does one successfully call createDocument through the Sharepoint CMIS connector webservice?

I'm getting the following error: 我收到以下错误:

One or more of the input parameters to the service method is missing or invalid. 服务方法的一个或多个输入参数丢失或无效。

when 什么时候

ObjectService.createDocument(repositoryId, objectPropertyCollection, rootFolderId, myContentStream, ObjectService.enumVersioningState.none, null, addAclcontrol, null, ref extType); ObjectService.createDocument(repositoryId,objectPropertyCollection,rootFolderId,myContentStream,ObjectService.enumVersioningState.none,null,addAclcontrol,null,ref extType);

is called. 叫做。 This is how I have setup all of those parameters: 这就是我设置所有这些参数的方式:

//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;
}

You cannot set the "cmis:baseTypeId" property, but you have to set the "cmis:objectTypeId" property. 您不能设置“ cmis:baseTypeId”属性,但是必须设置“ cmis:objectTypeId”属性。 Try exchanging the id of your second property. 尝试交换第二个属性的ID。

Apart from that, you should have a look at DotCMIS . 除此之外,您还应该看看DotCMIS It could save you a lot of work. 它可以节省您很多工作。

I took your code and I correct it .. now it is functional for me .. take a look : 我拿了你的代码,我更正了..现在它对我来说是可以使用的..

        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;
    }

I found some variables that were left unchanged after a copy paste manip! 我发现在复制粘贴操作后,一些变量保持不变! I also used this example with a text file ! 我还将这个示例与文本文件一起使用! Hope I helped you! 希望我能帮到您!

PS: I didnt handle yet the problem of document types , i just made the example functionnal with Text files.. Also the versionning in the list I'm calling from the SP Site is an issue so i have to verify before I add any document.. PS:我还没有处理文档类型的问题,我只是用文本文件制作了示例函数。.此外,我从SP网站调用的列表中的版本控制也是一个问题,因此我必须在添加任何文档之前进行验证..

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM