サーチ…


備考

RESTサービスのエンドポイントURL

RESTクライアントアクセスAPIは、SharePoint 2010で初めて導入されましたが、SharePoint 2013では大幅に拡張されました。SharePoint 2010のREST APIは、 /_vti_bin/ListData.svc URLのListData WebサービスからアクセスされますSharePoint 2013では/_api/lists/および/_api/webエンドポイントURLが導入されました。これらのURLは若干動作が異なります。

上記のエンドポイントURLはが先行されなければならないhttp://server/site serverサーバーの名前を表し、 siteの名前、または特定のサイトへのパスを表します。

のURLの例 SharePoint 2010 SharePoint 2013
リストを取得する: /_vti_bin/ListData.svc/ListName /_api/lists('ListGuid')
アイテムを取得する: /_vti_bin/ListData.svc/ListName(1) /_api/lists('ListGuid')/items(1)
Webを取得する: (同等品) /_api/web

リストとリストアイテムへのアクセスの違いにもかかわらず、それらの結果を扱う作業は両方のバージョンで非常に似ています。

ListData.svcサービスは、後方互換性のためにSharePoint 2013で引き続き使用できます。

REST要求の送信

RESTリクエストは、ネイティブJavaScript XMLHttpRequestまたはjQuery AJAXラッパー構造を介して送信できます。

XMLHttpRequestの構文

var xhr = new XMLHttpRequest();
xhr.open(verb, url, true);
xhr.setRequestHeader("Content-Type","application/json");
xhr.send(data);

jQuery AJAXの構文

$.ajax({
    method: verb,
    url: url,
    headers: { "Content-Type":"application/json" },
    data: data
});

AJAX経由でリクエストを送信する方法の詳細については、JavaScript AJAXのドキュメントを参照してください。

リストの操作

リストアイテムの取得

この例では、すべてのリストアイテムを取得し、それらのアイテムを反復処理する方法を示します。 topパラメーターを使用して、特定の数の結果を要求することができます。 selectパラメータを使用して特定のフィールド( $select=id, Title, uri )を選択することもselectます。

JavaScript

function GetListItems(){
    $.ajax({
        url: "../_api/web/lists/getbytitle('List Title')/items?$top=50"
        contentType: "application/json;odata=verbose",
        method: "GET",
        headers: { "accept": "application/json;odata=verbose" },
        success: function (data) {
            $.each(data.d.results, function(index,item){
                //use item to access the individual list item
                console.log(item.Id);
            });
        },
        error: function(error){
            console.log(error);
        }
    });
    }

個々のリスト項目を取得する

JavaScript

function GetListItem(){
    $.ajax({
        url: "../_api/web/lists/getbytitle('List Title')/items(1)",
        contentType: "application/json;odata=verbose",
        method: "GET",
        headers: { "accept": "application/json;odata=verbose" },
        success: function (data) {
            console.log(data.d.Id);
        },
        error: function(error){
            console.log(error);
        }
    });
    }

ルックアップ列を持つリストアイテムを取得する

場合によっては、次のようなリスト構造を持つことがあります。

動物リスト表

タイプ説明
タイトル文字列(テキスト) 動物の名前
年齢動物の年齢
通貨動物の価値
タイプ ルックアップ(動物型テーブル) ルックアップフィールド(動物型テーブルからの選択肢のドロップダウン)

動物型テーブル

タイプ説明
タイトル文字列(テキスト) 種/動物種の名称(例:ブタ)
NumLegs 動物の足の数

恐らく最も深刻な例ではないかもしれませんが、ここの問題は依然として有効です。 SharePointリストから値を取得するために通常のリクエストを使用する場合、動物のTypeについては、JSONレスポンスにTypeIdというフィールドしか返されません。これらの項目を1回のAJAX呼び出しで拡張するには、URLパラメータに余分なマークアップが必要です。

この例は、参照列以外のものにも適用されます。 People/Groupsカラムを使用している場合は、基本的にはルックアップだけなので、 TitleEMailなどのアイテムを簡単にEMailできます。

コード例

重要な注意 :ルックアップ列から戻すフィールドを定義するときは、元のテーブルのルックアップフィールドの名前をフィールド名の前に付ける必要があります。たとえば、ルックアップ列からNumLegs属性をNumLegs場合は、「 Type/NumLegsする必要があります。

