SharePointのWebサービスで複数条件をクエリする構文の注意点

Getlistitems呼出時にAND条件が三以上ある場合は構文に注意が必要です。

例えば以下のような四重のAND条件でクエリを送信するとします。

 列1(内部名:column01)が「あ」かつ、
 列2(内部名:column02)が「い」かつ、
 列3(内部名:column03)が「う」かつ、
 列4(内部名:column04)が「え」である。

この場合、素直に考えると以下のようにクエリを記述したくなりますが、実際にはこれでは正しい値が返りません。

<query><Query><Where><And><Eq><FieldRef Name=”column01″ /><Value Type=”Text”>あ</Value></Eq><Eq><FieldRef Name=”column02″ /><Value Type=”Text”>か</Value></Eq><Eq><FieldRef Name=”column03″ /><Value Type=”Text”>さ</Value></Eq><Eq><FieldRef Name=”column04″ /><Value Type=”Text”>た</Value></Eq></And></Where></Query></query>

以下が正解。改行を入れいていないので判りにくいですが、AND で三つ以上の条件をまとめる場合、ネスト構造にしてやる必要がある訳ですね。

<query><Query><Where><And><And><Eq><FieldRef Name=”column01″ /><Value Type=”Text”>あ</Value></Eq><Eq><FieldRef Name=”column02″ /><Value Type=”Text”>か</Value></Eq></And><And><Eq><FieldRef Name=”column03″ /><Value Type=”Text”>さ</Value></Eq><Eq><FieldRef Name=”column04″ /><Value Type=”Text”>た</Value></Eq></And></And></Where></Query></query>

簡単に図式化するとこんな感じになります。

<AND>
    <AND>
        <Eq>あ</Eq>
        <Eq>い</Eq>
    </AND>
    <AND>
        <Eq>う</Eq>
        <Eq>え</Eq>
    </AND>
</AND>

基礎的なことかも知れませんが、気づかないとドツボに嵌りますので要注意です。


Author

中村 和彦(シンプレッソ・コンサルティング株式会社 代表)が「ユーザ視点の SharePoint 情報」を発信します。元大手製造業 SharePoint 運用担当。現SharePoint コンサルタント。お仕事のお問い合わせはこちらまでお願いします。当ブログにおける発信内容は個人に帰属し所属組織の公式発信/見解ではありません。
FB : 中村 和彦
blog: Be・Better!
MS MVP SharePoint 2009/10-2011/9
MS MVP Office 365 2012/10-2014/9