尝试使用引用Microsoft.Sharepoint.Client添加新列表项时出现问题

时间:2015-03-11 17:43:32

标签: c# winforms sharepoint sharepoint-2013

我正在尝试使用winforms C#应用程序将新项目添加到Sharepoint列表中,但是我收到错误,好像应用程序没有找到列表字段。

我的代码:

using SPC = Microsoft.SharePoint.Client;

(...)

string siteUrl = "https://sharepoint.company.com/sites/ProjectX";

SPC.ClientContext clientContext = new SPC.ClientContext(siteUrl);

string userName = "someone.surname";
SecureString password = new SecureString();
foreach (char c in "MyPaSsWoRd".ToCharArray()) password.AppendChar(c);
clientContext.Credentials = new NetworkCredential(userName, password, "MyDomain");

SPC.Web web = clientContext.Web;
clientContext.Load(web);
clientContext.ExecuteQuery();

SPC.List oList = web.Lists.GetByTitle("List Y");
clientContext.Load(oList);
clientContext.ExecuteQuery();

SPC.ListItemCreationInformation listCreationInformation = new SPC.ListItemCreationInformation();

SPC.ListItem oListItem = oList.AddItem(listCreationInformation);

oListItem["field 1"] = "a";
oListItem["field 2"] = "b";
oListItem["user"] = "someone.surname";
oListItem["date 1"] = "01/01/2015";
oListItem["field 3"] = "99";

oListItem.Update();
clientContext.ExecuteQuery();

在最后一个代码行中出现错误:

  

列'字段1'不存在。它可能已被另一个删除   用户。 /位点/ projectX创建/列表/ List_Y

任何提示?

PS:是的,“列表Y”上有一个名为“字段1”的字段。

谢谢!

1 个答案:

答案 0 :(得分:0)

我发现问题的原因是:我使用了字段的“显示名称”,但我需要使用“内部名称”。

所以我在列表设置中检查了字段的内部名称,然后我在代码的这一部分使用了:

oListItem["field 1"] = "a";
oListItem["field 2"] = "b";
oListItem["user"] = "someone.surname";
oListItem["date 1"] = "01/01/2015";
oListItem["field 3"] = "99";

例如,字段“字段1”的内部名称是“f1”; “字段2”的内部名称是“f2”;字段“日期1”的内部名称是“date_1”;等等...

因此,当我将显示名称更改为内部名称(在“oListItem [”...“])时,错误消息”列'字段1'不存在“不再发生,因为字段现在找到了。

此时我必须做的其他改变是:

oListItem["user"] = "someone.surname";

这种方法不起作用(直接设置用户名)。我不得不使用变量来获取当前用户。这样:

oListItem["user"] = oUser.Id.ToString();

“oUser”变量是:

SPC.User oUser = oWeb.CurrentUser;
clientContext.Load(oUser);
clientContext.ExecuteQuery();

就是这样!现在好了:)谢谢大家!