我在SharePoint Online中有一个非常简单的文档库:
mysite.sharepoint.com/site/Documents
我在库上添加了一个库列,它是允许的多选项。
这些文件有多个主题:
Document1.docx : Maths, Science, Internet
Document2.docx : Maths, Other, Science
我想在控制台中使用该列上的值重新列出每个项目,并替换其中一个值。
我想替换"数学"主题为"数学"使用一些C#代码和CSOM。
这是我的代码。当只有一个值时,它可以工作,但是当为文档选择了多个主题时,它似乎是空的。
我试图施放,但它似乎返回了一个对象数组,而且它不可枚举。
ClientContext context = newClientContext("https://mysite.sharepoint.com/site/");
Web web = context.Web;
List list = context.Web.Lists.GetByTitle("Documents");
CamlQuery query = new CamlQuery();
query.ViewXml = @"<View Scope='Recursive' />";
ListItemCollection items = list.GetItems(query);
context.Load(list);
context.Load(items);
context.ExecuteQuery();
foreach (ListItem item in items)
{
if ( item["Subjects"] != null && ((item["Subjects"]).ToString()).Contains("Maths")){
Console.WriteLine(item.Id + " - " + item["Subjects"]);
item["Subjects"] = "Mathematics";
item.Update();
context.ExecuteQuery();
}
}
结果应为:
Document1.docx : Mathematics, Science, Internet
Document2.docx : Mathematics, Other, Science
答案 0 :(得分:0)
我设法通过将主题转换为字符串数组来循环主题:
var subjects= (string[])item["Subjects"];
foreach (var subject in subjects)
{
Console.WriteLine(subject);
}
我可以构建一个数组并更新值:
string[] newValues = { "Mathematics", "123" };
item["Subjects"] = newValues ;
答案 1 :(得分:0)
您可以从同一列表的ItemAdded事件接收器向SharePoint列表的现有选项字段列添加值。她去吧!!!!!
string newPartitionName = Convert.ToString(properties.ListItem["Title"]); // current item
using (SPSite site = new SPSite(RBSSiteURL))
{
using (SPWeb web = site.OpenWeb())
{
SPSecurity.RunWithElevatedPrivileges(delegate
{
web.AllowUnsafeUpdates = true;
SPList spList = web.Lists["Room List"];
SPFieldMultiChoice spChoiceField = (SPFieldMultiChoice)spList.Fields["Select Partitions"];
spChoiceField.AddChoice(newPartitionName);
spChoiceField.Update();
spList.Update();
web.AllowUnsafeUpdates = false;
});
}
}
如果找到项目的解决方案,请标记为答案。 快乐的SHAREPOINTING .....