JavaScript

// webUrl: The url of the site (ex. https://www.contoso.com/sites/animals)
// listTitle: The name of the list you want to query
// selectFields: the specific fields you want to get back
// expandFields: the name of the fields that need to be pulled from lookup tables
// callback: the name of the callback function on success
function getItems(webUrl,listTitle,selectFields, expandFields, callback){
    var endpointUrl = webUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/items";
    endpointUrl+= '?$select=' + selectFields.join(",");
    endpointUrl+= '&$expand=' + expandFields.join(",");
    return executeRequest(endpointUrl,'GET', callback);
}

function executeRequest(url,method,callback,headers,payload) 
{
    if (typeof headers == 'undefined'){
        headers = {};
    }
    headers["Accept"] = "application/json;odata=verbose";
    if(method == "POST") {
        headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val();
    }   

    var ajaxOptions = 
    {       
    url: url,   
    type: method,  
    contentType: "application/json;odata=verbose",
    headers: headers,
    success: function (data) { callback(data) }
    };
    if(method == "POST") {
    ajaxOptions.data = JSON.stringify(payload);
    }  

    return $.ajax(ajaxOptions);
}

// Setup the ajax request by setting all of the arguments to the getItems function
function getAnimals() {
    var url = "https://www.contoso.com/sites/animals";
    var listTitle = "AnimalListing";
    
    var selectFields = [
        "Title",
        "Age",
        "Value",
        "Type/Title",
        "Type/NumLegs"
    ];

    var expandFields = [
        "Type/Title",
        "Type/NumLegs"
    ];

    getItems(url, listTitle, selectFields, expandFields, processAnimals);
}

// Callback function
// data: returns the data given by SharePoint
function processAnimals(data) {
    console.log(data);
    // Process data here
}

// Start the entire process
getAnimals();

複数値の参照フィールドに選択項目を追加する

この例では、ルックアップ列の名前がMultiLookupColumnNameで、マルチルックアップフィールドをID 1と2の項目を参照するように設定すると仮定しています。

jQuery AJAXの使用

2010年
var listName = "YourListName";
var lookupList = "LookupListName";
var idOfItemToUpdate = 1;
var url = "/server/site/_vti_bin/ListData.svc/"+listName+"("+idOfItemToUpdate+")"; 
var data = JSON.stringify({
    MultiLookupColumnName:[
        {__metadata:{uri:"http://yoursiteurl/_vti_bin/ListData.svc/"+lookupList+"(1)"}},
        {__metadata:{uri:"http://yoursiteurl/_vti_bin/ListData.svc/"+lookupList+"(2)"}}
    ]
});
$.ajax({
    method: 'POST',
    url: url,
    contentType: 'application/json',
    headers: {
      "X-HTTP-Method" : "MERGE",
      "If-Match" : "*"
    },
    data: data
});
2013年
var listGuid = "id-of-list-to-update"; // use list GUID here
var lookupGuid = "id-of-lookup-list"; // use lookup list GUID here
var idOfItemToUpdate = 1;
var url = "/server/site/_api/lists('"+ listGuid + "')/items("+ idOfItemToUpdate + ")";
var data = JSON.stringify({
    MultiLookupColumnName:[
        {__metadata:{uri:"http://yoursiteurl/_api/lists('" + lookupGuid + "')/items(1)"}},
        {__metadata:{uri:"http://yoursiteurl/_api/lists('" + lookupGuid + "')/items(2)"}}
    ]
});
$.ajax({
    method: 'POST',
    url: url,
    contentType: 'application/json',
    headers: {
      "X-HTTP-Method" : "MERGE",
      "If-Match" : "*"
    },
    data: data
});

XMLHttpRequestの使用

