- 記事一覧 >
- ブログ記事
Power Automate & SharePoint OData $batchクエリでまとめて追加・更新・削除
はじめに
別記事「Power Automate & Share Point の 5000 件問題を攻略した」にて、5000 件を超えるデータについて、5000 件問題回避フロー作成に取り組みました。「5000 件問題フリーのフロー」は、参照するだけで終わりましたが、応用して、5000 件を超えるデータの追加(作成)・更新・削除が可能です。
ですが...動作が遅いのと、ループの数が要求数の上限(ライセンスごとに決まっているアクションの実行回数等の上限)を超過する可能性が高まります。
Microsoft SharePoint Online の REST/OData API で $batch クエリ オプションを使用すると、1回のアクションでまとめて追加(作成)・更新・削除が可能になります。
【例】
$batch クエリ対応前:項目の作成
アクションを 100 回実行して、SharePoint リストに 100 行追加
$batch クエリ対応後:SharePoint に HTTP 要求を送信します
アクションを 1 回実行して、SharePoint リストに 100 行追加
今回、SharePoint に HTTP 要求を送信します
アクションを使用して、まとめて追加(作成)・更新・削除のフローを作成していきたいと思います。
2023 年 9 月現在の状況を元に説明しています。
SharePoint リスト
SharePoint リストは、以下のようにシンプルなものとします。
内部列名 | 表示列名 | 型 |
---|---|---|
Title | タイトル | 一行テキスト(細かい設定はデフォルトのまま) |
TestValue | テスト値 | 数値(細かい設定はデフォルトのまま) |
とりあえず、テスト用に 2 リスト作成して、2 レコードデータを入れておきます。
● リスト:datalist
タイトル | テスト値 |
---|---|
A | 1 |
A | 2 |
● リスト:datalist2
タイトル | テスト値 |
---|---|
B | 1001 |
B | 1002 |
OData バッチリクエスト基本
OData の仕様自体は、Power Automate だとか SharePoint に限った話ではなく、仕様に準拠したシステムは沢山あります。
ここでの説明は、Power Automate - SharePoint 間の範囲での説明になります。
今回利用するテクニック "SharePoint REST/OData API に対して $batch クエリ オプションを使用"(公式サイト「REST API によりバッチ要求を発行する」より) には、OData バッチリクエストの仕様が利用されています。
バッチ要求は、基本的に以下のようなリクエストになります。
POST https://<SharePointサイト>/_api/$batch HTTP/1.1
Host: <SharePointサイトドメイン>
X-RequestDigest: <認証トークン>
Content-Type: multipart/mixed; boundary=batch_<ユニークID>
<バッチリクエスト本体>
<SharePointサイト>
:サイトのホスト名/サイト名 です。(例:https://example.sharepoint.com/sites/examplesite
)
<SharePointサイトドメイン>
:サイトのホスト名のみです。(例:example.sharepoint.com
)
<認証トークン>
:不正アクセス防止の操作許可トークンです。今回の場合、SharePoint に HTTP 要求を送信します
アクションで自動的に付与されます。(フローを動かす人で許可されています。)
<ユニークID>
:<バッチリクエスト本体>
でバッチリクエストの開始と停止を宣言するために使われる ID です。通常、GUID が使われますが、GUID である必要はないようです。
GUID(Globally Unique Identifier、グローバル一意識別子) とは、データを一意に識別するために用いられる識別子のことです。例:
3f2504e0-4f89-11d3-9a0c-0305e82c3301
<バッチリクエスト本体>
:GET(データ参照)の場合、以下のようになります。
--batch_<ユニークID>
Content-Type: application/http
Content-Transfer-Encoding: binary
GET https://<SharePointサイト>/_api/web/lists/getbytitle('<リスト名>')/items?$select=<リスト列名> HTTP/1.1
Host: <SharePointサイトドメイン>
Accept: application/json;odata=verbose
--batch_<ユニークID>
Content-Type: application/http
...繰り返し
--batch_<ユニークID>
:一つのリクエストの区切り線のようなものです。<ユニーク ID> は、先ほど出てきた <ユニーク ID> と同一のものを指定する必要があります。同一のものを指定しない場合、エラーにはならず、以下のようなレスポンスが返ってきます。
{
"$content-type": "multipart/mixed; boundary=batchresponse_03f86433-d3df-4071-89ac-c61f1507bcfa",
"$content": "LS1iYXRjaHJlc3BvbnNlXzAzZjg2NDMzLWQzZGYtNDA3MS04OWFjLWM2MWYxNTA3YmNmYS0tDQo="
}
$content
の値は、base64 デコードすると、
--batchresponse_03f86433-d3df-4071-89ac-c61f1507bcfa--
です。
Content-Type: application/http
:固定のおまじないです。無いと以下のように怒られます。
'Content-Type' ヘッダーがありません。'Content-Type' ヘッダーは、バッチ メッセージの MIME パートごとに指定する必要があります。
Content-Transfer-Encoding: binary
:固定のおまじないです。無いと以下のように怒られます。
'Content-Transfer-Encoding' ヘッダーが見つからなかったか、無効なヘッダーが見つかりました。バッチ操作ごとに 'Content-Transfer-Encoding' ヘッダーを指定し、値を 'binary' にする必要があります。
GET ... HTTP/1.1
:SharePoint リスト <リスト名> から <リスト列名> 列の値を全て取得します。何がしたいかによって、URL は変わります。(他のパターンの説明は割愛します。)
Host: <SharePointサイトドメイン>
:サイトのホスト名のみの部分です。(例:example.sharepoint.com
)無くても動作しました。
Accept: application/json;odata=verbose
:応答がメタデータを含む JSON になります。メタデータとは、以下のような情報です。(注意:あくまで一例で、リクエスト先や内容によって変わります。)
"__metadata": {
"id": "86f77d51-7de6-4543-91f3-0e01270c612e",
"uri": "https://example.sharepoint.com/sites/testsite/_api/Web/Lists(guid'3f2504e0-4f89-11d3-9a0c-0305e82c3301')/Items(6)",
"etag": "\"2\"",
"type": "SP.Data.DatalistListItem"
},
その他に、Accept: application/json;odata=nometadata
があります。この場合、応答がメタデータを含まない JSON になります。あくまで一例で、リクエスト先や内容によって変わりますが、上記のように重要視しない情報が含まれている場合、Accept: application/json;odata=nometadata
で良いと思います。Accept: application/atom+xml
の場合は、応答が base64 エンコードされた XML になります。Accept:
... は、無くても動作しましたが、省略した場合、Accept: application/atom+xml
になるようです。
上記は、GET(参照)の場合です。
POST(追加)、PATCH(更新)、DELETE(削除)の場合、<バッチリクエスト本体> に追加作法 Changeset ID が必要になります。
POST(追加)、PATCH(更新)、DELETE(削除)で追加作法 Changeset ID が無いと以下のように怒られます。
クエリ操作で無効な HTTP メソッド 'POST' が検出されました。クエリ操作では、HTTP メソッドとして 'GET' のみがサポートされます。
<バッチリクエスト本体>
:POST(追加)、PATCH(更新)、DELETE(削除)の場合、以下のようになります。
--batch_<ユニークID>
Content-Type: multipart/mixed; boundary="changeset_<Changeset ID>"
--changeset_<Changeset ID>
Content-Type: application/http
Content-Transfer-Encoding: binary
POST https://<SharePointサイト>/_api/web/lists/getbytitle('<SharePointリスト名>')/items HTTP/1.1
Content-Type: application/json;odata=nometadata
<データ>
--changeset_<Changeset ID>
Content-Type: application/http
...繰り返し
<Changeset ID>
:GUID など、ユニークな ID を指定します。それならば、boundary=batch_<ユニークID>
の <ユニークID>
と同じで良いのでは?と思って、やってみたら、動きました。(ただし、変えた方がいいと思います。)
POST ... HTTP/1.1
:更新の時は、PATCH、削除の時は、DELETE です。何がしたいかによって、URL は変わります。(上記の場合、<SharePoint リスト名> リストに <データ> を追加します。)
<データ>
:今回のリストがターゲットの場合、{"Title":"A","TestValue":"1"}
と書くと、1行追加されます。
なお、無しでも動作しましたが、バッチ要求の最後には、--batch_<Changeset ID>--
--batch_<ユニークID>--
を付けるのが作法です。(先頭と末尾両方に --
です。)
1 アクションで 2 リストデータ取得
Power Automate SharePoint に HTTP 要求を送信します
アクション を使って、2 つの SharePoint のリストからデータを取得します。
作成
アクションで、
入力 → 式 → guid()
により、BatchID
、ChangesetID
2つステップを追加します。
ChangesetID
の方は、このセクションでは使用しません。
さらにステップを追加して、SharePoint に HTTP 要求を送信します
アクション
を追加します。
サイトのアドレス: データを取得したいリストが存在する SharePoint サイトを選択、もしくは、URL を直接入力します。
方法: POST
を選択します。ここで、GET だと勘違いしそうですが、_api/$batch へのバッチリクエストを意図している場合、必ず、POSTです。
URI: _api/$batch
固定です。もちろん、バッチリクエストを意図していない場合、異なりますが、本記事では、バッチリクエストしかしないため、固定です。
ヘッダー 1: キーの入力:Content-Type
、値の入力:multipart/mixed; boundary=batch_@{outputs('BatchID')}
です。
値の入力のところの、@{outputs('BatchID')} の部分ですが、コピペしても良いですが、multipart/mixed; boundary=batch_
まで入力して、出力 の部分を選択しても良いです。
ヘッダー 2: キーの入力:Expect
、値の入力:100-continue
です。「これから大きいデータを送りますよ。」というような意味です。
ボディ: 以下の内容を入力です。
--batch_@{outputs('BatchID')}
Content-Type: application/http
Content-Transfer-Encoding: binary
GET https://example.sharepoint.com/sites/testsite/_api/web/lists/getbytitle('datalist')/items?$select=TestValue HTTP/1.1
Accept: application/json;odata=nometadata
--batch_@{outputs('BatchID')}
Content-Type: application/http
Content-Transfer-Encoding: binary
GET https://example.sharepoint.com/sites/testsite/_api/web/lists/getbytitle('datalist2')/items?$select=TestValue HTTP/1.1
Accept: application/json;odata=nometadata
--batch_@{outputs('BatchID')}--
これで、
・datalist リストから TestValue 列の値全てを取り出し。
・datalist2 リストから TestValue 列の値全てを取り出し。
2つの動作を一回で実行という意味になります。Accept: application/json;odata=nometadata
を指定しているため、メタデータを含まない JSON が返ります。
フロー全体像です。
実行します。
成功しました!
出力全体は、以下です。
{
"$content-type": "multipart/mixed; boundary=batchresponse_ef822009-25f9-49c2-aef9-0ab5502dbb42",
"$content": "LS1iYXRjaHJlc3BvbnNlX2VmODIyMDA5LTI1ZjktNDljMi1hZWY5LTBhYjU1MDJkYmI0Mg0KQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9odHRwDQpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnkNCg0KSFRUUC8xLjEgMjAwIE9LDQpDT05URU5ULVRZUEU6IGFwcGxpY2F0aW9uL2pzb247b2RhdGE9bm9tZXRhZGF0YTtzdHJlYW1pbmc9dHJ1ZTtjaGFyc2V0PXV0Zi04DQoNCnsidmFsdWUiOlt7IlRlc3RWYWx1ZSI6MS4wfSx7IlRlc3RWYWx1ZSI6Mi4wfV19DQotLWJhdGNocmVzcG9uc2VfZWY4MjIwMDktMjVmOS00OWMyLWFlZjktMGFiNTUwMmRiYjQyDQpDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2h0dHANCkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeQ0KDQpIVFRQLzEuMSAyMDAgT0sNCkNPTlRFTlQtVFlQRTogYXBwbGljYXRpb24vanNvbjtvZGF0YT1ub21ldGFkYXRhO3N0cmVhbWluZz10cnVlO2NoYXJzZXQ9dXRmLTgNCg0KeyJ2YWx1ZSI6W3siVGVzdFZhbHVlIjoxMDAxLjB9LHsiVGVzdFZhbHVlIjoxMDAyLjB9XX0NCi0tYmF0Y2hyZXNwb25zZV9lZjgyMjAwOS0yNWY5LTQ5YzItYWVmOS0wYWI1NTAyZGJiNDItLQ0K",
"$multipart": [
{
"headers": {
"Content-Type": "application/http",
"Content-Transfer-Encoding": "binary"
},
"body": {
"$content-type": "application/http; msgtype=response",
"$content": "SFRUUC8xLjEgMjAwIE9LDQpDT05URU5ULVRZUEU6IGFwcGxpY2F0aW9uL2pzb247b2RhdGE9bm9tZXRhZGF0YTtzdHJlYW1pbmc9dHJ1ZTtjaGFyc2V0PXV0Zi04DQoNCnsidmFsdWUiOlt7IlRlc3RWYWx1ZSI6MS4wfSx7IlRlc3RWYWx1ZSI6Mi4wfV19",
"$applicationHttp": {
"headers": {},
"body": {
"value": [
{
"TestValue": 1
},
{
"TestValue": 2
}
]
},
"statusCode": 200
}
}
},
{
"headers": {
"Content-Type": "application/http",
"Content-Transfer-Encoding": "binary"
},
"body": {
"$content-type": "application/http; msgtype=response",
"$content": "SFRUUC8xLjEgMjAwIE9LDQpDT05URU5ULVRZUEU6IGFwcGxpY2F0aW9uL2pzb247b2RhdGE9bm9tZXRhZGF0YTtzdHJlYW1pbmc9dHJ1ZTtjaGFyc2V0PXV0Zi04DQoNCnsidmFsdWUiOlt7IlRlc3RWYWx1ZSI6MTAwMS4wfSx7IlRlc3RWYWx1ZSI6MTAwMi4wfV19",
"$applicationHttp": {
"headers": {},
"body": {
"value": [
{
"TestValue": 1001
},
{
"TestValue": 1002
}
]
},
"statusCode": 200
}
}
}
]
}
base64 エンコードされているところをデコードすると、以下のような内容です。
--batchresponse_ef822009-25f9-49c2-aef9-0ab5502dbb42
Content-Type: application/http
Content-Transfer-Encoding: binary
HTTP/1.1 200 OK
CONTENT-TYPE: application/json;odata=nometadata;streaming=true;charset=utf-8
{"value":[{"TestValue":1.0},{"TestValue":2.0}]}
--batchresponse_ef822009-25f9-49c2-aef9-0ab5502dbb42
Content-Type: application/http
Content-Transfer-Encoding: binary
HTTP/1.1 200 OK
CONTENT-TYPE: application/json;odata=nometadata;streaming=true;charset=utf-8
{"value":[{"TestValue":1001.0},{"TestValue":1002.0}]}
--batchresponse_ef822009-25f9-49c2-aef9-0ab5502dbb42--
HTTP/1.1 200 OK
CONTENT-TYPE: application/json;odata=nometadata;streaming=true;charset=utf-8
{"value":[{"TestValue":1.0},{"TestValue":2.0}]}
HTTP/1.1 200 OK
CONTENT-TYPE: application/json;odata=nometadata;streaming=true;charset=utf-8
{"value":[{"TestValue":1001.0},{"TestValue":1002.0}]}
成功しましたので、ついでに、Content-Type: application/json;odata=nometadata
をContent-Type: application/json;odata=verbose
にして、メタデータも含めた応答を見てみます。
リクエスト内容は、省略して、結果は、以下です。
{
"$content-type": "multipart/mixed; boundary=batchresponse_0eae2cdd-e204-4393-a7ee-ac7bd4f62e7f",
"$content": "LS1iYXRjaHJlc3BvbnNlXzBlYWUyY2RkLWUyMDQtNDM5My1hN2VlLWFjN2JkNGY2MmU3Zg0KQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9odHRwDQpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnkNCg0KSFRUUC8xLjEgMjAwIE9LDQpDT05URU5ULVRZUEU6IGFwcGxpY2F0aW9uL2pzb247b2RhdGE9dmVyYm9zZTtjaGFyc2V0PXV0Zi04DQoNCnsiZCI6eyJyZXN1bHRzIjpbeyJfX21ldGFkYXRhIjp7ImlkIjoiYjQ0ZjQ1YjMtNmZkMy00MzNhLTg5OTgtYzJhZTgzNjU1YWMxIiwidXJpIjoiaHR0cHM6Ly9leGFtcGxlLnNoYXJlcG9pbnQuY29tL3NpdGVzL3Rlc3RzaXRlL19hcGkvV2ViL0xpc3RzKGd1aWQnNjUxYWEyNmYtNTMzMi00NjYwLTk3ZGUtYzNmMzIxYmNmOGZjJykvSXRlbXMoNikiLCJldGFnIjoiXCIyXCIiLCJ0eXBlIjoiU1AuRGF0YS5EYXRhbGlzdExpc3RJdGVtIn0sIlRlc3RWYWx1ZSI6MX0seyJfX21ldGFkYXRhIjp7ImlkIjoiYjNjNjAzNzMtNDNiNC00Y2RkLTk3NTAtNGI5OTM4YzkwMzlmIiwidXJpIjoiaHR0cHM6Ly9leGFtcGxlLnNoYXJlcG9pbnQuY29tL3NpdGVzL3Rlc3RzaXRlL19hcGkvV2ViL0xpc3RzKGd1aWQnNjUxYWEyNmYtNTMzMi00NjYwLTk3ZGUtYzNmMzIxYmNmOGZjJykvSXRlbXMoNykiLCJldGFnIjoiXCIyXCIiLCJ0eXBlIjoiU1AuRGF0YS5EYXRhbGlzdExpc3RJdGVtIn0sIlRlc3RWYWx1ZSI6Mn1dfX0NCi0tYmF0Y2hyZXNwb25zZV8wZWFlMmNkZC1lMjA0LTQzOTMtYTdlZS1hYzdiZDRmNjJlN2YNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vaHR0cA0KQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmluYXJ5DQoNCkhUVFAvMS4xIDIwMCBPSw0KQ09OVEVOVC1UWVBFOiBhcHBsaWNhdGlvbi9qc29uO29kYXRhPXZlcmJvc2U7Y2hhcnNldD11dGYtOA0KDQp7ImQiOnsicmVzdWx0cyI6W3siX19tZXRhZGF0YSI6eyJpZCI6IjI5MDkxYTIyLTgyNzUtNGJjNS1hMjg0LWVlMjU3NzgyNzA0YyIsInVyaSI6Imh0dHBzOi8vZXhhbXBsZS5zaGFyZXBvaW50LmNvbS9zaXRlcy90ZXN0c2l0ZS9fYXBpL1dlYi9MaXN0cyhndWlkJ2QzZWFjZGJjLTk3NmMtNDcwNy1hN2FhLTZlZmU3ZmQ5YmMzYycpL0l0ZW1zKDEpIiwiZXRhZyI6IlwiMlwiIiwidHlwZSI6IlNQLkRhdGEuRGF0YWxpc3QyTGlzdEl0ZW0ifSwiVGVzdFZhbHVlIjoxMDAxfSx7Il9fbWV0YWRhdGEiOnsiaWQiOiIwMDc2OTJhYi1kODQxLTQ5MDUtYjAzNi1jOWM5NjFmYjVlNDIiLCJ1cmkiOiJodHRwczovL2V4YW1wbGUuc2hhcmVwb2ludC5jb20vc2l0ZXMvdGVzdHNpdGUvX2FwaS9XZWIvTGlzdHMoZ3VpZCdkM2VhY2RiYy05NzZjLTQ3MDctYTdhYS02ZWZlN2ZkOWJjM2MnKS9JdGVtcygyKSIsImV0YWciOiJcIjJcIiIsInR5cGUiOiJTUC5EYXRhLkRhdGFsaXN0Mkxpc3RJdGVtIn0sIlRlc3RWYWx1ZSI6MTAwMn1dfX0NCi0tYmF0Y2hyZXNwb25zZV8wZWFlMmNkZC1lMjA0LTQzOTMtYTdlZS1hYzdiZDRmNjJlN2YtLQ=",
"$multipart": [
{
"headers": {
"Content-Type": "application/http",
"Content-Transfer-Encoding": "binary"
},
"body": {
"$content-type": "application/http; msgtype=response",
"$content": "SFRUUC8xLjEgMjAwIE9LDQpDT05URU5ULVRZUEU6IGFwcGxpY2F0aW9uL2pzb247b2RhdGE9dmVyYm9zZTtjaGFyc2V0PXV0Zi04DQoNCnsiZCI6eyJyZXN1bHRzIjpbeyJfX21ldGFkYXRhIjp7ImlkIjoiYjQ0ZjQ1YjMtNmZkMy00MzNhLTg5OTgtYzJhZTgzNjU1YWMxIiwidXJpIjoiaHR0cHM6Ly9leGFtcGxlLnNoYXJlcG9pbnQuY29tL3NpdGVzL3Rlc3RzaXRlL19hcGkvV2ViL0xpc3RzKGd1aWQnNjUxYWEyNmYtNTMzMi00NjYwLTk3ZGUtYzNmMzIxYmNmOGZjJykvSXRlbXMoNikiLCJldGFnIjoiXCIyXCIiLCJ0eXBlIjoiU1AuRGF0YS5EYXRhbGlzdExpc3RJdGVtIn0sIlRlc3RWYWx1ZSI6MX0seyJfX21ldGFkYXRhIjp7ImlkIjoiYjNjNjAzNzMtNDNiNC00Y2RkLTk3NTAtNGI5OTM4YzkwMzlmIiwidXJpIjoiaHR0cHM6Ly9leGFtcGxlLnNoYXJlcG9pbnQuY29tL3NpdGVzL3Rlc3RzaXRlL19hcGkvV2ViL0xpc3RzKGd1aWQnNjUxYWEyNmYtNTMzMi00NjYwLTk3ZGUtYzNmMzIxYmNmOGZjJykvSXRlbXMoNykiLCJldGFnIjoiXCIyXCIiLCJ0eXBlIjoiU1AuRGF0YS5EYXRhbGlzdExpc3RJdGVtIn0sIlRlc3RWYWx1ZSI6Mn1dfX0=",
"$applicationHttp": {
"headers": {},
"body": {
"d": {
"results": [
{
"__metadata": {
"id": "b44f45b3-6fd3-433a-8998-c2ae83655ac1",
"uri": "https://example.sharepoint.com/sites/testsite/_api/Web/Lists(guid'651aa26f-5332-4660-97de-c3f321bcf8fc')/Items(6)",
"etag": "\"2\"",
"type": "SP.Data.DatalistListItem"
},
"TestValue": 1
},
{
"__metadata": {
"id": "b3c60373-43b4-4cdd-9750-4b9938c9039f",
"uri": "https://example.sharepoint.com/sites/testsite/_api/Web/Lists(guid'651aa26f-5332-4660-97de-c3f321bcf8fc')/Items(7)",
"etag": "\"2\"",
"type": "SP.Data.DatalistListItem"
},
"TestValue": 2
}
]
}
},
"statusCode": 200
}
}
},
{
"headers": {
"Content-Type": "application/http",
"Content-Transfer-Encoding": "binary"
},
"body": {
"$content-type": "application/http; msgtype=response",
"$content": "SFRUUC8xLjEgMjAwIE9LDQpDT05URU5ULVRZUEU6IGFwcGxpY2F0aW9uL2pzb247b2RhdGE9dmVyYm9zZTtjaGFyc2V0PXV0Zi04DQoNCnsiZCI6eyJyZXN1bHRzIjpbeyJfX21ldGFkYXRhIjp7ImlkIjoiMjkwOTFhMjItODI3NS00YmM1LWEyODQtZWUyNTc3ODI3MDRjIiwidXJpIjoiaHR0cHM6Ly9leGFtcGxlLnNoYXJlcG9pbnQuY29tL3NpdGVzL3Rlc3RzaXRlL19hcGkvV2ViL0xpc3RzKGd1aWQnZDNlYWNkYmMtOTc2Yy00NzA3LWE3YWEtNmVmZTdmZDliYzNjJykvSXRlbXMoMSkiLCJldGFnIjoiXCIyXCIiLCJ0eXBlIjoiU1AuRGF0YS5EYXRhbGlzdDJMaXN0SXRlbSJ9LCJUZXN0VmFsdWUiOjEwMDF9LHsiX19tZXRhZGF0YSI6eyJpZCI6IjAwNzY5MmFiLWQ4NDEtNDkwNS1iMDM2LWM5Yzk2MWZiNWU0MiIsInVyaSI6Imh0dHBzOi8vZXhhbXBsZS5zaGFyZXBvaW50LmNvbS9zaXRlcy90ZXN0c2l0ZS9fYXBpL1dlYi9MaXN0cyhndWlkJ2QzZWFjZGJjLTk3NmMtNDcwNy1hN2FhLTZlZmU3ZmQ5YmMzYycpL0l0ZW1zKDIpIiwiZXRhZyI6IlwiMlwiIiwidHlwZSI6IlNQLkRhdGEuRGF0YWxpc3QyTGlzdEl0ZW0ifSwiVGVzdFZhbHVlIjoxMDAyfV19fQ=",
"$applicationHttp": {
"headers": {},
"body": {
"d": {
"results": [
{
"__metadata": {
"id": "29091a22-8275-4bc5-a284-ee257782704c",
"uri": "https://example.sharepoint.com/sites/testsite/_api/Web/Lists(guid'd3eacdbc-976c-4707-a7aa-6efe7fd9bc3c')/Items(1)",
"etag": "\"2\"",
"type": "SP.Data.Datalist2ListItem"
},
"TestValue": 1001
},
{
"__metadata": {
"id": "007692ab-d841-4905-b036-c9c961fb5e42",
"uri": "https://example.sharepoint.com/sites/testsite/_api/Web/Lists(guid'd3eacdbc-976c-4707-a7aa-6efe7fd9bc3c')/Items(2)",
"etag": "\"2\"",
"type": "SP.Data.Datalist2ListItem"
},
"TestValue": 1002
}
]
}
},
"statusCode": 200
}
}
}
]
}
Accept: application/atom+xml
または、Accept:
指定なしの場合、以下です。
{
"$content-type": "multipart/mixed; boundary=batchresponse_9f3d3530-6fde-4fe8-9250-1d54372cceed",
"$content": "LS1iYXRjaHJlc3BvbnNlXzlmM2QzNTMwLTZmZGUtNGZlOC05MjUwLTFkNTQzNzJjY2VlZA0KQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9odHRwDQpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnkNCg0KSFRUUC8xLjEgMjAwIE9LDQpDT05URU5ULVRZUEU6IGFwcGxpY2F0aW9uL2F0b20reG1sO3R5cGU9ZmVlZDtjaGFyc2V0PXV0Zi04DQoNCjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+PGZlZWQgeG1sOmJhc2U9Imh0dHBzOi8vZXhhbXBsZS5zaGFyZXBvaW50LmNvbS9zaXRlcy90ZXN0c2l0ZS9fYXBpLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvQXRvbSIgeG1sbnM6ZD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9hZG8vMjAwNy8wOC9kYXRhc2VydmljZXMiIHhtbG5zOm09Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYWRvLzIwMDcvMDgvZGF0YXNlcnZpY2VzL21ldGFkYXRhIiB4bWxuczpnZW9yc3M9Imh0dHA6Ly93d3cuZ2VvcnNzLm9yZy9nZW9yc3MiIHhtbG5zOmdtbD0iaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWwiPjxpZD44ZTRjMWFkNi05MGQ3LTRjMDItOTgwYS1lOTRmMTAzOWYxMzg8L2lkPjx0aXRsZSAvPjx1cGRhdGVkPjIwMjMtMDktMTVUMTA6NTE6MDJaPC91cGRhdGVkPjxlbnRyeSBtOmV0YWc9IiZxdW90OzImcXVvdDsiPjxpZD5mM2ZiNWNiYS0yYTFiLTQ3MzktOGRkZC04YTgzODRmZGQ2ZDg8L2lkPjxjYXRlZ29yeSB0ZXJtPSJTUC5EYXRhLkRhdGFsaXN0TGlzdEl0ZW0iIHNjaGVtZT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9hZG8vMjAwNy8wOC9kYXRhc2VydmljZXMvc2NoZW1lIiAvPjxsaW5rIHJlbD0iZWRpdCIgaHJlZj0iV2ViL0xpc3RzKGd1aWQnNjUxYWEyNmYtNTMzMi00NjYwLTk3ZGUtYzNmMzIxYmNmOGZjJykvSXRlbXMoNikiIC8+PHRpdGxlIC8+PHVwZGF0ZWQ+MjAyMy0wOS0xNVQxMDo1MTowMlo8L3VwZGF0ZWQ+PGF1dGhvcj48bmFtZSAvPjwvYXV0aG9yPjxjb250ZW50IHR5cGU9ImFwcGxpY2F0aW9uL3htbCI+PG06cHJvcGVydGllcz48ZDpUZXN0VmFsdWUgbTp0eXBlPSJFZG0uRG91YmxlIj4xPC9kOlRlc3RWYWx1ZT48L206cHJvcGVydGllcz48L2NvbnRlbnQ+PC9lbnRyeT48ZW50cnkgbTpldGFnPSImcXVvdDsyJnF1b3Q7Ij48aWQ+MzZlZjdiYTMtZWM2Mi00MDY1LWJkODgtN2NmYzVmOGExZTlmPC9pZD48Y2F0ZWdvcnkgdGVybT0iU1AuRGF0YS5EYXRhbGlzdExpc3RJdGVtIiBzY2hlbWU9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYWRvLzIwMDcvMDgvZGF0YXNlcnZpY2VzL3NjaGVtZSIgLz48bGluayByZWw9ImVkaXQiIGhyZWY9IldlYi9MaXN0cyhndWlkJzY1MWFhMjZmLTUzMzItNDY2MC05N2RlLWMzZjMyMWJjZjhmYycpL0l0ZW1zKDcpIiAvPjx0aXRsZSAvPjx1cGRhdGVkPjIwMjMtMDktMTVUMTA6NTE6MDJaPC91cGRhdGVkPjxhdXRob3I+PG5hbWUgLz48L2F1dGhvcj48Y29udGVudCB0eXBlPSJhcHBsaWNhdGlvbi94bWwiPjxtOnByb3BlcnRpZXM+PGQ6VGVzdFZhbHVlIG06dHlwZT0iRWRtLkRvdWJsZSI+MjwvZDpUZXN0VmFsdWU+PC9tOnByb3BlcnRpZXM+PC9jb250ZW50PjwvZW50cnk+PC9mZWVkPg0KLS1iYXRjaHJlc3BvbnNlXzlmM2QzNTMwLTZmZGUtNGZlOC05MjUwLTFkNTQzNzJjY2VlZA0KQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9odHRwDQpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnkNCg0KSFRUUC8xLjEgMjAwIE9LDQpDT05URU5ULVRZUEU6IGFwcGxpY2F0aW9uL2F0b20reG1sO3R5cGU9ZmVlZDtjaGFyc2V0PXV0Zi04DQoNCjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+PGZlZWQgeG1sOmJhc2U9Imh0dHBzOi8vZXhhbXBsZS5zaGFyZXBvaW50LmNvbS9zaXRlcy90ZXN0c2l0ZS9fYXBpLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvQXRvbSIgeG1sbnM6ZD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9hZG8vMjAwNy8wOC9kYXRhc2VydmljZXMiIHhtbG5zOm09Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYWRvLzIwMDcvMDgvZGF0YXNlcnZpY2VzL21ldGFkYXRhIiB4bWxuczpnZW9yc3M9Imh0dHA6Ly93d3cuZ2VvcnNzLm9yZy9nZW9yc3MiIHhtbG5zOmdtbD0iaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWwiPjxpZD5jYTQ1YTlmZS0xYTAxLTQ0YTUtYTRhOS00YmVjZjFiNDA2YTU8L2lkPjx0aXRsZSAvPjx1cGRhdGVkPjIwMjMtMDktMTVUMTA6NTE6MDJaPC91cGRhdGVkPjxlbnRyeSBtOmV0YWc9IiZxdW90OzImcXVvdDsiPjxpZD5kZmNiMmI1YS1hYTM3LTQyMWUtODNmMC01Njk5OTk0MDIzNzE8L2lkPjxjYXRlZ29yeSB0ZXJtPSJTUC5EYXRhLkRhdGFsaXN0Mkxpc3RJdGVtIiBzY2hlbWU9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYWRvLzIwMDcvMDgvZGF0YXNlcnZpY2VzL3NjaGVtZSIgLz48bGluayByZWw9ImVkaXQiIGhyZWY9IldlYi9MaXN0cyhndWlkJ2QzZWFjZGJjLTk3NmMtNDcwNy1hN2FhLTZlZmU3ZmQ5YmMzYycpL0l0ZW1zKDEpIiAvPjx0aXRsZSAvPjx1cGRhdGVkPjIwMjMtMDktMTVUMTA6NTE6MDJaPC91cGRhdGVkPjxhdXRob3I+PG5hbWUgLz48L2F1dGhvcj48Y29udGVudCB0eXBlPSJhcHBsaWNhdGlvbi94bWwiPjxtOnByb3BlcnRpZXM+PGQ6VGVzdFZhbHVlIG06dHlwZT0iRWRtLkRvdWJsZSI+MTAwMTwvZDpUZXN0VmFsdWU+PC9tOnByb3BlcnRpZXM+PC9jb250ZW50PjwvZW50cnk+PGVudHJ5IG06ZXRhZz0iJnF1b3Q7MiZxdW90OyI+PGlkPmZhZDhjZTJlLWNlNDUtNGJkOS1hZDIzLThmNDI2MjYwZDY3NDwvaWQ+PGNhdGVnb3J5IHRlcm09IlNQLkRhdGEuRGF0YWxpc3QyTGlzdEl0ZW0iIHNjaGVtZT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9hZG8vMjAwNy8wOC9kYXRhc2VydmljZXMvc2NoZW1lIiAvPjxsaW5rIHJlbD0iZWRpdCIgaHJlZj0iV2ViL0xpc3RzKGd1aWQnZDNlYWNkYmMtOTc2Yy00NzA3LWE3YWEtNmVmZTdmZDliYzNjJykvSXRlbXMoMikiIC8+PHRpdGxlIC8+PHVwZGF0ZWQ+MjAyMy0wOS0xNVQxMDo1MTowMlo8L3VwZGF0ZWQ+PGF1dGhvcj48bmFtZSAvPjwvYXV0aG9yPjxjb250ZW50IHR5cGU9ImFwcGxpY2F0aW9uL3htbCI+PG06cHJvcGVydGllcz48ZDpUZXN0VmFsdWUgbTp0eXBlPSJFZG0uRG91YmxlIj4xMDAyPC9kOlRlc3RWYWx1ZT48L206cHJvcGVydGllcz48L2NvbnRlbnQ+PC9lbnRyeT48L2ZlZWQ+DQotLWJhdGNocmVzcG9uc2VfOWYzZDM1MzAtNmZkZS00ZmU4LTkyNTAtMWQ1NDM3MmNjZWVkLS0=",
"$multipart": [
{
"headers": {
"Content-Type": "application/http",
"Content-Transfer-Encoding": "binary"
},
"body": {
"$content-type": "application/http; msgtype=response",
"$content": "SFRUUC8xLjEgMjAwIE9LDQpDT05URU5ULVRZUEU6IGFwcGxpY2F0aW9uL2F0b20reG1sO3R5cGU9ZmVlZDtjaGFyc2V0PXV0Zi04DQoNCjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+PGZlZWQgeG1sOmJhc2U9Imh0dHBzOi8vZXhhbXBsZS5zaGFyZXBvaW50LmNvbS9zaXRlcy90ZXN0c2l0ZS9fYXBpLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvQXRvbSIgeG1sbnM6ZD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9hZG8vMjAwNy8wOC9kYXRhc2VydmljZXMiIHhtbG5zOm09Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYWRvLzIwMDcvMDgvZGF0YXNlcnZpY2VzL21ldGFkYXRhIiB4bWxuczpnZW9yc3M9Imh0dHA6Ly93d3cuZ2VvcnNzLm9yZy9nZW9yc3MiIHhtbG5zOmdtbD0iaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWwiPjxpZD44ZTRjMWFkNi05MGQ3LTRjMDItOTgwYS1lOTRmMTAzOWYxMzg8L2lkPjx0aXRsZSAvPjx1cGRhdGVkPjIwMjMtMDktMTVUMTA6NTE6MDJaPC91cGRhdGVkPjxlbnRyeSBtOmV0YWc9IiZxdW90OzImcXVvdDsiPjxpZD5mM2ZiNWNiYS0yYTFiLTQ3MzktOGRkZC04YTgzODRmZGQ2ZDg8L2lkPjxjYXRlZ29yeSB0ZXJtPSJTUC5EYXRhLkRhdGFsaXN0TGlzdEl0ZW0iIHNjaGVtZT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9hZG8vMjAwNy8wOC9kYXRhc2VydmljZXMvc2NoZW1lIiAvPjxsaW5rIHJlbD0iZWRpdCIgaHJlZj0iV2ViL0xpc3RzKGd1aWQnNjUxYWEyNmYtNTMzMi00NjYwLTk3ZGUtYzNmMzIxYmNmOGZjJykvSXRlbXMoNikiIC8+PHRpdGxlIC8+PHVwZGF0ZWQ+MjAyMy0wOS0xNVQxMDo1MTowMlo8L3VwZGF0ZWQ+PGF1dGhvcj48bmFtZSAvPjwvYXV0aG9yPjxjb250ZW50IHR5cGU9ImFwcGxpY2F0aW9uL3htbCI+PG06cHJvcGVydGllcz48ZDpUZXN0VmFsdWUgbTp0eXBlPSJFZG0uRG91YmxlIj4xPC9kOlRlc3RWYWx1ZT48L206cHJvcGVydGllcz48L2NvbnRlbnQ+PC9lbnRyeT48ZW50cnkgbTpldGFnPSImcXVvdDsyJnF1b3Q7Ij48aWQ+MzZlZjdiYTMtZWM2Mi00MDY1LWJkODgtN2NmYzVmOGExZTlmPC9pZD48Y2F0ZWdvcnkgdGVybT0iU1AuRGF0YS5EYXRhbGlzdExpc3RJdGVtIiBzY2hlbWU9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYWRvLzIwMDcvMDgvZGF0YXNlcnZpY2VzL3NjaGVtZSIgLz48bGluayByZWw9ImVkaXQiIGhyZWY9IldlYi9MaXN0cyhndWlkJzY1MWFhMjZmLTUzMzItNDY2MC05N2RlLWMzZjMyMWJjZjhmYycpL0l0ZW1zKDcpIiAvPjx0aXRsZSAvPjx1cGRhdGVkPjIwMjMtMDktMTVUMTA6NTE6MDJaPC91cGRhdGVkPjxhdXRob3I+PG5hbWUgLz48L2F1dGhvcj48Y29udGVudCB0eXBlPSJhcHBsaWNhdGlvbi94bWwiPjxtOnByb3BlcnRpZXM+PGQ6VGVzdFZhbHVlIG06dHlwZT0iRWRtLkRvdWJsZSI+MjwvZDpUZXN0VmFsdWU+PC9tOnByb3BlcnRpZXM+PC9jb250ZW50PjwvZW50cnk+PC9mZWVkPg0K",
"$applicationHttp": {
"headers": {},
"body": {
"$content-type": "application/atom+xml; type=feed; charset=utf-8",
"$content": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48ZmVlZCB4bWw6YmFzZT0iaHR0cHM6Ly9leGFtcGxlLnNoYXJlcG9pbnQuY29tL3NpdGVzL3Rlc3RzaXRlL19hcGkvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwNS9BdG9tIiB4bWxuczpkPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2Fkby8yMDA3LzA4L2RhdGFzZXJ2aWNlcyIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9hZG8vMjAwNy8wOC9kYXRhc2VydmljZXMvbWV0YWRhdGEiIHhtbG5zOmdlb3Jzcz0iaHR0cDovL3d3dy5nZW9yc3Mub3JnL2dlb3JzcyIgeG1sbnM6Z21sPSJodHRwOi8vd3d3Lm9wZW5naXMubmV0L2dtbCI+PGlkPjhlNGMxYWQ2LTkwZDctNGMwMi05ODBhLWU5NGYxMDM5ZjEzODwvaWQ+PHRpdGxlIC8+PHVwZGF0ZWQ+MjAyMy0wOS0xNVQxMDo1MTowMlo8L3VwZGF0ZWQ+PGVudHJ5IG06ZXRhZz0iJnF1b3Q7MiZxdW90OyI+PGlkPmYzZmI1Y2JhLTJhMWItNDczOS04ZGRkLThhODM4NGZkZDZkODwvaWQ+PGNhdGVnb3J5IHRlcm09IlNQLkRhdGEuRGF0YWxpc3RMaXN0SXRlbSIgc2NoZW1lPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2Fkby8yMDA3LzA4L2RhdGFzZXJ2aWNlcy9zY2hlbWUiIC8+PGxpbmsgcmVsPSJlZGl0IiBocmVmPSJXZWIvTGlzdHMoZ3VpZCc2NTFhYTI2Zi01MzMyLTQ2NjAtOTdkZS1jM2YzMjFiY2Y4ZmMnKS9JdGVtcyg2KSIgLz48dGl0bGUgLz48dXBkYXRlZD4yMDIzLTA5LTE1VDEwOjUxOjAyWjwvdXBkYXRlZD48YXV0aG9yPjxuYW1lIC8+PC9hdXRob3I+PGNvbnRlbnQgdHlwZT0iYXBwbGljYXRpb24veG1sIj48bTpwcm9wZXJ0aWVzPjxkOlRlc3RWYWx1ZSBtOnR5cGU9IkVkbS5Eb3VibGUiPjE8L2Q6VGVzdFZhbHVlPjwvbTpwcm9wZXJ0aWVzPjwvY29udGVudD48L2VudHJ5PjxlbnRyeSBtOmV0YWc9IiZxdW90OzImcXVvdDsiPjxpZD4zNmVmN2JhMy1lYzYyLTQwNjUtYmQ4OC03Y2ZjNWY4YTFlOWY8L2lkPjxjYXRlZ29yeSB0ZXJtPSJTUC5EYXRhLkRhdGFsaXN0TGlzdEl0ZW0iIHNjaGVtZT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9hZG8vMjAwNy8wOC9kYXRhc2VydmljZXMvc2NoZW1lIiAvPjxsaW5rIHJlbD0iZWRpdCIgaHJlZj0iV2ViL0xpc3RzKGd1aWQnNjUxYWEyNmYtNTMzMi00NjYwLTk3ZGUtYzNmMzIxYmNmOGZjJykvSXRlbXMoNykiIC8+PHRpdGxlIC8+PHVwZGF0ZWQ+MjAyMy0wOS0xNVQxMDo1MTowMlo8L3VwZGF0ZWQ+PGF1dGhvcj48bmFtZSAvPjwvYXV0aG9yPjxjb250ZW50IHR5cGU9ImFwcGxpY2F0aW9uL3htbCI+PG06cHJvcGVydGllcz48ZDpUZXN0VmFsdWUgbTp0eXBlPSJFZG0uRG91YmxlIj4yPC9kOlRlc3RWYWx1ZT48L206cHJvcGVydGllcz48L2NvbnRlbnQ+PC9lbnRyeT48L2ZlZWQ+DQo="
},
"statusCode": 200
}
}
},
{
"headers": {
"Content-Type": "application/http",
"Content-Transfer-Encoding": "binary"
},
"body": {
"$content-type": "application/http; msgtype=response",
"$content": "SFRUUC8xLjEgMjAwIE9LDQpDT05URU5ULVRZUEU6IGFwcGxpY2F0aW9uL2F0b20reG1sO3R5cGU9ZmVlZDtjaGFyc2V0PXV0Zi04DQoNCjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+PGZlZWQgeG1sOmJhc2U9Imh0dHBzOi8vZXhhbXBsZS5zaGFyZXBvaW50LmNvbS9zaXRlcy90ZXN0c2l0ZS9fYXBpLyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvQXRvbSIgeG1sbnM6ZD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9hZG8vMjAwNy8wOC9kYXRhc2VydmljZXMiIHhtbG5zOm09Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYWRvLzIwMDcvMDgvZGF0YXNlcnZpY2VzL21ldGFkYXRhIiB4bWxuczpnZW9yc3M9Imh0dHA6Ly93d3cuZ2VvcnNzLm9yZy9nZW9yc3MiIHhtbG5zOmdtbD0iaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWwiPjxpZD5jYTQ1YTlmZS0xYTAxLTQ0YTUtYTRhOS00YmVjZjFiNDA2YTU8L2lkPjx0aXRsZSAvPjx1cGRhdGVkPjIwMjMtMDktMTVUMTA6NTE6MDJaPC91cGRhdGVkPjxlbnRyeSBtOmV0YWc9IiZxdW90OzImcXVvdDsiPjxpZD5kZmNiMmI1YS1hYTM3LTQyMWUtODNmMC01Njk5OTk0MDIzNzE8L2lkPjxjYXRlZ29yeSB0ZXJtPSJTUC5EYXRhLkRhdGFsaXN0Mkxpc3RJdGVtIiBzY2hlbWU9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYWRvLzIwMDcvMDgvZGF0YXNlcnZpY2VzL3NjaGVtZSIgLz48bGluayByZWw9ImVkaXQiIGhyZWY9IldlYi9MaXN0cyhndWlkJ2QzZWFjZGJjLTk3NmMtNDcwNy1hN2FhLTZlZmU3ZmQ5YmMzYycpL0l0ZW1zKDEpIiAvPjx0aXRsZSAvPjx1cGRhdGVkPjIwMjMtMDktMTVUMTA6NTE6MDJaPC91cGRhdGVkPjxhdXRob3I+PG5hbWUgLz48L2F1dGhvcj48Y29udGVudCB0eXBlPSJhcHBsaWNhdGlvbi94bWwiPjxtOnByb3BlcnRpZXM+PGQ6VGVzdFZhbHVlIG06dHlwZT0iRWRtLkRvdWJsZSI+MTAwMTwvZDpUZXN0VmFsdWU+PC9tOnByb3BlcnRpZXM+PC9jb250ZW50PjwvZW50cnk+PGVudHJ5IG06ZXRhZz0iJnF1b3Q7MiZxdW90OyI+PGlkPmZhZDhjZTJlLWNlNDUtNGJkOS1hZDIzLThmNDI2MjYwZDY3NDwvaWQ+PGNhdGVnb3J5IHRlcm09IlNQLkRhdGEuRGF0YWxpc3QyTGlzdEl0ZW0iIHNjaGVtZT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9hZG8vMjAwNy8wOC9kYXRhc2VydmljZXMvc2NoZW1lIiAvPjxsaW5rIHJlbD0iZWRpdCIgaHJlZj0iV2ViL0xpc3RzKGd1aWQnZDNlYWNkYmMtOTc2Yy00NzA3LWE3YWEtNmVmZTdmZDliYzNjJykvSXRlbXMoMikiIC8+PHRpdGxlIC8+PHVwZGF0ZWQ+MjAyMy0wOS0xNVQxMDo1MTowMlo8L3VwZGF0ZWQ+PGF1dGhvcj48bmFtZSAvPjwvYXV0aG9yPjxjb250ZW50IHR5cGU9ImFwcGxpY2F0aW9uL3htbCI+PG06cHJvcGVydGllcz48ZDpUZXN0VmFsdWUgbTp0eXBlPSJFZG0uRG91YmxlIj4xMDAyPC9kOlRlc3RWYWx1ZT48L206cHJvcGVydGllcz48L2NvbnRlbnQ+PC9lbnRyeT48L2ZlZWQ+DQo=",
"$applicationHttp": {
"headers": {},
"body": {
"$content-type": "application/atom+xml; type=feed; charset=utf-8",
"$content": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48ZmVlZCB4bWw6YmFzZT0iaHR0cHM6Ly9leGFtcGxlLnNoYXJlcG9pbnQuY29tL3NpdGVzL3Rlc3RzaXRlL19hcGkvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwNS9BdG9tIiB4bWxuczpkPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2Fkby8yMDA3LzA4L2RhdGFzZXJ2aWNlcyIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9hZG8vMjAwNy8wOC9kYXRhc2VydmljZXMvbWV0YWRhdGEiIHhtbG5zOmdlb3Jzcz0iaHR0cDovL3d3dy5nZW9yc3Mub3JnL2dlb3JzcyIgeG1sbnM6Z21sPSJodHRwOi8vd3d3Lm9wZW5naXMubmV0L2dtbCI+PGlkPmNhNDVhOWZlLTFhMDEtNDRhNS1hNGE5LTRiZWNmMWI0MDZhNTwvaWQ+PHRpdGxlIC8+PHVwZGF0ZWQ+MjAyMy0wOS0xNVQxMDo1MTowMlo8L3VwZGF0ZWQ+PGVudHJ5IG06ZXRhZz0iJnF1b3Q7MiZxdW90OyI+PGlkPmRmY2IyYjVhLWFhMzctNDIxZS04M2YwLTU2OTk5OTQwMjM3MTwvaWQ+PGNhdGVnb3J5IHRlcm09IlNQLkRhdGEuRGF0YWxpc3QyTGlzdEl0ZW0iIHNjaGVtZT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9hZG8vMjAwNy8wOC9kYXRhc2VydmljZXMvc2NoZW1lIiAvPjxsaW5rIHJlbD0iZWRpdCIgaHJlZj0iV2ViL0xpc3RzKGd1aWQnZDNlYWNkYmMtOTc2Yy00NzA3LWE3YWEtNmVmZTdmZDliYzNjJykvSXRlbXMoMSkiIC8+PHRpdGxlIC8+PHVwZGF0ZWQ+MjAyMy0wOS0xNVQxMDo1MTowMlo8L3VwZGF0ZWQ+PGF1dGhvcj48bmFtZSAvPjwvYXV0aG9yPjxjb250ZW50IHR5cGU9ImFwcGxpY2F0aW9uL3htbCI+PG06cHJvcGVydGllcz48ZDpUZXN0VmFsdWUgbTp0eXBlPSJFZG0uRG91YmxlIj4xMDAxPC9kOlRlc3RWYWx1ZT48L206cHJvcGVydGllcz48L2NvbnRlbnQ+PC9lbnRyeT48ZW50cnkgbTpldGFnPSImcXVvdDsyJnF1b3Q7Ij48aWQ+ZmFkOGNlMmUtY2U0NS00YmQ5LWFkMjMtOGY0MjYyNjBkNjc0PC9pZD48Y2F0ZWdvcnkgdGVybT0iU1AuRGF0YS5EYXRhbGlzdDJMaXN0SXRlbSIgc2NoZW1lPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2Fkby8yMDA3LzA4L2RhdGFzZXJ2aWNlcy9zY2hlbWUiIC8+PGxpbmsgcmVsPSJlZGl0IiBocmVmPSJXZWIvTGlzdHMoZ3VpZCdkM2VhY2RiYy05NzZjLTQ3MDctYTdhYS02ZWZlN2ZkOWJjM2MnKS9JdGVtcygyKSIgLz48dGl0bGUgLz48dXBkYXRlZD4yMDIzLTA5LTE1VDEwOjUxOjAyWjwvdXBkYXRlZD48YXV0aG9yPjxuYW1lIC8+PC9hdXRob3I+PGNvbnRlbnQgdHlwZT0iYXBwbGljYXRpb24veG1sIj48bTpwcm9wZXJ0aWVzPjxkOlRlc3RWYWx1ZSBtOnR5cGU9IkVkbS5Eb3VibGUiPjEwMDI8L2Q6VGVzdFZhbHVlPjwvbTpwcm9wZXJ0aWVzPjwvY29udGVudD48L2VudHJ5PjwvZmVlZD4NCg=="
},
"statusCode": 200
}
}
}
]
}
base64 エンコードされているところをデコードすると、以下のような内容です。
--batchresponse_9f3d3530-6fde-4fe8-9250-1d54372cceed
Content-Type: application/http
Content-Transfer-Encoding: binary
HTTP/1.1 200 OK
CONTENT-TYPE: application/atom+xml;type=feed;charset=utf-8
<?xml version="1.0" encoding="utf-8"?><feed xml:base="https://example.sharepoint.com/sites/testsite/_api/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"><id>8e4c1ad6-90d7-4c02-980a-e94f1039f138</id><title /><updated>2023-09-15T10:51:02Z</updated><entry m:etag=""2""><id>f3fb5cba-2a1b-4739-8ddd-8a8384fdd6d8</id><category term="SP.Data.DatalistListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /><link rel="edit" href="Web/Lists(guid'651aa26f-5332-4660-97de-c3f321bcf8fc')/Items(6)" /><title /><updated>2023-09-15T10:51:02Z</updated><author><name /></author><content type="application/xml"><m:properties><d:TestValue m:type="Edm.Double">1</d:TestValue></m:properties></content></entry><entry m:etag=""2""><id>36ef7ba3-ec62-4065-bd88-7cfc5f8a1e9f</id><category term="SP.Data.DatalistListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /><link rel="edit" href="Web/Lists(guid'651aa26f-5332-4660-97de-c3f321bcf8fc')/Items(7)" /><title /><updated>2023-09-15T10:51:02Z</updated><author><name /></author><content type="application/xml"><m:properties><d:TestValue m:type="Edm.Double">2</d:TestValue></m:properties></content></entry></feed>
--batchresponse_9f3d3530-6fde-4fe8-9250-1d54372cceed
Content-Type: application/http
Content-Transfer-Encoding: binary
HTTP/1.1 200 OK
CONTENT-TYPE: application/atom+xml;type=feed;charset=utf-8
<?xml version="1.0" encoding="utf-8"?><feed xml:base="https://example.sharepoint.com/sites/testsite/_api/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"><id>ca45a9fe-1a01-44a5-a4a9-4becf1b406a5</id><title /><updated>2023-09-15T10:51:02Z</updated><entry m:etag=""2""><id>dfcb2b5a-aa37-421e-83f0-569999402371</id><category term="SP.Data.Datalist2ListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /><link rel="edit" href="Web/Lists(guid'd3eacdbc-976c-4707-a7aa-6efe7fd9bc3c')/Items(1)" /><title /><updated>2023-09-15T10:51:02Z</updated><author><name /></author><content type="application/xml"><m:properties><d:TestValue m:type="Edm.Double">1001</d:TestValue></m:properties></content></entry><entry m:etag=""2""><id>fad8ce2e-ce45-4bd9-ad23-8f426260d674</id><category term="SP.Data.Datalist2ListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /><link rel="edit" href="Web/Lists(guid'd3eacdbc-976c-4707-a7aa-6efe7fd9bc3c')/Items(2)" /><title /><updated>2023-09-15T10:51:02Z</updated><author><name /></author><content type="application/xml"><m:properties><d:TestValue m:type="Edm.Double">1002</d:TestValue></m:properties></content></entry></feed>
--batchresponse_9f3d3530-6fde-4fe8-9250-1d54372cceed--
HTTP/1.1 200 OK
CONTENT-TYPE: application/atom+xml;type=feed;charset=utf-8
<?xml version="1.0" encoding="utf-8"?><feed xml:base="https://example.sharepoint.com/sites/testsite/_api/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"><id>8e4c1ad6-90d7-4c02-980a-e94f1039f138</id><title /><updated>2023-09-15T10:51:02Z</updated><entry m:etag=""2""><id>f3fb5cba-2a1b-4739-8ddd-8a8384fdd6d8</id><category term="SP.Data.DatalistListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /><link rel="edit" href="Web/Lists(guid'651aa26f-5332-4660-97de-c3f321bcf8fc')/Items(6)" /><title /><updated>2023-09-15T10:51:02Z</updated><author><name /></author><content type="application/xml"><m:properties><d:TestValue m:type="Edm.Double">1</d:TestValue></m:properties></content></entry><entry m:etag=""2""><id>36ef7ba3-ec62-4065-bd88-7cfc5f8a1e9f</id><category term="SP.Data.DatalistListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /><link rel="edit" href="Web/Lists(guid'651aa26f-5332-4660-97de-c3f321bcf8fc')/Items(7)" /><title /><updated>2023-09-15T10:51:02Z</updated><author><name /></author><content type="application/xml"><m:properties><d:TestValue m:type="Edm.Double">2</d:TestValue></m:properties></content></entry></feed>
<?xml version="1.0" encoding="utf-8"?><feed xml:base="https://example.sharepoint.com/sites/testsite/_api/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"><id>8e4c1ad6-90d7-4c02-980a-e94f1039f138</id><title /><updated>2023-09-15T10:51:02Z</updated><entry m:etag=""2""><id>f3fb5cba-2a1b-4739-8ddd-8a8384fdd6d8</id><category term="SP.Data.DatalistListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /><link rel="edit" href="Web/Lists(guid'651aa26f-5332-4660-97de-c3f321bcf8fc')/Items(6)" /><title /><updated>2023-09-15T10:51:02Z</updated><author><name /></author><content type="application/xml"><m:properties><d:TestValue m:type="Edm.Double">1</d:TestValue></m:properties></content></entry><entry m:etag=""2""><id>36ef7ba3-ec62-4065-bd88-7cfc5f8a1e9f</id><category term="SP.Data.DatalistListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /><link rel="edit" href="Web/Lists(guid'651aa26f-5332-4660-97de-c3f321bcf8fc')/Items(7)" /><title /><updated>2023-09-15T10:51:02Z</updated><author><name /></author><content type="application/xml"><m:properties><d:TestValue m:type="Edm.Double">2</d:TestValue></m:properties></content></entry></feed>
HTTP/1.1 200 OK
CONTENT-TYPE: application/atom+xml;type=feed;charset=utf-8
<?xml version="1.0" encoding="utf-8"?><feed xml:base="https://example.sharepoint.com/sites/testsite/_api/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"><id>ca45a9fe-1a01-44a5-a4a9-4becf1b406a5</id><title /><updated>2023-09-15T10:51:02Z</updated><entry m:etag=""2""><id>dfcb2b5a-aa37-421e-83f0-569999402371</id><category term="SP.Data.Datalist2ListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /><link rel="edit" href="Web/Lists(guid'd3eacdbc-976c-4707-a7aa-6efe7fd9bc3c')/Items(1)" /><title /><updated>2023-09-15T10:51:02Z</updated><author><name /></author><content type="application/xml"><m:properties><d:TestValue m:type="Edm.Double">1001</d:TestValue></m:properties></content></entry><entry m:etag=""2""><id>fad8ce2e-ce45-4bd9-ad23-8f426260d674</id><category term="SP.Data.Datalist2ListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /><link rel="edit" href="Web/Lists(guid'd3eacdbc-976c-4707-a7aa-6efe7fd9bc3c')/Items(2)" /><title /><updated>2023-09-15T10:51:02Z</updated><author><name /></author><content type="application/xml"><m:properties><d:TestValue m:type="Edm.Double">1002</d:TestValue></m:properties></content></entry></feed>
<?xml version="1.0" encoding="utf-8"?><feed xml:base="https://example.sharepoint.com/sites/testsite/_api/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"><id>ca45a9fe-1a01-44a5-a4a9-4becf1b406a5</id><title /><updated>2023-09-15T10:51:02Z</updated><entry m:etag=""2""><id>dfcb2b5a-aa37-421e-83f0-569999402371</id><category term="SP.Data.Datalist2ListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /><link rel="edit" href="Web/Lists(guid'd3eacdbc-976c-4707-a7aa-6efe7fd9bc3c')/Items(1)" /><title /><updated>2023-09-15T10:51:02Z</updated><author><name /></author><content type="application/xml"><m:properties><d:TestValue m:type="Edm.Double">1001</d:TestValue></m:properties></content></entry><entry m:etag=""2""><id>fad8ce2e-ce45-4bd9-ad23-8f426260d674</id><category term="SP.Data.Datalist2ListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /><link rel="edit" href="Web/Lists(guid'd3eacdbc-976c-4707-a7aa-6efe7fd9bc3c')/Items(2)" /><title /><updated>2023-09-15T10:51:02Z</updated><author><name /></author><content type="application/xml"><m:properties><d:TestValue m:type="Edm.Double">1002</d:TestValue></m:properties></content></entry></feed>
1 アクションで 2 行追加
Power Automate SharePoint に HTTP 要求を送信します
アクション を使って、SharePoint のリストに対して、1 アクションで 2 行追加を行います。
前のセクションの「1 アクションで 2 リストデータ取得」は実施済みとして、SharePoint に HTTP 要求を送信します
アクション
の ボディ だけ変えます。
作成していない場合は、「1 アクションで 2 リストデータ取得」まで戻って、
SharePoint に HTTP 要求を送信します
アクション追加まで実施してください。
以下の内容を設定します。
意味は、
SharePoint サイト:https://example.sharepoint.com/sites/testsite/
の
datalist リストに
タイトル=A
、テスト値=3
タイトル=A
、テスト値=4
と2行追加して、結果、以下のようにするという意味です。
タイトル | テスト値 |
---|---|
A | 1 |
A | 2 |
A | 3 |
A | 4 |
--batch_<BatchID>
Content-Type: multipart/mixed; boundary="changeset_<ChangesetID>"
--changeset_<ChangesetID>
Content-Type: application/http
Content-Transfer-Encoding: binary
POST https://<SharePointサイト>/_api/web/lists/getbytitle('<リスト名>')/items HTTP/1.1
Content-Type: application/json;odata=nometadata
{
"<追加対象列名1>":"<追加する値1>",
"<追加対象列名2>":"<追加する値2>",
...
}
以降、
--changeset_<ChangesetID>
から繰り返し
--batch_@{outputs('BatchID')}
Content-Type: multipart/mixed; boundary="changeset_@{outputs('ChangesetID')}"
--changeset_@{outputs('ChangesetID')}
Content-Type: application/http
Content-Transfer-Encoding: binary
POST https://example.sharepoint.com/sites/testsite/_api/web/lists/getbytitle('datalist')/items HTTP/1.1
Content-Type: application/json;odata=nometadata
{"Title":"A","TestValue":"3"}
--changeset_@{outputs('ChangesetID')}
Content-Type: application/http
Content-Transfer-Encoding: binary
POST https://example.sharepoint.com/sites/testsite/_api/web/lists/getbytitle('datalist')/items HTTP/1.1
Content-Type: application/json;odata=nometadata
{"Title":"A","TestValue":"4"}
--changeset_@{outputs('ChangesetID')}--
--batch_@{outputs('BatchID')}--
成功しました!
"statusCode": 201
の場合、追加成功です。
1 アクションで 2 行更新
Power Automate SharePoint に HTTP 要求を送信します
アクション を使って、SharePoint のリストに対して、1 アクションで 2 行更新を行います。
「1 アクションで 2 リストデータ取得」は実施済みとして、SharePoint に HTTP 要求を送信します
アクション
の ボディ だけ変えます。
作成していない場合は、「1 アクションで 2 リストデータ取得」まで戻って、
SharePoint に HTTP 要求を送信します
アクション追加まで実施してください。
以下の内容を設定します。
意味は、
SharePoint サイト:https://example.sharepoint.com/sites/testsite/
の
datalist リスト
テスト値=2
とテスト値=3
の2レコードに関して、
タイトル=A_X
と更新して、結果、以下のようにするという意味です。
タイトル | テスト値 |
---|---|
A | 1 |
A_X | 2 |
A_X | 3 |
A | 4 |
なお、説明の簡略化のため、該当レコードの ID の値は、ID 列を表示して、把握済みとします。フローで把握する場合、複数の項目の取得
などで把握することになると思います。
今回の場合、7
と 16
です。
また、"__metadata":{"type":"SP.Data.<リスト名>ListItem"},
の <リスト名>
の部分ですが、頭が大文字である必要があります。小文字の場合、動作しません。
例:リスト名が datalist → "__metadata":{"type":"SP.Data.DatalistListItem"},
--batch_<BatchID>
Content-Type: multipart/mixed; boundary="changeset_<ChangesetID>"
--changeset_<ChangesetID>
Content-Type: application/http
Content-Transfer-Encoding: binary
PATCH https://<SharePointサイト>/_api/web/lists/getByTitle('<リスト名>')/items(<ID>) HTTP/1.1
Content-Type: application/json;odata=verbose
IF-MATCH: *
{
"__metadata":{"type":"SP.Data.<頭大文字のリスト名>ListItem"},
"<更新対象列名1>":"<更新後の値1>",
"<更新対象列名2>":"<更新後の値2>",
...
}
以降、
--changeset_<ChangesetID>
から繰り返し
IF-MATCH: *
は必須です。
更新対象の ETag の条件を指定するものですが、把握するのは大変なので、*
です。
無い場合、
-1, Microsoft.SharePoint.Client.ClientServiceException
要求 ETag 値 '' がオブジェクトの ETag 値 '"ca053fd8-7c02-4b31-85e1-17c3144a8183,3"' と一致しません。"statusCode": 412
とエラーになり、更新できません。
また、Content-Type: application/json;odata=varbose
は必須です。
無い場合、
-1, Microsoft.SharePoint.Client.InvalidClientQueryException
プロパティ '__metadata' は型 'SP.Data.DatalistListItem' に存在しません。型で定義されているプロパティ名のみ使用してください。"statusCode": 400
とエラーになり、更新できません。
--batch_@{outputs('BatchID')}
Content-Type: multipart/mixed; boundary="changeset_@{outputs('ChangesetID')}"
--changeset_@{outputs('ChangesetID')}
Content-Type: application/http
Content-Transfer-Encoding: binary
PATCH https://example.sharepoint.com/sites/testsite/_api/web/lists/getByTitle('datalist')/items(7) HTTP/1.1
Content-Type: application/json;odata=varbose
IF-MATCH: *
{
"__metadata":{"type":"SP.Data.DatalistListItem"},
"Title":"A_X"
}
--changeset_@{outputs('ChangesetID')}
Content-Type: application/http
Content-Transfer-Encoding: binary
PATCH https://example.sharepoint.com/sites/testsite/_api/web/lists/getByTitle('datalist')/items(16) HTTP/1.1
Content-Type: application/json;odata=varbose
IF-MATCH: *
{
"__metadata":{"type":"SP.Data.DatalistListItem"},
"Title":"A_X"
}
--changeset_@{outputs('ChangesetID')}--
--batch_@{outputs('BatchID')}--
成功しました!
"statusCode": 204
の場合、更新成功です。
1 アクションで 2 行削除
Power Automate SharePoint に HTTP 要求を送信します
アクション を使って、SharePoint のリストに対して、1 アクションで 2 行削除を行います。
「1 アクションで 2 リストデータ取得」は実施済みとして、SharePoint に HTTP 要求を送信します
アクション
の ボディ だけ変えます。
作成していない場合は、「1 アクションで 2 リストデータ取得」まで戻って、
SharePoint に HTTP 要求を送信します
アクション追加まで実施してください。
以下の内容を設定します。
意味は、
SharePoint サイト:https://example.sharepoint.com/sites/testsite/
の
datalist リスト
テスト値=2
とテスト値=3
の2レコードを削除し、
結果、以下のようにするという意味です。
タイトル | テスト値 |
---|---|
A | 1 |
A | 4 |
なお、説明の簡略化のため、該当レコードの ID の値は、ID 列を表示して、把握済みとします。フローで把握する場合、複数の項目の取得
などで把握することになると思います。
今回の場合、7
と 16
です。
前セクション「1 アクションで 2 行更新」と共通の注意点の説明は、省略します。
--batch_<BatchID>
Content-Type: multipart/mixed; boundary="changeset_<ChangesetID>"
--changeset_<ChangesetID>
Content-Type: application/http
Content-Transfer-Encoding: binary
DELETE https://<SharePointサイト>/_api/web/lists/getByTitle('<リスト名>')/items(<ID>) HTTP/1.1
Content-Type: application/json;odata=verbose
Accept: application/json;odata=nometadata
IF-MATCH: *
以降、
--changeset_<ChangesetID>
から繰り返し
--batch_@{outputs('BatchID')}
Content-Type: multipart/mixed; boundary="changeset_@{outputs('ChangesetID')}"
--changeset_@{outputs('ChangesetID')}
Content-Type: application/http
Content-Transfer-Encoding: binary
DELETE https://example.sharepoint.com/sites/testsite/_api/web/lists/getByTitle('datalist')/items(7) HTTP/1.1
Content-Type: application/json;odata=verbose
Accept: application/json;odata=nometadata
IF-MATCH: *
--changeset_@{outputs('ChangesetID')}
Content-Type: application/http
Content-Transfer-Encoding: binary
DELETE https://example.sharepoint.com/sites/testsite/_api/web/lists/getByTitle('datalist')/items(16) HTTP/1.1
Content-Type: application/json;odata=verbose
Accept: application/json;odata=nometadata
IF-MATCH: *
--changeset_@{outputs('ChangesetID')}--
--batch_@{outputs('BatchID')}--
成功しました!
"statusCode": 200
の場合、削除成功です。
上限について
1回のリクエストでリクエストを何回分含めることができるか、上限を探ってみました。
1回のリクエストの「上限 100 説」は見つかったのですが、明確に 100 と言っている記事は見当たりませんでした。
結論から言いますと、GET(取得)は、99 件、それ以外の更新系の上限は、1000 件のようです。
今回の記事の場合です。時期やライセンス、リクエスト内容、データによって異なる可能性がありますので、あくまで参考情報として捉えて、事前に実際に確認してください。
ボディに何個リクエストを含められるかの話ではないですが、
GET https://example.sharepoint.com/sites/testsite/_api/web/lists/getbytitle('datalist')/items?$select=TestValue HTTP/1.1
の場合、100 件の結果まで得られました。
1度に大量のデータ取得の場合、
複数の項目の取得
アクションを使用する場合、1アクション実行で 5000 件取得できます。工夫すれば、さらに多く取得できます。
以下は、実際にやってみた結果です。
以下のようにシェルスクリプトで、指定の数量のリクエストが発行できるようにボディ部分を生成、コピペして、確認しました。
なお、GET(取得)は、ID でフィルタして、1 件ずつ取り出しています。
データ量が多くなると、コピペするだけで時間がかかりました。
#!/bin/bash
start=$1
end=$2
echo "--batch_@{outputs('BatchID')}"
echo "Content-Type: multipart/mixed; boundary=\"changeset_@{outputs('ChangesetID')}\""
for i in $(seq $start $end)
do
echo ""
echo "--batch_@{outputs('BatchID')}"
echo "Content-Type: application/http"
echo "Content-Transfer-Encoding: binary"
echo ""
echo "GET https://example.sharepoint.com/sites/testsite/_api/web/lists/getbytitle('datalist')/items?\$filter=ID eq $i HTTP/1.1"
echo "Accept: application/json;odata=nometadata"
done
echo ""
echo "--batch_@{outputs('BatchID')}--"
#!/bin/bash
count=$1
echo "--batch_@{outputs('BatchID')}"
echo "Content-Type: multipart/mixed; boundary=\"changeset_@{outputs('ChangesetID')}\""
for i in $(seq 1 $count)
do
echo ""
echo "--changeset_@{outputs('ChangesetID')}"
echo "Content-Type: application/http"
echo "Content-Transfer-Encoding: binary"
echo ""
echo "POST https://example.sharepoint.com/sites/testsite/_api/web/lists/getbytitle('datalist')/items HTTP/1.1"
echo "Content-Type: application/json;odata=nometadata"
echo ""
echo "{\"Title\":\"A\",\"TestValue\":\"$i\"}"
done
echo ""
echo "--changeset_@{outputs('ChangesetID')}--"
echo "--batch_@{outputs('BatchID')}--"
#!/bin/bash
start=$1
end=$2
echo "--batch_@{outputs('BatchID')}"
echo "Content-Type: multipart/mixed; boundary=\"changeset_@{outputs('ChangesetID')}\""
for i in $(seq $start $end)
do
echo ""
echo "--changeset_@{outputs('ChangesetID')}"
echo "Content-Type: application/http"
echo "Content-Transfer-Encoding: binary"
echo ""
echo "PATCH https://example.sharepoint.com/sites/testsite/_api/web/lists/getByTitle('datalist')/items($i) HTTP/1.1"
echo "Content-Type: application/json;odata=verbose"
echo "IF-MATCH: *"
echo ""
echo "{\"__metadata\":{\"type\":\"SP.Data.DatalistListItem\"},\"Title\":\"A_X\"}"
done
echo ""
echo "--changeset_@{outputs('ChangesetID')}--"
echo "--batch_@{outputs('BatchID')}--"
#!/bin/bash
start=$1
end=$2
echo "--batch_@{outputs('BatchID')}"
echo "Content-Type: multipart/mixed; boundary=\"changeset_@{outputs('ChangesetID')}\""
for i in $(seq $start $end)
do
echo ""
echo "--changeset_@{outputs('ChangesetID')}"
echo "Content-Type: application/http"
echo "Content-Transfer-Encoding: binary"
echo ""
echo "DELETE https://example.sharepoint.com/sites/testsite/_api/web/lists/getByTitle('datalist')/items($i) HTTP/1.1"
echo "Content-Type: application/json;odata=verbose"
echo "Accept: application/json;odata=nometadata"
echo "IF-MATCH: *"
done
echo ""
echo "--changeset_@{outputs('ChangesetID')}--"
echo "--batch_@{outputs('BatchID')}--"
結果は、以下のようになりました。
実行内容 | 実行時間 | 結果 |
---|---|---|
99 件取得 | 1 秒 | OK |
100 件取得 | 1 秒 | エラー |
101 件取得 | 1 秒 | エラー |
1000 件追加 | 1 分 13 秒 | OK |
1001 件追加 | 46 秒 | エラー (1000 件追加されていた。) |
1000 件更新 | 32 秒 | OK |
1001 件更新 | 31 秒 | エラー (1000 件更新されていた。) |
1000 件削除 | 59 秒 | OK |
1001 件削除 | 45 秒 | エラー (1000 件削除されていた。) |
取得のエラーは、
現在のバッチ メッセージに含まれているパーツが多すぎます。バッチ メッセージで許可されるクエリ操作および変更セットは最大 '100' 件です。
というエラーです。
エラー内容から、100 が上限かと思います。(99 はセーフ。100 は、エラー。)
追加、更新、削除のエラーは、全て、
現在の変更セットに含まれている操作が多すぎます。変更セットで許可される操作は最大 '1000' 件です。
というエラーです。
エラー内容から、1000 が上限かと思います。(1000 はセーフ。1001 は、エラー。)
今回は、掲載を見送りましたが、
それぞれに適用する(Apply to each)
やDo until
アクションを使って、900 件ずつリクエストして、5000 件を超えて、追加、更新、削除ができました。OData $batch の場合、アクションの実行回数を減らせるとともに、実行時間が圧倒的に短く済みます。
その他、宣伝、誹謗中傷等、当方が不適切と判断した書き込みは、理由の如何を問わず、投稿者に断りなく削除します。
書き込み内容について、一切の責任を負いません。
このコメント機能は、予告無く廃止する可能性があります。ご了承ください。
コメントの削除をご依頼の場合はTwitterのDM等でご連絡ください。