はじめに
SharePointリストの複数項目の取得には、条件に合った項目を一度に取得するための検索クエリがあります。
今回は要求として、元となる配列を使った条件を実装してみます。
サンプルリスト
実際的ではありませんが、サンプルイメージで説明します。
その商品を購入した伝票リストがあります。商品は複数登録できます。

伝票の詳細を取得しても、商品の情報はIdとValue(商品名)しかありません。

価格などの詳細を取得したい場合には、それぞれの商品の詳細を取得する必要があります。この商品詳細の取得をスマートに行いたいというのが今回の内容です。
そもそも構文があるのか?
先ほど掲載したリファレンスを見てみると、使用できる演算子の一覧が記載されています。
上記の演算子の中にはcontainsやinのような配列をサポートするものがなく、1つの演算子で配列を指定してクエリを書くことはできないようです。
Id contains [7,13,44,47]
Id in [7,13,44,47]
Id eq "7,13,44,47"
通常のやり方(Power Automate フロー)
上記の通り、配列をサポートした赤穂文がないため、通常は1件ずつ取得することになります。
繰り返しアクションを使って、Idで1件ずつ取得し、結果を変数にまとめるような感じですね。

ただし、この方法では繰り返しアクションになっている分、複数回のリクエストを送信し、Power Automateの実行数や実行時間を無駄に消費してしまいます。
じゃあどうする?力業だ!
なので、できればフィルタークエリを利用して、1度のリクエストでまとめて取得したいのが本望です。

しかしながら、配列のサポートはされていないことは先ほど確認しました。
じゃあどうするか?サポートされている演算子で実装しましょう!
ID eq 7 or ID eq 13 or ID eq 44 or ID eq 47
この文字列をうまいことフローで用意してあげればいいのです。
力業のサンプル(# Power Automate フローのサンプル)
ということでやってみましょう!
力業のクエリ文字列を作成するためには、データ操作アクションを使用します。
選択
from(元)には伝票リストに登録された①複数商品を設定します。その後、②のボタンを押してmap(マップ)の入力モードを切り替えます。

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

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

concat(
'ID eq ',
item()?['Id']
)
結合
選択アクションで作成したクエリ文字の配列を、orでつないで1つの長い文字列にします。
join関数、もしくは結合アクションを使用します。

orの前後には半角スペースが必要なので、忘れないようにしましょう。
or
取得
最後に、作成された文字をフィルタークエリに使用して、複数項目の取得アクションを使用すれば完了です。

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

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