2010年
var listName = "YourListName";
var lookupList = "LookupListName";
var idOfItemToUpdate = 1;
var url = "/server/site/_vti_bin/ListData.svc/YourListName("+idOfItemToUpdate+")";
var data = JSON.stringify({
    MultiLookupColumnName:[
       {__metadata:{uri:"http://yoursiteurl/_vti_bin/ListData.svc/"+lookupList+"(1)"}},
        {__metadata:{uri:"http://yoursiteurl/_vti_bin/ListData.svc/"+lookupList+"(2)"}}
    ]
});
var xhr = new XMLHttpRequest();
xhr.open("POST",url,true);
xhr.setRequestHeader("X-HTTP-Method", "MERGE");
xhr.setRequestHeader("If-Match", "*");
xhr.setRequestHeader("Content-Type","application/json");
xhr.send(data);
2013年
var listGuid = "id-of-list-to-update";
var lookupGuid = "id-of-lookup-list";
var idOfItemToUpdate = 1;
var url = "/server/site/_api/lists('"+ listGuid + "')/items("+ idOfItemToUpdate + ")"; 
var data = JSON.stringify({
    MultiLookupColumnName:[
        {__metadata:{uri:"http://yoursiteurl/_api/lists('" + lookupGuid + "')/items(1)"}},
        {__metadata:{uri:"http://yoursiteurl/_api/lists('" + lookupGuid + "')/items(2)"}}
    ]
});
var xhr = new XMLHttpRequest();
xhr.open("POST",url,true);
xhr.setRequestHeader("X-HTTP-Method", "MERGE");
xhr.setRequestHeader("If-Match", "*");
xhr.setRequestHeader("Content-Type","application/json");
xhr.send(data);

クエリから返されたリストアイテムのページング

RESTを使用してページングをシミュレートするには、次のようにします。

  1. $orderbyパラメータに従って最初のnエントリをスキップするには、 $skip=nパラメータを使用します

  2. $top=nパラメータを使用して、 $orderbyおよび$skipパラメータに従って上位nエントリを返します。

var endpointUrl = "/_api/lists('guid')/items"; // SP2010: "/_vti_bin/ListData.svc/ListName";
$.getJSON(
    endpointUrl + "?$orderby=Id&$top=1000",
    function(data){
        processData(data); // you can do something with the results here
        var count = data.d.results.length;
        getNextBatch(count, processData, onComplete); // fetch next page 
    }
);

function getNextBatch(totalSoFar, processResults, onCompleteCallback){
    $.getJSON(
        endpointUrl + "?$orderby=Id&$skip="+totalSoFar+"&$top=1000",
        function(data){
            var count = data.d.results.length;
            if(count > 0){
                processResults(data); // do something with results
                getNextBatch(totalSoFar+count, callback); // fetch next page
            }else{
                onCompleteCallback();
            }
        }
    );
}

SharePointリストで新しく作成されたアイテムのIDを取得する

この例は、SharePoint REST APIを使用して新しく作成されたアイテムのIDを取得する方法を示しています。

注意 :

listName - この変数にはあなたのリストの名前が含まれます。

newItemBody - これは、リストに新しいアイテムを追加するためのリクエストボディです。

例:var newItemBody = {__metadata:{'type': 'SP.Data.MyListNameItem'}、タイトル: 'Some title value'};

function CreateListItemWithDetails(listName, newItemBody) {

    var item = newItemBody;
    return $.ajax({
        url: _spPageContextInfo.siteAbsoluteUrl + "/_api/web/lists/getbytitle('" + listName + "')/items",
        type: "POST",
        contentType: "application/json;odata=verbose",
        data: JSON.stringify(item),
        headers: {
            "Accept": "application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val(),
            "content-Type": "application/json;odata=verbose"
        }

    });
}

CreateListItemWithDetails(listName, newItemBody)
    .then(function(data){
        //success callback
        var NewlyCreatedItemId = data.d.ID;
    }, function(data){
        //failure callback
    });

SharePoint 2010 RESTインターフェイスを使用してCRUD操作を実行する方法

作成する

RESTを使用してCreate操作を実行するには、次の操作を実行する必要があります。

POST動詞を使用してHTTP要求を作成します。 POSTの対象としてエンティティを追加するリストのサービスURLを使用します。コンテンツタイプをapplication/json設定しapplication/json 。新しいリスト項目を表すJSONオブジェクトを文字列としてシリアル化し、この値をリクエスト本体に追加します。JavaScriptの例:

