2017-01-14 1 views
2

Набор документов Домашняя страница:Sharepoint 2013 документ на домашнюю страницу получить документы с Rest API

1

Я использую Angularjs и REST API для получения документов на мой SharePoint 2013 набор документов домашней странице для дополнительного functionaity. Приведенный ниже код работает, если я предоставляю имя списка и папки («AD% 20Letters/Liquidity% 20Risk% 20Management»), но у меня есть более одной папки с набором документов и вам нужно динамически получать имена списков и папок («+» ListName/FolderName + "') для каждой папки набора документов, чтобы она отображалась в документе Set Home с документами и другими метаданными. Прикрепление скриншота о том, как отображается Домашняя страница набора документов с приведенным ниже кодом, но только для папки управления рисками ликвидности, в которой я указываю имена. Какие-либо предложения.

<script type="text/javascript"> 
       var myAngApp = angular.module('SharePointAngApp', []); 
      myAngApp.controller('spCustomerController', function ($scope, $http) { 
       $http({ 
        method: 'GET', 
        url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/getfolderbyserverrelativeurl('AD%20Letters/Liquidity%20Risk%20Management')/files?$expand=ListItemAllFields/FieldValuesAsText 
       }).success(function (data, status, headers, config) { 
        $scope.customers = data.d.results; 
       }).error(function (data, status, headers, config) { 
      }); 
      });  
</script> 

     <h1> Policy Documents</h1> 

     <div ng-app="SharePointAngApp" class="row"> 
      <div ng-controller="spCustomerController" class="span10"> 
       <table class="table table-condensed table-hover"> 
        <tr> 
         <th>ID</th> 
         <th>File Type</th> 
         <th>Title</th> 
         <th>Project Phases</th> 
         <th>Due Date for Comments</th> 
         <th>Policy Type</th> 
         <th>Author</th>  
        </tr> 
        <tr ng-repeat="customer in customers | orderBy:'ListItemAllFields.Development_x0020_Stage'"> 
         <td>{{customer.ListItemAllFields.ID}}</td>  
         <td class="{{customer.ListItemAllFields.FieldValuesAsText.File_x005f_x0020_x005f_Type}}"></td> 
         <td><a href="{{customer.ServerRelativeUrl}}">{{customer.Name}}</a></td>     
         <td>{{customer.ListItemAllFields.Development_x0020_Stage}}</td> 
         <td>{{customer.ListItemAllFields.FieldValuesAsText.Date_x005f_x0020_x005f_for_x005f_x0020_x005f_Review}} </td> 
         <td>{{customer.ListItemAllFields.Type_x0020_of_x0020_Letter}}</td> 
         <td>{{customer.ListItemAllFields.FieldValuesAsText.Author}} </td> 
        </tr> 
       </table> 
      </div> 
     </div> 
+0

Ваш код может получить некоторую помощь при форматировании. Было бы лучше для нас. Благодарю. – Sid

+0

Исправлено форматирование кода..thanks – Shearak

ответ

0

Я считаю, что вы хотели бы совершать параллельные вызовы ajax и комбинировать все результаты?

var myAngApp = angular.module('SharePointAngApp', []); 
myAngApp.controller('spCustomerController', function ($scope, $http) { 
    $q.all({ 
     liquidityRiskManagement: $http({ 
      method: 'GET', 
      url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/getfolderbyserverrelativeurl('AD%20Letters/Liquidity%20Risk%20Management')/files?$expand=ListItemAllFields/FieldValuesAsText" 
             }), 
     anotherList: $http({ 
      method: 'GET', 
      url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/getfolderbyserverrelativeurl('AD%20Letters/Another%20List%')/files?$expand=ListItemAllFields/FieldValuesAsText" 
          }) 
     }).then(function(results) { 
       var riskResult = results.liquidityRiskManagement.data; 
       var anotherResult = results.anotherList.data; 
       // You can combine/format data here 
    }); 
}); 

EDIT: хороший ответ на параллельных вызовов Ajax: https://stackoverflow.com/a/24871403/6479268

+0

Это могло бы работать, если бы я знал, сколько папок проекта было создано под каждым набором документов. В моем случае папки проекта создаются по мере необходимости, поэтому мне нужен способ передать имя списка и папки в REST-вызов/_api/web/getfolderbyserverrelativeurl («Список/Папка»)/файлы? $ Expand = ListItemAllFields/FieldValuesAsText. – Shearak

+0

Я знаю, что у SharePoint есть функция GetUrlKeyValue ex (var listGuid = GetUrlKeyValue («Список»), var itemId = GetUrlKeyValue («ID»)), которая получит список и идентификатор. Я надеялся, что смогу сделать что-то похожее с Javascript, чтобы заполнить/_api/web/getfolderbyserverrelativeurl («Список/Папка»), чтобы вытащить список и имя папки для каждой папки проекта в соответствии с набором документов и отобразить эти документы на главной странице документа на основе которого был выбран проект. Сейчас я жестко кодирую имя папки (AD% 20Letters/Liquidity% 20Risk% 20Management). – Shearak

+0

Кто не просто задает тип настраиваемого контента и таргетинг, который с одним запросом? Часто осложнения с реализацией могут быть решены путем лучшего структурирования списков. – Thor

0

я понял, как сделать это для тех, кто может принести пользу. Я использовал доступные SharePoint GetUrlKeyValue и схватил RootFolder, который доступен в качестве строки запроса для каждого набора документов (var listFolder = GetUrlKeyValue("RootFolder");)

var listFolder = GetUrlKeyValue("RootFolder"); 
var url = "/_api/web/getfolderbyserverrelativeurl('"+listFolder+"')/files?$expand=ListItemAllFields/FieldValuesAsText" 

Теперь я получаю документы/файлы для каждой папки docset на Docset Главного.

Смежные вопросы