【问题标题】:Update Modified field in Office 365更新 Office 365 中的已修改字段
【发布时间】:2015-05-07 06:27:18
【问题描述】:

有没有办法更新 Office 365 中的已修改字段?我已经检查了 CSOM 和批量更新方法。但它失败了。谁能帮我更新这个字段。

【问题讨论】:

    标签: sharepoint office365 csom


    【解决方案1】:

    在尝试为列表项设置ModifiedCreatedEditorAuthor 字段之前,您需要禁用列表中的几个属性,特别是EnableVersioning 和@987654328 @。

    SharePoint Online 先决条件是 SharePointOnline CSOM:

    .NET client API reference for SharePoint Online

    Nuget - Microsoft.SharePointOnline.CSOM

    using (var context = new ClientContext(webUrl))
    {
        context.Credentials = new SharePointOnlineCredentials(userName,password);
        var list = context.Web.Lists.GetByTitle(listTitle);
        var item = list.GetItemById(itemID);
        var user = context.Web.EnsureUser(accountName);
        context.Load(user);
        context.Load(list);
        context.Load(item);
        context.ExecuteQuery();
    
        // If the properties are enabled on the list then disable them
        bool updateList = list.ForceCheckout || list.EnableVersioning;
        if (list.ForceCheckout) list.ForceCheckout = false;
        if (list.EnableVersioning) list.EnableVersioning = false;
        if (updateList)
        {
            list.Update();
            context.ExecuteQuery();
        }
    
        // Now set the fields that are normally locked
        item["Modified"] = DateTime.Now;
        item["Created"] = DateTime.Now.AddDays(-3);
        item["Author"] = user.Id;
        item["Editor"] = user.Id;
    
        item.Update();
        context.ExecuteQuery();
    }
    

    【讨论】:

      【解决方案2】:

      SharePoint CSOM API 不支持系统更新(SSOM API 对应的SystemUpdate method),但您可以直接操作Modified ByModified 等系统字段,如下所示。

      先决条件:SharePoint Server 2013 Client Components SDK

      using (var ctx = GetContext(webUri, userName, password))
      {
          //get List Item
          var list = ctx.Web.Lists.GetByTitle(listTitle);
          var item = list.GetItemById(itemId);
          //Retrieve User
          var user = ctx.Web.EnsureUser(accountName);
          ctx.Load(user);
          ctx.ExecuteQuery();
          //Update system fields
          item["Modified"] = DateTime.Now.AddMonths(-6);
          item["Created"] = DateTime.Now.AddYears(-1);
          item["Editor"] = user.Id;
          item["Author"] = user.Id;
          item.Update();
          ctx.ExecuteQuery();
      }
      

      在哪里

      public static ClientContext GetContext(Uri webUri, string userName, string password)
      {
          var securePassword = new SecureString();
          foreach (var ch in password) securePassword.AppendChar(ch);
          return new ClientContext(webUri) { Credentials = new SharePointOnlineCredentials(userName, securePassword) };
      }
      

      【讨论】:

        【解决方案3】:

        SharePoint CSOM API 现在支持使用 UpdateOverwriteVersion 方法进行系统更新。这样,您可以修改 Modified、Created、Author 和 Editor 属性,而无需更改项目版本。例如:

                $file = Get-PnPFile -Url $FileUrl -AsListItem 
                ##update file properties 
                $item["Modified"] = $FileModifiedDate
                $item["Created"] = $FileCreatedDate 
                $item["Author"] = $FileCreatedByDest.ID 
                $item["Editor"] = $FileModifiedByDest.ID 
                $fileTest2.UpdateOverwriteVersion()
                Invoke-PnPQuery
        

        这应该可以解决问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-17
          • 1970-01-01
          • 1970-01-01
          • 2013-08-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多