1

我正在使用对 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();

使用这种方法,我可以编辑列表项的基本属性(如名称)。但是,我不能使用它来更新查找字段(例如 Boss 或多个查找员工)。在对象模型中,一切似乎都正常工作并且没有引发异常,但是在更新和保存之后,这些字段在 SharePoint 中只是空白。

4

2 回答 2

1

上面的例子是行不通的。对于单个值查找字段,您需要设置 id 属性。

公司要见老板,你得去

company.BossId = 老板.Id;

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

于 2013-03-22T14:07:45.603 回答
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

于 2013-02-01T03:28:37.967 回答