【问题标题】:Get mulitple values in a library column for each list items in Sharepoint with CSOM使用 CSOM 在 Sharepoint 中为每个列表项获取库列中的多个值
【发布时间】:2017-09-13 13:57:10
【问题描述】:

我在 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

【问题讨论】:

    标签: c# sharepoint csom


    【解决方案1】:

    我设法通过将主题转换为字符串数组来循环主题:

                    var subjects= (string[])item["Subjects"];
                    foreach (var subject in subjects)
                    {
                        Console.WriteLine(subject);
                    }
    

    在我可以构建一个数组并更新值之后:

                string[] newValues = { "Mathematics", "123" };
                item["Subjects"] =  newValues ;
    

    【讨论】:

      【解决方案2】:

      您可以从同一列表的 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;
                                  });
                              }
                          }
      

      如果您找到适合您项目的解决方案,请标记为答案。 分享快乐.....

      【讨论】:

        猜你喜欢
        • 2018-01-03
        • 2020-05-06
        • 2020-11-07
        • 2019-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-03
        • 1970-01-01
        相关资源
        最近更新 更多