【问题标题】:How to Enumerate All Document Set File Properties Using the SharePoint JSOM如何使用 SharePoint JSOM 枚举所有文档集文件属性
【发布时间】:2019-01-05 05:43:51
【问题描述】:

下面的代码成功地遍历了我在特定文档库中的所有文件,并输出了每个文件的名称。但是,我需要枚举其他属性(不属于 Document 内容类型的自定义属性/列)。 get_item() 不是 SP.File 类型的有效方法,所以我不能只传递我正在寻找的属性名称。我怀疑我需要将 Include 参数传递给 .load() 方法,但我没有成功,因为它错误地告诉我我包含的属性名称不存在。

  <script src="https://ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js"></script>
  <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js"></script>
  <script>
    // Load the required SharePoint libraries.
    $(function () {
      var ctx = null;
      var collListItem = null;

      // Function to retrieve a query string value.
      // For production purposes you may want to use
      // a library to handle the query string.
      function getQueryStringParameter(paramToRetrieve) {
        var params =
          document.URL.split("?")[1].split("&amp;");
        var strParams = "";
        for (var i = 0; i < params.length; i = i + 1) {
          var singleParam = params[i].split("=");
          if (singleParam[0] == paramToRetrieve)
            return singleParam[1];
        }
      }

      // Get the URI decoded URLs.
      hostweburl = decodeURIComponent(getQueryStringParameter("SPHostUrl"));

      // The js files are in a URL in the form: web_url/_layouts/15/resource_file
      var scriptbase = hostweburl + "/_layouts/15/";

      // Load the js files and continue to the execOperation function.
      $.getScript(scriptbase + "SP.Runtime.js",
        function () {
          $.getScript(scriptbase + "SP.js", mainFunction);
        }
      );

      var siteUrl = "https://company.sharepoint.com/sites/theSite";
      var docSetUrl = "https://company.sharepoint.com/sites/theSite/docLibraryName/docSetName";
      var ctx = null;
      var files = null;

      function mainFunction() {
        getFiles(docSetUrl);
      }

      function getFiles(folderUrl) {
        ctx = new SP.ClientContext(siteUrl);
        files = ctx.get_web().getFolderByServerRelativeUrl(folderUrl).get_files();
        ctx.load(files);
        ctx.executeQueryAsync(success, error);
      }

      function success() {
        console.log("success");
        for (var i = 0; i < files.get_count(); i++) {
          var file = files.get_item(i);
          console.log(file.get_name());
        }
      }

      function error(sender, args) {
        console.log("error");
        console.log(args.get_message());
      }

    });
  </script>

【问题讨论】:

    标签: sharepoint-online sharepoint-jsom document-set


    【解决方案1】:

    您需要添加ListItemAllFields 属性。

    复制自this answer:

    using (ClientContext spClientContext = new ClientContext("http://whatever"))
    {
        var rootweb = spClientContext.Web;
    
        FolderCollection folderCollection =
            rootweb.GetFolderByServerRelativeUrl("/Shared Documents/test2").Folders;
    
        // Don't just load the folder collection, but the property on each folder too
        spClientContext.Load(folderCollection, fs => fs.Include(f => f.ListItemAllFields));
    
        // Actually fetch the data
        spClientContext.ExecuteQuery();
    
        foreach (Folder folder in folderCollection)
        {
            // This property is now populated
            var item = folder.ListItemAllFields;
    
            // This is where the dates you want are stored
            var created = (DateTime)item["Created"];
            var modified = (DateTime)item["Modified"];
        }
    }
    

    【讨论】:

      【解决方案2】:

      关于

      我怀疑我需要将 Include 参数传递给 .load() 方法

      没错,要检索与File 关联的ListItem 属性,您需要通过SP.ClientContext.load method 指定以下表达式'Include(ListItemAllFields)',例如:

      ctx.load(files,'Include(ListItemAllFields)');    
      

      示例

      function getFiles(folderUrl) {
         var ctx = new SP.ClientContext(siteUrl);
         var files = ctx.get_web().getFolderByServerRelativeUrl(folderUrl).get_files();
         ctx.load(files,'Include(Name,ListItemAllFields)');
         ctx.executeQueryAsync(()=>{
      
            files.get_data().forEach(file =>{
      
               console.log(file.get_name()); //print file name
               console.log(file.get_listItemAllFields().get_fieldValues()); //print list item properties
      
            })
      
         },logError);
      }
      
      
      function logError(sender, args) {
         console.log(args.get_message());
      }
      

      【讨论】:

        猜你喜欢
        • 2011-10-30
        • 1970-01-01
        • 1970-01-01
        • 2011-06-15
        • 2017-11-13
        • 2013-10-28
        • 1970-01-01
        • 2012-03-14
        • 1970-01-01
        相关资源
        最近更新 更多