SharePoint
CAMLQuery

SharePoint CAML Query メモ

個人的メモ

よくやるミス

  • タグの大文字小文字を意識する
  • 日付と時刻型は IncludeTimeValue="TRUE" を付けないと時間を比較してくれない
  • Where を使うフィールドにインデックスを作成する

CAML Query の投げ方

JavaScript
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml('<View><Query></Query></View>');

var ctx = new SP.ClientContext.get_current();
var items = ctx.get_web().get_lists().getByTitle('<Your List Name>').getItems(camlQuery);
ctx.load(items);

取得列の指定

列 A , B , C を取得する

<View>
    <ViewFields>
        <FieldRef Name="A"/>
        <FieldRef Name="B"/>
        <FieldRef Name="C"/>
    </ViewFields>
    <Query>
    </Query>
</View>

比較式

列 A は数値列とする

  • A = 0
<View>
    <Query>
        <Where>
            <Eq>
                <FieldRef Name='A' />
                <Value Type="Integer">0</Value>
            </Eq>
        </Where>
    </Query>
</View>
  • A <> 0
<View>
    <Query>
        <Where>
            <Neq>
                <FieldRef Name='A' />
                <Value Type="Integer">0</Value>
            </Neq>
        </Where>
    </Query>
</View>
  • A < 0
<View>
    <Query>
        <Where>
            <Lt>
                <FieldRef Name='A' />
                <Value Type="Integer">0</Value>
            </Lt>
        </Where>
    </Query>
</View>
  • A <= 0
<View>
    <Query>
        <Where>
            <Leq>
                <FieldRef Name='A' />
                <Value Type="Integer">0</Value>
            </Leq>
        </Where>
    </Query>
</View>
  • A > 0
<View>
    <Query>
        <Where>
            <Gt>
                <FieldRef Name='A' />
                <Value Type="Integer">0</Value>
            </Gt>
        </Where>
    </Query>
</View>
  • A>= 0
<View>
    <Query>
        <Where>
            <Geq>
                <FieldRef Name='A' />
                <Value Type="Integer">0</Value>
            </Geq>
        </Where>
    </Query>
</View>

OrderBy の昇順と降順

A 列を降順にするには、Ascending (昇順) を FALSE にする

<View>
    <Query>
        <OrderBy>
            <FieldRef Name='A' Ascending='FALSE' />
        </OrderBy>
    </Query>
</View>

MAX , MIN

列 A の MAX 値を取得するには、降順にして 1 件取ってくる

MIN 値の時は Ascending の値を TRUE にする

<View>
    <ViewFields>
        <FieldRef Name='A' />
    </ViewFields>
    <Query>
        <OrderBy>
            <FieldRef Name='A' Ascending='FALSE' />
        </OrderBy>
    </Query>
    <RowLimit>1</RowLimit>
</View>

Between

AND でつなぐしかない

A 列が日付と時間型と仮定した例

<View>
    <Query>
        <Where>
            <And>
                <Geq>
                    <FieldRef Name='A' />
                    <Value IncludeTimeValue='False' Type='DateTime'>2017-07-01</Value>
                </Geq>
                <Leq>
                    <FieldRef Name='A' />
                    <Value IncludeTimeValue='False' Type='DateTime'>2017-07-31</Value>
                </Leq>
            </And>
        </Where>
    </Query>
</View>