個人的メモ
よくやるミス
- タグの大文字小文字を意識する
- 日付と時刻型は
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>