如何使用WCF / Rest Web服务更新sharepoint中的多选字段?

时间:2013-05-24 12:31:43

标签: wcf api rest sharepoint service

我一直在网上寻找这个4天,我仍然不知道为什么我的代码无效...

我正在使用ASP.NET MVC 4应用程序,其中包含对sharepoint listData的服务引用以便CRUD数据。

以下是我检索DataContext的方法:

        var datacontext = new CogniTICDataContext(new Uri("http://my.service.url/_vti_bin/listdata.svc"));

        datacontext.IgnoreResourceNotFoundException = true;
        datacontext.Credentials = new NetworkCredential("user", "pass", "Domain");

        datacontext.MergeOption = MergeOption.OverwriteChanges;

        return datacontext;

完全适用于单个和多个查找字段。但是对于多选领域,没有任何工作。

以下是我正在尝试的内容:

           foreach (string domComp in jsonDomComp.Split(';'))
                {
                    PrestatairesFormationsDomaineDeCompétencesValue domaineDeCompetence =
                        PrestatairesFormationsDomaineDeCompétencesValue
                            .CreatePrestatairesFormationsDomaineDeCompétencesValue(domComp);
                    prestataire.DomaineDeCompétences.Add(domaineDeCompetence);

                    //dc.AttachTo("DomainesDeCompétence", domaineDeCompetence);
                    //dc.AddLink(prestataire, "DomComp", domaineDeCompetence);
                }
            //SaveChanges in batch mode
            dc.UpdateObject(prestataire);
            dc.SaveChanges(System.Data.Services.Client.SaveChangesOptions.Batch);

我评论了AttachTo和AddLink,因为我的“DomaineDeCompétences”不是实体!它不是一个多查找字段,我无权改变它。虽然,如果我尝试添加这两行,我有一个ResourceNotFoundException,因为该实体没有id,这是因为它不是一个实体! (我已经尝试过:dc.IgnoreResourceNotFoundException = true;)

我没有错误,它只是不起作用......任何人都可以帮助我吗?

祝你好运, 弗拉维奥

2 个答案:

答案 0 :(得分:1)

而不是使用

prestataire.DomaineDeCompétences = ...

只需使用

prestataire.DomaineDeCompétencesValue = domComp 

你可以直接分配字符串。

答案 1 :(得分:-1)

请在SO上查看类似的问题

SP 2013 - Updating a multi-value lookup field via the REST API

Updating Lookup Values with the REST API

也可能:

MyListService.Credentials = CredentialCache.DefaultCredentials;
MyListService.Url = "http://yourserver/_vti_bin/lists.asmx";

XmlDocument updateRequest = new XmlDocument();

String updateBatch = "<Batch OnError='Continue'>" +
                        "<Method ID='1' Cmd='Update'>" +
                        "<Field Name='ID'>2</Field>" +
                        "<Field Name='Location'>1;#;#2</Field>" +
                        "<Field Name='Owners'>1;#;#7</Field>" +
                        "<Field Name='Choices'>Value1;#Value2</Field>" +
                        "</Method>" +
                        "</Batch>";

updateRequest.LoadXml(updateBatch);

XmlNode deleteResult = MyListService.UpdateListItems("Tasks", updateRequest.DocumentElement);