CAML(Collaborative Application Markup Language) は、XMLベースの言語で、クエリを実行することで条件に一致したSharePointリストのアイテムを取得することができます。
この記事では、PowerShellを使用してSharePointのCAMLクエリにおいて複数のOr (And)を組み合わせる方法をご紹介します。
CALMクエリの実行方法
PnP PowerShellモジュールを使用した場合のCAMLクエリの実行方法をご紹介します。
※ PnP PowerShellモジュールについての説明は割愛させていただきます。
Get-PnPListItemコマンドでリストアイテムを取得する際に、Queryパラメーターにクエリを指定することで実行されます。
# SPOサイトに接続
Connect-PnPOnline -Url {サイトURL} -ClientId {クライアントID} -Tenant {テナントID} -Thumbprint {証明書の拇印}
# 実行したいクエリを定義
$query = "<View>
<Query>
<Where>
<Or>
<Eq>
<FieldRef Name='status'/>
<Value Type='Text'>状態1</Value>
</Eq>
<Eq>
<FieldRef Name='status'/>
<Value Type='Text'>状態2</Value>
</Eq>
</Or>
</Where>
</Query>
</View>"
# リストアイテムを取得
$spoListItem = @(Get-PnPListItem -List {リスト名} -Query $query)
クエリの紹介
Orが2つの場合のCAMLクエリ
以下のコードは、「status」列の値が「状態1」または「状態2」のアイテムのみを取得するクエリです。
1つのOr要素の中に2つの要素を記述できます。
<View>
<Query>
<Where>
<Or>
<Eq>
<FieldRef Name='status'/>
<Value Type='Text'>状態1</Value>
</Eq>
<Eq>
<FieldRef Name='status'/>
<Value Type='Text'>状態2</Value>
</Eq>
</Or>
</Where>
</Query>
</View>
Orが3つの場合のCAMLクエリ
以下のコードは、「status」列の値が「状態1」または「状態2」または「状態3」のアイテムのみを取得するクエリです。
OrやAndで囲えるのは2要素までなので、先ほどのコードと比べOr要素が増えています。
<View>
<Query>
<Where>
<Or>
<Eq>
<FieldRef Name='status'/>
<Value Type='Text'>状態1</Value>
</Eq>
<Or>
<Eq>
<FieldRef Name='status'/>
<Value Type='Text'>状態2</Value>
</Eq>
<Eq>
<FieldRef Name='status'/>
<Value Type='Text'>状態3</Value>
</Eq>
</Or>
</Or>
</Where>
</Query>
</View>
Orが4つの場合のCAMLクエリ
以下のコードは、「status」列の値が「状態1」または「状態2」または「状態3」または「状態4」のアイテムのみを取得するクエリです。
先ほどのコードと同様に、3つ以上の要素をOrでつなげたい場合は入れ子にする必要があります。
<View>
<Query>
<Where>
<Or>
<Eq>
<FieldRef Name='status'/>
<Value Type='Text'>状態1</Value>
</Eq>
<Or>
<Eq>
<FieldRef Name='status'/>
<Value Type='Text'>状態2</Value>
</Eq>
<Or>
<Eq>
<FieldRef Name='status'/>
<Value Type='Text'>状態3</Value>
</Eq>
<Eq>
<FieldRef Name='status'/>
<Value Type='Text'>状態4</Value>
</Eq>
</Or>
</Or>
</Or>
</Where>
</Query>
</View>
クエリの注意点
- And要素もOr要素と同様に、3つ以上の要素をつなげる場合は入れ子にする必要があります。
- CAMLでは大文字と小文字が区別されるため、正確な内部名等を使用してください。
さいごに
本記事では、OrやAndを3つ以上並べる場合のCAMLクエリの書き方をご紹介しました。
これらの要素の構造を正しく理解していないと、クエリが正しく動作しないことがあります。
この記事が、CAMLクエリの作成における参考になれば幸いです。