Sharepoint 2010でのデータ取得の共有

PostBackリクエストなしでページにデータを分割して読み込むだけで、データはSharepointリストから取得されているはずです。 素晴らしいGoogleに目を向けると、RESTインターフェイスという選択肢が1つしかないという結論に達しました。

クライアントオブジェクトモデルは、結果のコードが大きくなるため考慮されませんでした。

受信したデータをバインドするために、Angular JSを使用することが決定されました



RESTインターフェース



このサービスは、http:// {siteName} /_vti_bin/ListData.svcですぐに利用できます。 oDataプロトコル(データを要求および更新するためのオープンWebプロトコル。HTTPコマンドを要求として使用し、応答をAtom、JSON、またはXML形式で返します)で実行されます。



さあ始めましょう



技術 タスクは次のとおりでした。「ページを読み込むときに、特定の条件を満たすリストからn個のエントリを表示します。 [ もっと見る ]ボタンをクリックすると、 さらに n個のアイテムがロードされます。 要素がなくなった場合、データテープの終わりに関するメッセージを表示します。

リストとデータ型に関する情報を取得するには、 httpのリクエストを使用できます。// {siteName} /_vti_bin/ListData.svc/$metadata/

HTMLフレームワークの作成

<SharePoint:ScriptLink ID="ScriptLinkAngular" runat="server" Name="SharePointProject/js/angular/angular.js" Localizable="false"/> <SharePoint:ScriptLink ID="ScriptLinkApp" runat="server" Name="SharePointProject/js/app.js" Localizable="false"/> <div ng-app="testApp"> <div ng-controller="ListCtrl"> <div ng-repeat="item in JsonItems.items" style="margin-top: 10px;"> <pre> CustomTest: <b>{{item.CustomTest}}</b> <br/> CustomNumber: <b>{{item.CustomNumber}}</b></pre> </div> <!--     --> <div ng-show="JsonItems.showError" class="alert alert-danger" >{{JsonItems.error}}</div> <!--    --> <div ng-show="JsonItems.busy" class="alert alert-info" >Loading data...</div> <!--   --> <div ng-hide="JsonItems.busy" class="alert alert-success" ng-click="JsonItems.nextPage()" > Get more... </div> </div> </div>
      
      





Javascript

 var testApp = angular.module('testApp', []); testApp.controller('ListCtrl', ListCtrl); function ListCtrl($scope, $http, Items) { $scope.JsonItems= new Items(); $scope.JsonItems.nextPage(); } testApp.factory('Items', function($http) { var Items = function() { this.items = []; this.busy = false; this.after = 0; this.count=25; this.showError= function () { return this.error.length>0}; this.error=""; }; Items.prototype.nextPage = function() { if (this.busy) return; this.busy = true; var url = "http://{siteName}/_vti_bin/ListData.svc/Test?$skip=" + this.after + "&$top="+this.count +"&$orderby=CustomNumber&$select=CustomNumber,CustomTest"; $http({method: 'GET', url: url }).success(function(data) { var items = data.d; if (items.length > 0){ for (var i = 0; i < items.length; i++) { this.items.push(items[i]); } else { this.error = "No more data" } this.after += this.count; this.busy = false; } }.bind(this)). error(function(data, status) { this.error = "Error: " + data; this.busy = false; }.bind(this)); }; return Items; });
      
      







行をさらに詳しく考えてみましょう

  var url = "http://{siteName}/_vti_bin/ListData.svc/Test?$skip=" + this.after + "&$top="+this.count +"&$orderby=CustomNumber&$select=CustomNumber,CustomTest";
      
      





この場合、CustomNumberとCustomTestの2つのフィールドを含むjsonサービスから取得します(実際には3つのフィールドがあり、サービスは要素のurl、type、etagを含む__metadata属性も追加します)。 結果はn個の要素で構成され、CustomNumber列でソートされます。 フィルタリングを追加する必要がある場合は、たとえば、&$ filter = CustomNumber gt 50を追加します。

注:パラメーター$ skipまたは$ topがフィルターで使用されていない場合、行

 var items = data.d;
      
      





に置き換える必要があります
 var items = data.d.results;
      
      





合計



RESTインターフェースにはかなり柔軟なフィルタリングシステムがあり、複雑なクエリを簡単に作成できます。

マイナスのうち、次のものを選びます。

マイナスは最後の段落のみと呼ぶことができますが。

一般に、SharepointのRESTの第一印象に満足しました。



All Articles