使用C#中的REST更新SharePoint列表项的查找字段

时间:2012-09-18 10:54:26

标签: c# sharepoint rest lookup

我正在使用listdata.svc的服务引用来操作SharePoint列表。我有一份公司名单和人员名单。

我可以像这样操纵数据:

HomeDataContext proxy = new HomeDataContext(new Uri(url + "/_vti_bin/listdata.svc"));
proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
PeopleItem person = proxy.People.Where(p => p.Name.Equals(myName)).First();
PeopleItem boss = proxy.People.Where(p => p.Name.Equals(bossName)).First();
CompaniesItem company= proxy.Companies.Where(c => c.ID.Equals(companyName)).First();
company.Employees.Add(person);
company.Boss = boss;
company.Name = "New Name";
proxy.UpdateObject(company);
proxy.SaveChanges();

使用这种方法,我可以编辑我的列表项的基本属性(如Name)。但是,我不能使用它来更新查找字段(如Boss或多个查找Employees)。在对象模型中,它似乎都可以工作,不会抛出任何异常,但在更新和保存后,SharePoint中的字段只是空白。

2 个答案:

答案 0 :(得分:1)

以上示例不起作用。对于单值查找字段,您需要设置id属性。

要让公司了解老板你需要去看看

company.BossId = boss.Id;

上面的示例不会将更改写入sharepoint列表,您需要使用查找字段来设置Id属性。

答案 1 :(得分:0)

如果人员项目已经存在于sharepoint中,而您只是想在公司中添加它而不是您可以使用:

HomeDataContext proxy = new HomeDataContext(new Uri(url + "/_vti_bin/listdata.svc"));
proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
PeopleItem person = proxy.People.Where(p => p.Name.Equals(myName)).First();
PeopleItem boss = proxy.People.Where(p => p.Name.Equals(bossName)).First();
CompaniesItem company= proxy.Companies.Where(c => c.ID.Equals(companyName)).First();
//company.Employees.Add(person);
company.Boss = boss;
company.Name = "New Name";
proxy.UpdateObject(company);
proxy.SaveChanges();
//To remove employee from company
proxy.DeleteLink(company, "Employee", person);
proxy.SaveChanges();
//To Add person as employee
proxy.AddLink(company,"Employee",person);
proxy.SaveChanges();

您还可以查看proxy.AddRelatedObject()方法来同时创建新人和链接。有关这些方法的更多信息:  http://msdn.microsoft.com/en-us/library/system.data.services.client.dataservicecontext.aspx