SharePoint
CAMLQuery

SharePoint CAML Query メモ

個人的メモ

よくやるミス

  • タグの大文字小文字を意識する
  • 日付と時刻型は IncludeTimeValue="TRUE" を付けないと時間を比較してくれない

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
<Where>
    <Eq>
        <FieldRef Name='A' />
        <Value Type="Integer">0</Value>
    </Eq>
</Where>
  • A <> 0
<Where>
    <Neq>
        <FieldRef Name='A' />
        <Value Type="Integer">0</Value>
    </Neq>
</Where>
  • A < 0
<Where>
    <Lt>
        <FieldRef Name='A' />
        <Value Type="Integer">0</Value>
    </Lt>
</Where>
  • A <= 0
<Where>
    <Leq>
        <FieldRef Name='A' />
        <Value Type="Integer">0</Value>
    </Leq>
</Where>
  • A > 0
<Where>
    <Gt>
        <FieldRef Name='A' />
        <Value Type="Integer">0</Value>
    </Gt>
</Where>
  • A>= 0
<Where>
    <Geq>
        <FieldRef Name='A' />
        <Value Type="Integer">0</Value>
    </Geq>
</Where>

OrderBy の昇順と降順

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

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

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 列が日付と時間型と仮定した例

<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>