NEXTSCAPE blog

株式会社ネクストスケープの社員による会社公式ブログです。ネスケラボでは、社員が日頃どのようなことに興味をもっているのか、仕事を通してどのような面白いことに取り組んでいるのかなど、会社や技術に関する情報をマイペースに紹介しています。

MENU

Sitecore クエリの構文まとめ

こんにちは。Sitecore MVP の長沢です。
みなさん、Sitecore クエリって使っているでしょうか。 私は、開発時や調査などで、現状、どんなアイテムがあるかを調べる際に使うのですが、あまり使用頻度が高くないため、使うたびにクエリの構文を調べることに。。。
そこで、今日は Sitecore クエリの構文についてまとめてみました。

f:id:nextscape_blog:20210910204607p:plain 

まず、クエリの基本的な構成ですが、下記のような形になっています。

/sitecore/content/Home//*[@@name='hoge']

この例は、/sitecore/content/Home の配下からアイテム名が hoge のアイテムを取得するクエリになっています。
ここでは、説明のため、パスを指定している部分(上記の例では「/sitecore/content/Home/item//*」の部分)をパス部、
より詳細な検索条件を指定している部分を条件部と呼ぶことにします。(一般的な名称ではなく、あくまでこのページ内で勝手に名付けた呼び名です。)

パス部の書き方



パス部では、下記の記号が特別な意味を持ちます。

記号 説明
/ 直下のアイテム /sitecore/content/Home … sitecore直下のcontentの直下のHome
// 配下のアイテム /sitecore/content/Home//test … /sitecore/content/Home配下のtest
* 全ての名前のアイテム /sitecore/content/Home//* ... /sitecore/content/Home配下の全て




条件部の書き方



条件部では、下記の変数、演算子、関数を使えます。

変数 説明
@<フィールド名> 指定したフィールドの値 @Text…テキストフィールドの値
@@name アイテム名  
@@key アイテム名(小文字されたもの)  
@@templateid テンプレートID  
@@templatename テンプレート名  
@@templatekey テンプレート名(小文字されたもの)  
@@id アイテムID  



演算子 説明
+ 四則演算の加算 6 + 4
- 四則演算の減算 6 - 4
* 四則演算の乗算 6 * 4
Div 四則演算の除算 6 div 4
Mod 除算のあまり 6 mod 4
= 等しい @@tempaltename = 'BasePage'
!= 等しくない @@tempaltename != 'BasePage'
< より小さい 6 < 4
<= 以下 6 <= 4
> より大きい 6 > 4
>= 以上 6 >= 4
or または @@tempaltename = 'BasePage' or @@tempaltename = 'ArticlePage'
and かつ @@tempaltename = 'BasePage' and @text = '20160401'




関数 説明
contains(s1:string, s2:string):bool S1がs2を含む場合に真 contains(@@templatename,'Page')
startswith(s1:string,s2:string) :bool S1がs2から始まる場合に真 startswith(@@templatename,'Base')
endswith(s1:string,s2:string) :bool S1がs2で終わる場合に真 endswith(@@templatename,'Page')
last():int 親アイテムが持つ最後の子供のインデックス /sitecore/content/Home[last()=2] ... /sitecore/contentが子アイテムを2つ持つ持っている場合に結果が返る
not(condition:bool):bool 否定 not(@@templatename='GeneralPage')
position():int 現在のアイテムが、親アイテムの何番目の子供か /sitecore/content/Home/*[position()=1] ... Homeの1番目の子供が結果として返る



上記のパス部と条件部を組み合わせることで、さまざまなクエリが発行可能です。

いくつか例を記載します。

  • /sitecore/content/Home//*[@title='Sitecore クエリを使ってみよう']
    • /sitecore/content/Home 配下のアイテムの中で、title フィールドの値が「Sitecore クエリを使ってみよう」のアイテム
  • /sitecore/content/Home/*[position()<=6 and @@templatename!='Folder']
    • /sitecore/content/Home 直下の 6 番目までのアイテムで、かつ、テンプレート名が Folder ではないアイテム
  • /sitecore/content/Home//article[@@id='{110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9}']
    • /sitecore/content/Home 配下の article という名前のアイテムで、アイテムIDが {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} であるもの




Sitecore クエリは、config で指定されるアイテム取得数の上限の影響を受けるなど、プログラムの中で、クエリを使ってアイテムを取得するような処理を書く場合は、注意が必要です。
ただ、上記のように比較的簡単な構文で柔軟な指定ができるため、入力されたクエリからアイテムを取得するような簡単なツールを作っておくと、開発時や運用時にとても重宝するのでオススメです。