14
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SharePoint ODataクエリで「配列に含まれる」を再現したい

14
Last updated at Posted at 2025-12-05

はじめに

SharePointリストの複数項目の取得には、条件に合った項目を一度に取得するための検索クエリがあります。

今回は要求として、元となる配列を使った条件を実装してみます。

サンプルリスト

実際的ではありませんが、サンプルイメージで説明します。

商品のマスタとなるリストがあります。
image.png

その商品を購入した伝票リストがあります。商品は複数登録できます。
image.png

伝票の詳細を取得しても、商品の情報はIdValue(商品名)しかありません。
image.png

価格などの詳細を取得したい場合には、それぞれの商品の詳細を取得する必要があります。この商品詳細の取得をスマートに行いたいというのが今回の内容です。

そもそも構文があるのか?

先ほど掲載したリファレンスを見てみると、使用できる演算子の一覧が記載されています。

image.png

上記の演算子の中にはcontainsinのような配列をサポートするものがなく、1つの演算子で配列を指定してクエリを書くことはできないようです。

使えないクエリの例
Id contains [7,13,44,47]
Id in [7,13,44,47]
Id eq "7,13,44,47"

通常のやり方(Power Automate フロー)

上記の通り、配列をサポートした赤穂文がないため、通常は1件ずつ取得することになります。
繰り返しアクションを使って、Idで1件ずつ取得し、結果を変数にまとめるような感じですね。
image.png

ただし、この方法では繰り返しアクションになっている分、複数回のリクエストを送信し、Power Automateの実行数や実行時間を無駄に消費してしまいます。

じゃあどうする?力業だ!

なので、できればフィルタークエリを利用して、1度のリクエストでまとめて取得したいのが本望です。
image.png

しかしながら、配列のサポートはされていないことは先ほど確認しました。
じゃあどうするか?サポートされている演算子で実装しましょう!

ということで、このようにしちゃえば解決ですね!
image.png

力業のクエリ
ID eq 7 or ID eq 13 or ID eq 44 or ID eq 47

この文字列をうまいことフローで用意してあげればいいのです。

力業のサンプル(# Power Automate フローのサンプル)

ということでやってみましょう!
力業のクエリ文字列を作成するためには、データ操作アクションを使用します。

選択

もとの配列を、条件クエリの形に加工します。
image.png

from(元)には伝票リストに登録された①複数商品を設定します。その後、②のボタンを押してmap(マップ)の入力モードを切り替えます。
image.png

map(マップ)にはクエリ文字を書きたいので、下記のようにしたいところなのですが、空白文字があったりするとうまく読み込んでもらえません。
image.png

代替案として、空白文字も含めた文字結合の数式にまとめて、構文エラーを誤魔化します。
image.png

マップ
concat(
  'ID eq ',
  item()?['Id']
)

結合

選択アクションで作成したクエリ文字の配列を、orでつないで1つの長い文字列にします。
join関数、もしくは結合アクションを使用します。
image.png

orの前後には半角スペースが必要なので、忘れないようにしましょう。

joinWith(次と結合する)
 or 

取得

最後に、作成された文字をフィルタークエリに使用して、複数項目の取得アクションを使用すれば完了です。
image.png

たった4件の取得でしたが、実行時間を確認すると、1件ずつだと3秒、まとめて取得すると0.4秒という有意な差が確認できました。時間だけでなく実行回数も節約できるのでお得ですね。
image.png

繰り返しアクションは、設定からコンカレンシー制御(同時実行管理)を有効にすると、同時に複数件の実行ができるため、処理時間が速くなります。
image.png
ただし、その場合も実行数は減らせません。

注意点

力業で実行しているため、注意点もあります。
あまりに長いリクエスト(フィルタークエリ)になってしまった場合は実行エラーとなります。

image.png
image.png

上記の例で、IDを1~100程度であればエラーなく実行できました。
サイトURLなども含めたリクエストが2048文字を超えるとエラーになるそうですが、正確なリファレンスは見つかりませんでしたので、あくまで目安としてとらえてください。

14
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?