Как перечислить все свойства файла набора документов с помощью JSOM SharePoint - PullRequest
0 голосов
/ 05 января 2019

Следующий код успешно перебирает все мои файлы в определенной библиотеке документов и выводит имя каждого файла. Однако есть дополнительные свойства (пользовательские свойства / столбцы, которые не являются частью типа содержимого документа), которые мне нужно перечислить. 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>

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Относительно

Я подозреваю, что мне нужно будет передать аргумент Include методу .load ()

Правильно, для извлечения ListItem свойств, связанных с File, вам необходимо указать следующее выражение 'Include(ListItemAllFields)' через SP.ClientContext.load метод , например:

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()); }

0 голосов
/ 09 января 2019

Необходимо добавить в свойство ListItemAllFields .

Скопировано из этого ответа :

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"];
    }
}
...