function createListItem(webUrl,listName, itemProperties, success, failure) {

    $.ajax({
        url: webUrl + "/_vti_bin/listdata.svc/" + listName,
        type: "POST",
        processData: false,
        contentType: "application/json;odata=verbose",
        data: JSON.stringify(itemProperties),
        headers: {
            "Accept": "application/json;odata=verbose"
        },
        success: function (data) {
            success(data.d);
        },
        error: function (data) {
            failure(data.responseJSON.error);
        }
    });
}

使用法

var taskProperties = {
    'TaskName': 'Order Approval',
    'AssignedToId': 12
};

createListItem('https://contoso.sharepoint.com/project/','Tasks',taskProperties,function(task){
    console.log('Task' + task.TaskName + ' has been created'); 
  },
  function(error){
    console.log(JSON.stringify(error));
  }
);

読む

REST経由で読み取り操作を実行するには、次の操作を実行する必要があります。

GET verbを使用してHTTP要求を作成します。 GETの対象としてエンティティを追加するリスト項目のサービスURLを使用します。コンテンツタイプをapplication/json設定しapplication/json 。 JavaScriptの例:

function getListItemById(webUrl,listName, itemId, success, failure) {
    var url = webUrl + "/_vti_bin/listdata.svc/" + listName + "(" + itemId + ")";
    $.ajax({
        url: url,
        method: "GET",
        headers: { "Accept": "application/json; odata=verbose" },
        success: function (data) {
            success(data.d);
        },
        error: function (data) {
            failure(data.responseJSON.error);
        }
    });
}

使用法

getListItemById('https://contoso.sharepoint.com/project/','Tasks',2,function(taskItem){
    console.log(taskItem.TaskName); 
  },
  function(error){
    console.log(JSON.stringify(error));
  }
);

更新

既存のエンティティを更新するには、次の操作を実行する必要があります。

POST動詞を使用してHTTP要求を作成します。値がMERGE X-HTTP-Methodヘッダーを追加しX-HTTP-Method 。更新するリスト項目のサービスURLをPOSTのターゲットとして使用するIf-Matchヘッダーにエンティティの元のETagまたは*の値を追加します。 JavaScriptの例:

function updateListItem(webUrl,listName,itemId,itemProperties,success, failure)
{
   getListItemById(webUrl,listName,itemId,function(item){

      $.ajax({
         type: 'POST',
         url: item.__metadata.uri,
         contentType: 'application/json',
         processData: false,
         headers: {
                "Accept": "application/json;odata=verbose",
                "X-HTTP-Method": "MERGE",
                "If-Match": item.__metadata.etag
         },
         data: Sys.Serialization.JavaScriptSerializer.serialize(itemProperties),
         success: function (data) {
                success(data);
         },
         error: function (data) {
                failure(data);
         }
      });

   },
   function(error){
       failure(error);
   });

}

使用法

var taskProperties = {
    'TaskName': 'Approval',
    'AssignedToId': 12  
};


updateListItem('https://contoso.sharepoint.com/project/','Tasks',2,taskProperties,function(item){
    console.log('Task has been updated'); 
  },
  function(error){
    console.log(JSON.stringify(error));
  }
);

削除

エンティティを削除するには、次の操作を実行する必要があります。

POST動詞を使用してHTTP要求を作成します。値がDELETE X-HTTP-Methodヘッダーを追加しX-HTTP-Method 。更新するリスト項目のサービスURLをPOSTのターゲットとして使用するIf-Matchヘッダーにエンティティの元のETagの値を追加します。 JavaScriptの例:

function deleteListItem(webUrl, listName, itemId, success, failure) {
    getListItemById(webUrl,listName,itemId,function(item){
        $.ajax({
            url: item.__metadata.uri,
            type: "POST",
            headers: {
                "Accept": "application/json;odata=verbose",
                "X-Http-Method": "DELETE",
                "If-Match": item.__metadata.etag
            },
            success: function (data) {
                success();
            },
            error: function (data) {
                failure(data.responseJSON.error);
            }
        });
    },
   function (error) {
       failure(error);
   });
}

使用法

deleteListItem('https://contoso.sharepoint.com/project/','Tasks',3,function(){
    console.log('Task has been deleted'); 
  },
  function(error){
    console.log(JSON.stringify(error));
  }
);


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow