【PowerShell】OrやAndを3つ以上並べる場合のCAMLクエリでSharePointリストのアイテムを取得する

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クエリの作成における参考になれば幸いです。

参考

learn.microsoft.com

learn.microsoft.com

執筆担当者プロフィール
岡田 弥侑

岡田 弥侑(日本ビジネスシステムズ株式会社)

クラウドテクノロジーサービス本部所属。主にPowerShellでの開発を行っています。Copilot Studioについて勉強中です。

担当記事一覧