0

МыSharePoint JSOM: получить SPFolder значение настраиваемого поля

  1. SharePoint 2013 Библиотека документов
  2. типа контента добавляются в библиотеку, на основе стандартного «Папка» тип контента; новое «DisplayName» текстовое поле добавлено к типу контента
  3. несколько папок этого типа пользовательского контента были созданы в библиотеке документов

Я пытаюсь сделать контроль JavaScript, чтобы визуализировать структуру папок из библиотеки. Но я не могу получить значение поля «DisplayName»

this.clientContext = SP.ClientContext.get_current(); 

var web = this.clientContext.get_web(); 
this.clientContext.load(web); 

this.clientContext.executeQueryAsync(function(sender, args) { 

    for (var i = 0; i < this.topLevelFoldersUrl.length; i++) { 

     var contextParams = {}; 

     contextParams.folderUrl = web.get_serverRelativeUrl() + "/" + this.topLevelFoldersUrl[i]; 

     // folder 
     contextParams.topLevelFolder = web.getFolderByServerRelativeUrl(contextParams.folderUrl); 
     this.clientContext.load(contextParams.topLevelFolder, 'Include(DisplayName)'); 

     // folder list item 
     contextParams.folderListItem = contextParams.topLevelFolder.get_listItemAllFields(); 
     this.clientContext.load(contextParams.folderListItem); 

     // subfolders 
     contextParams.folderCollection = contextParams.topLevelFolder.get_folders(); 
     this.clientContext.load(contextParams.folderCollection); 

     this.clientContext.executeQueryAsync(

      function (sender, args) { 

       var folderName = contextParams.topLevelFolder.get_name(); 

       // EXCEPTION goes here: "property has not been initialized" 
       var folderDisplayName = contextParams.folderListItem.get_item("DisplayName"); 

       // visualization code... 

      }, 
      this.onQueryFailed 
     ); 
    } 
}, this.onQueryFailed); 

Есть ли специальная техника для получения пользовательских полей в папке? Я искал все образцы кода для получения элементов списка и их настраиваемых полей, но образцы не работают в моем случае.

ответ

1

«DisplayName» представляется зарезервированным идентификатором в JSOM SharePoint 2013. После изменения имени поля на «ShownName» мой код работал:

this.clientContext = SP.ClientContext.get_current(); 

var web = this.clientContext.get_web(); 
this.clientContext.load(web); 

this.clientContext.executeQueryAsync(function (sender, args) { 

    for (var i = 0; i < this.topLevelFoldersUrl.length; i++) { 

     var contextParams = {}; 

     contextParams.folderUrl = web.get_serverRelativeUrl() + "/" + this.topLevelFoldersUrl[i]; 

     contextParams.topLevelFolder = web.getFolderByServerRelativeUrl(contextParams.folderUrl); 
     this.clientContext.load(contextParams.topLevelFolder); 

     contextParams.folderListItem = contextParams.topLevelFolder.get_listItemAllFields(); 
     this.clientContext.load(contextParams.folderListItem, 'ShownName'); 

     contextParams.folderCollection = contextParams.topLevelFolder.get_folders(); 
     this.clientContext.load(contextParams.folderCollection);       

     this.clientContext.executeQueryAsync(

      function(sender, args) { 

       var folderName = folder.get_name(); 
       var folderDisplayName = folderItem.get_item("ShownName"); 

       // visualization code... 
      }, 
      this.onQueryFailed 
     ); 
    } 
}, this.onQueryFailed);