Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Sitecore CMS 6
データ定義 API クックブック Rev: 2010-12-07
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
Sitecore CMS 6
データ定義 API クックブック CMS 開発者のためのコンセプトの概要
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
2 / 22
目次
Chapter 1 イントロダクション ............................................................................................................ 3
Chapter 2 データ テンプレート ......................................................................................................... 4
2.1 データ テンプレートへのアクセス方法 ............................................................................................. 5
2.1.1 アイテムに関連付けられたデータ テンプレートへのアクセス方法 ......................................................... 5
2.1.2 既存のデータ テンプレートへのアクセス方法 .............................................................................. 5
2.1.3 データ テンプレートの作成方法 ............................................................................................ 6
2.1.4 データ テンプレートのアイコンへのアクセス方法............................................................................ 6
2.1.5 データ テンプレートのベース テンプレートへのアクセス方法 ............................................................... 6
2.2 データ テンプレート セクションへのアクセス方法 .................................................................................. 8
2.2.1 既存のデータ テンプレート セクションへのアクセス方法 ................................................................... 8
2.2.2 データ テンプレートにセクションを追加する方法 ........................................................................... 8
2.2.3 データ テンプレート セクションのアイコンへのアクセス方法 ................................................................ 9
2.2.4 データ テンプレート セクションの並べ替え順へのアクセス方法 ........................................................... 9
2.3 データ テンプレート フィールドへのアクセス方法 ................................................................................ 10
2.3.1 既存のデータ テンプレート フィールドへのアクセス方法 ................................................................. 10
2.3.2 データ テンプレート セクションをフィールドに追加する方法 ............................................................. 10
2.3.3 データ テンプレート フィールドのプロパティへのアクセス方法 ............................................................ 11
データ テンプレート フィールドの並べ替え順へのアクセス方法 ..................................................................... 11
2.4 データ テンプレートの標準値へのアクセス方法 ................................................................................ 13
2.4.1 データ テンプレート フィールドの標準値の設定方法 ................................................................... 13
データ テンプレートに基づくアイテムにデフォルト ワークフローを指定する方法 .................................................... 14
データ テンプレートに基づくアイテムにデフォルト レイアウト詳細を指定する方法 ................................................. 14
データ テンプレートに基づくアイテムにデフォルト挿入オプションを指定する方法 .................................................. 14
データ テンプレートに基づくアイテムにデフォルト サブアイテムの並べ替えルールを指定する方法 ................................ 15
Chapter 3 ブランチ テンプレート ...................................................................................................... 16
3.1 既存のブランチ テンプレートへのアクセス方法 ................................................................................. 17
3.2 ブランチ テンプレートの作成方法 ............................................................................................... 18
3.2.1 単一アイテムが含まれるブランチ テンプレートの作成方法 ............................................................. 18
3.3 ブランチ テンプレートにアイテムを追加する方法 ............................................................................... 19
3.3.1 ブランチ テンプレートへのアイテムのコピー方法 ......................................................................... 19
3.4 ブランチ テンプレートのアイテムのフィールド値へのアクセス方法 ............................................................... 20
3.5 ブランチ テンプレートへのアクセスの制御方法 ................................................................................. 21
3.5.1 ブランチ テンプレートを使用可能なユーザーの制御方法 .............................................................. 21
3.5.2 ブランチ テンプレートから作成されたアイテムにアクセス可能なユーザーの制御方法 ................................. 22
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
3 / 22
Chapter 1
イントロダクション
このデータ定義 API クックブックでは、Sitecore 開発者がデータ テンプレート定義およびブランチ テンプレート定
義にアクセスし操作するために使用可能な API (Application Programming Interfaces) に関する概念上
の概要について説明します。1
この文書には次の章があります:
Chapter 1 – イントロダクション
Chapter 2 – データ テンプレート
Chapter 3 – ブランチ テンプレート
1 この文書で説明されているトピックの詳細については、
http://sdn.sitecore.net/Reference/References%20in%20Japanese/Data%20Definition%20Reference.aspx
から『データ定義リファレンス マニュアル』、また
http://sdn.sitecore.net/Reference/References%20in%20Japanese/Data%20Definition%20Cookbook.aspx
から『データ定義クックブック』を参照してください。特定の Sitecore API の詳細については、
http://sdn.sitecore.net/Reference/References%20in%20Japanese/Sitecore_6_API_Reference.aspx から
『Sitecore API リファレンス』を参照してください。
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
4 / 22
Chapter 2
データ テンプレート
この章では、データ テンプレート、セクションおよびフィールド定義にアクセスし操作するために使用可能な API に
ついて説明し、これらの例を示します。
この章には次のセクションがあります:
データ テンプレートへのアクセス方法
データ テンプレート セクションへのアクセス方法
データ テンプレート フィールドへのアクセス方法
データ テンプレートの標準値へのアクセス方法
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
5 / 22
2.1 データ テンプレートへのアクセス方法
Sitecore.Data.Items.TemplateItem クラスを使用して、データ テンプレート定義にアクセスすることができます。
2.1.1 アイテムに関連付けられたデータ テンプレートへのアクセス方法
Sitecore.Data.Items.Item.Template プロパティを使用して、アイテムに関連付けられたデータ テンプレートにアクセスする
ことができます。2 たとえば、Master データベース内の /Sitecore/Content/Home アイテムに関連付けられたデータ テンプレート
にアクセスする方法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.Item home = master.GetItem("/sitecore/content/home");
Sitecore.Data.Items.TemplateItem template = home.Template;
2.1.2 既存のデータ テンプレートへのアクセス方法
Sitecore.Data.Database.Templates コレクション プロパティを使用して、既存のデータ テンプレートにアクセスすることができ
ます。コレクション キーの場合、データ テンプレートの GUID を使用するか、先頭のスラッシュ文字 ("/") なしで
/Sitecore/Templates アイテムに関連するデータ テンプレート定義アイテムへのパスを使用します。たとえば、Master データベー
ス内の Sample/Sample Item データ テンプレート (/Sitecore/Templates/Sample/Sample Item) にアクセスする
方法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.TemplateItem sample = master.Templates["sample/sample item"];
if (sample==null)
{
//TODO: handle case that data template does not exist
}
指定したデータ テンプレートが存在しない場合、Sitecore.Data.Database.Templates コレクションは Null を返します。
2 Sitecore.Data.Items.Item、 Sitecore.Data.Database、およびこのセクションとこの文書全体で使用される他の
API の詳細については、
http://sdn.sitecore.net/Reference/References%20in%20Japanese/Content%20API%20Cookbook.aspx から
『コンテンツ API クックブック』を参照してください。
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
6 / 22
2.1.3 データ テンプレートの作成方法
Sitecore.Data.Database.Templates.CreateTemplate() メソッドを使用して、データ テンプレートを作成することがで
きます。データ テンプレート名、およびデータ テンプレートを収容するための既存の親フォルダーを指定する必要があります。たとえば、
Master データベース内に User Defined/Example Data Template データ テンプレート
(/Sitecore/Templates/User Defined/Example Data Template) が存在することを確認する方法は、次のとおり
です:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.TemplateItem example =
master.Templates["user defined/example data template"];
if (example == null)
{
Sitecore.Data.Items.Item parent = master.GetItem("/sitecore/templates/user defined");
example = master.Templates.CreateTemplate("Example Data Template", parent);
}
2.1.4 データ テンプレートのアイコンへのアクセス方法
Sitecore.Data.Items.TemplateItem.InnerItem.Appearance.Icon プロパティを使用して、データ テンプレートの
アイコンにアクセスすることができます。3 たとえば、Master データベース内の Sample/Sample Item データ テンプレートのアイコン
を network/16x16/home.png に設定する方法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.TemplateItem sample = master.Templates["sample/sample item"];
sample.InnerItem.Editing.BeginEdit();
sample.InnerItem.Appearance.Icon = "network/16x16/home.png";
sample.InnerItem.Editing.EndEdit();
2.1.5 データ テンプレートのベース テンプレートへのアクセス方法
Sitecore.Data.Items.TemplateItem.BaseTemplates プロパティを使用して、データ テンプレートのベース テンプレート
にアクセスすることができます。データ テンプレートに関連付けられたベース テンプレートを更新するには、データ テンプレート定義アイテム
内の Sitecore.FieldIDs.BaseTemplate フィールドの値を設定します。たとえば、Master データベース内の User
Defined/Example Data Template データ テンプレートに Sample/Sample Item および Common/Folder ベース テ
ンプレートが含まれることを確認する方法は、次のとおりです:
3 データ テンプレート アイコンの詳細については、
http://sdn.sitecore.net/Reference/References%20in%20Japanese/Client%20Configuration%20Reference.
aspx から『クライアント構成リファレンス マニュアル』を、また
http://sdn.sitecore.net/Reference/References%20in%20Japanese/Client%20Configuration%20Cookbook.
aspx から『クライアント構成クックブック』を参照してください。
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
7 / 22
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.TemplateItem example =
master.Templates["user defined/example data template"];
Sitecore.Data.Fields.MultilistField baseTemplates =
example.InnerItem.Fields[Sitecore.FieldIDs.BaseTemplate];
foreach (string key in new string[] { "sample/sample item",
Sitecore.TemplateIDs.Folder.ToString() })
{
Sitecore.Data.Items.TemplateItem template = master.Templates[key];
if (!baseTemplates.Contains(template.ID.ToString()))
{
example.InnerItem.Editing.BeginEdit();
baseTemplates.Add(template.ID.ToString());
example.InnerItem.Editing.EndEdit();
}
}
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
8 / 22
2.2 データ テンプレート セクションへのアクセス方法
Sitecore.Data.Items.TemplateSectionItem クラスを使用して、データ テンプレート セクション定義にアクセスすることが
できます。
2.2.1 既存のデータ テンプレート セクションへのアクセス方法
Sitecore.Data.Items.TemplateItem.GetSection() メソッドを使用して、既存のデータ テンプレート セクションにアクセ
スすることができます。たとえば、Master データベース内の Sample/Sample Item データ テンプレート内の Data セクションにアク
セスする方法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.TemplateItem sample = master.Templates["sample/sample item"];
Sitecore.Data.Items.TemplateSectionItem data = sample.GetSection("data");
データ テンプレート定義アイテムに指定したセクションが含まれる場合、
Sitecore.Data.Items.TemplateItem.GetSection() メソッドはこのセクションを返します。それ以外の場合、
Sitecore.Data.Items.TemplateItem.GetSection() メソッドは、このデータ テンプレートのベース テンプレートの再帰
的処理中に最初に合致したセクションを返します。いずれのベース テンプレートにもこのセクションが含まれない場合、
Sitecore.Data.Items.TemplateItem.GetSection() メソッドは Null を返します。
データ テンプレートに定義されているセクションと、そのベース テンプレートの 1 つに定義されているセクションを区別するには、次のセク
ションのデータ テンプレートにセクションを追加する方法に示されるように、データ テンプレート セクション定義アイテムの親の ID とデータ
テンプレート定義アイテムの ID を比較します。
2.2.2 データ テンプレートにセクションを追加する方法
Sitecore.Data.Items.TemplateItem.AddSection() メソッドを使用して、データ テンプレートにセクションを追加するこ
とができます。たとえば、Master データベース内の User Defined/Example Data Template データ テンプレートに Data
セクションが存在することを確認する方法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.TemplateItem example =
master.Templates["user defined/example data template"];
Sitecore.Data.Items.TemplateSectionItem data = example.GetSection("data");
if (data==null || data.InnerItem.Parent.ID!=example.ID)
{
data = example.AddSection("Data",false);
}
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
9 / 22
メモ
Sitecore.Data.Items.TemplateItem.AddSection() メソッドに対する 2 番目のパラメーターとして False を指定し
ない場合、このメソッドはベース テンプレートに定義されているデータ テンプレート セクションを返す可能性があります。
2.2.3 データ テンプレート セクションのアイコンへのアクセス方法
Sitecore.Data.Items.TemplateItem.InnerItem.Appearance.Icon プロパティを使用して、データ テンプレート
セクションに関連付けられたアイコンにアクセスすることができます。4 たとえば、Master データベース内の Sample/Sample Item
データ テンプレートの Data セクションのアイコンを applications/16x16/folder.png に設定する方法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.TemplateItem sample = master.Templates["sample/sample item"];
Sitecore.Data.Items.TemplateSectionItem data = sample.GetSection("data");
data.InnerItem.Editing.BeginEdit();
data.InnerItem.Appearance.Icon = "applications/16x16/folder.png";
data.InnerItem.Editing.EndEdit();
2.2.4 データ テンプレート セクションの並べ替え順へのアクセス方法
Sitecore.Data.Items.TemplateSectionItem.Sortorder プロパティを使用して、データ テンプレート セクションの並
べ替え順にアクセスすることができます。コンテンツ エディターでは、[並べ替え順] プロパティの値に応じて各データ テンプレート内のセク
ションが並べ替えられます。ユーザーがセクションを並べ替えない場合、これらは名前のアルファベット順で並べ替えられます。
Sitecore.Data.Items.TemplateSectionItem.InnerItem.Fields コレクション プロパティ内の
Sitecore.FieldIDs.Sortorder フィールドを更新することにより、データ テンプレート セクションの並べ替え順を設定することが
できます。たとえば、Master データベース内の Sample/Sample Item データ テンプレートの [Data] セクションの [並べ替え順]
プロパティを 10 に設定する方法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.TemplateItem sample = master.Templates["sample/sample item"];
Sitecore.Data.Items.TemplateSectionItem data = sample.GetSection("data");
if (data.Sortorder!=10)
{
data.InnerItem.Editing.BeginEdit();
data.InnerItem.Fields[Sitecore.FieldIDs.Sortorder].Value = 10.ToString();
data.InnerItem.Editing.EndEdit();
}
4 データ テンプレート セクションのアイコンの詳細については、
http://sdn.sitecore.net/Reference/References%20in%20Japanese.aspx から『クライアント構成リファレンス マニュアル』
および『クライアント構成クックブック』を参照してください。
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
10 / 22
2.3 データ テンプレート フィールドへのアクセス方法
Sitecore.Data.Items.TemplateFieldItem クラスを使用して、データ テンプレート フィールド定義にアクセスすることができ
ます。
2.3.1 既存のデータ テンプレート フィールドへのアクセス方法
Sitecore.Data.Items.TemplateItem.GetField() メソッドを使用して、データ テンプレート フィールドが含まれるセクショ
ンが重要でないときにこのフィールドにアクセスすることができます。たとえば、Master データベース内の User Defined/Example
Data Template データ テンプレート内の [Title] フィールドにアクセスする方法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.TemplateItem sample = master.Templates["sample/sample item"];
Sitecore.Data.Items.TemplateFieldItem title = sample.GetField("title");
メモ
Sitecore.Data.Items.TemplateItem.GetField() メソッドは、ベース テンプレートからフィールドを返す可能性があり
ます。
2.3.2 データ テンプレート セクションをフィールドに追加する方法
Sitecore.Data.Items.TemplateSectionItem.AddField() メソッドを使用して、データ テンプレート セクションにフィー
ルドを追加することができます。たとえば、Master データベース内の User Defined/Example Data Template データ テンプ
レートの [Data] セクションに [Title] フィールドが存在することを確認する方法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.TemplateItem example =
master.Templates["user defined/example data template"];
Sitecore.Data.Items.TemplateSectionItem data = example.GetSection("data");
if (data == null || data.InnerItem.Parent.ID != example.ID)
{
data = example.AddSection("Data",false);
}
Sitecore.Data.Items.TemplateFieldItem title = data.GetField("title");
if (title == null)
{
Sitecore.Data.Items.TemplateFieldItem field = data.AddField("Title");
}
メモ
データ テンプレート セクション定義アイテムに指定したフィールドが含まれない場合、
Sitecore.Data.Items.TemplateSectionItem.GetField() メソッドは Null を返します。
Sitecore.Data.Items.TemplateSectionItem.GetField() メソッドは、ベース テンプレートを処理しません。
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
11 / 22
2.3.3 データ テンプレート フィールドのプロパティへのアクセス方法
Sitecore.Data.Items.TemplateFieldItem クラスの次のプロパティを使用して、データ テンプレート フィールドのプロパティ
にアクセスすることができます。5
Sitecore.Data.Items.TemplateFieldItem.Source: フィールドの設定ソース
Sitecore.Data.Items.TemplateFieldItem.Title: フィールドのタイトル
Sitecore.Data.Items.TemplateFieldItem.Type: フィールドのタイプ
データ テンプレートの [追加] プロパティにアクセスするには、Sitecore.Data.Items.TemplateFieldItem.InnerItem.Fields
コレクション プロパティを使用します。コレクション キーの場合、Sitecore.TemplateFieldIDs クラスのメンバーを指定します。
たとえば、Master データベース内の Sample/Sample Item データ テンプレートの [Title] フィールドの [タイプ]、[ソース]、[タイト
ル] および [説明] プロパティを設定する方法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.TemplateItem sample = master.Templates["sample/sample item"];
Sitecore.Data.Items.TemplateFieldItem title = sample.GetField("title");
Sitecore.Data.Database core = Sitecore.Configuration.Factory.GetDatabase("core");
Sitecore.Data.Items.Item textFieldType =
core.GetItem("/sitecore/system/field types/simple types/single-line text");
title.BeginEdit();
title.Type = textFieldType.Name;
title.Source = "//TODO: replace with field source property";
title.Title = "//TODO: replace with field title";
title.InnerItem.Fields[Sitecore.TemplateFieldIDs.Description].Value =
"//TODO: replace with field description";
title.EndEdit();
データ テンプレート フィールドの並べ替え順へのアクセス方法
Sitecore.Data.Items.TemplateFieldItem.Sortorder プロパティを使用して、データ テンプレート フィールドの並べ替
え順にアクセスすることができます。コンテンツ エディターでは、フィールドの [並べ替え順] プロパティの値に応じて各セクション内のフィール
ドが並べ替えられます。ユーザーがフィールドを並べ替えない場合、これらは自動的に名前のアルファベット順で並べ替えられます。たとえ
ば、Sample/Sample Item データ テンプレート内の [Title] フィールドを Master データベース内の [Title] フィールドの後に (こ
れらが同じセクション内に存在することを前提として) 並べ替える方法は、次のとおりです:
Sitecore.Data.Database master =
Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.TemplateItem sample = master.Templates["sample/sample item"];
5 データ テンプレート フィールド プロパティの詳細については、
http://sdn.sitecore.net/Reference/References%20in%20Japanese.aspx から『データ定義リファレンス マニュアル』、『ク
ライアント構成リファレンス マニュアル』および『クライアント構成クックブック』を参照してください。
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
12 / 22
Sitecore.Data.Items.TemplateFieldItem title = sample.GetField("title");
Sitecore.Data.Items.TemplateFieldItem text = sample.GetField("text");
title.BeginEdit();
title.Sortorder = 100;
title.EndEdit();
text.BeginEdit();
text.Sortorder = 200;
text.EndEdit();
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
13 / 22
2.4 データ テンプレートの標準値へのアクセス方法
Sitecore.Data.Items.TemplateItem.StandardValues プロパティを使用して、データ テンプレートの標準値にアクセ
スすることができます。Sitecore.Data.Items.TemplateItem.StandardValues プロパティが Null である場合、データ
テンプレートには標準値が存在しません。
データ テンプレートに標準値が存在しない場合、Sitecore.Data.Items.TemplateItem.CreateStandardValues()
メソッドを使用して、このデータ テンプレートの標準値アイテムを作成することができます。たとえば、必要な場合は標準値アイテムを作成
して、Master データベース内の User Defined/Example Data Template データ テンプレートの標準値にアクセスする方法
は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.TemplateItem example =
master.Templates["user defined/example data template"];
Sitecore.Data.Items.Item standardValues = example.StandardValues;
if (standardValues == null)
{
standardValues = example.CreateStandardValues();
}
2.4.1 データ テンプレート フィールドの標準値の設定方法
Sitecore.Data.Items.Item.Fields コレクション プロパティを使用して、データ テンプレート フィールドの標準値を設定する
ことができます。6 フィールドの標準値には、$name や $now などのトークンを含めることができます。7 たとえば、Master データベース
内の User Defined/Example Data Template データ テンプレートの [Title] フィールドの標準値を $name に設定する方
法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.TemplateItem example =
master.Templates["user defined/example data template"];
Sitecore.Data.Items.Item standardValues = example.StandardValues;
standardValues.Editing.BeginEdit();
standardValues.Fields["title"].Value = "$name";
standardValues.Editing.EndEdit();
6 フィールド値の設定の詳細については、
http://sdn.sitecore.net/Reference/References%20in%20Japanese/Content%20API%20Cookbook.aspx から
『コンテンツ API クックブック』を参照してください。 7 標準値で使用可能なトークンの詳細については、
http://sdn.sitecore.net/Reference/References%20in%20Japanese/Data%20Definition%20Cookbook.aspx
から『データ定義クックブック』を参照してください。
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
14 / 22
データ テンプレートに基づくアイテムにデフォルト ワークフローを指定する方法
データ テンプレートの標準値に Sitecore.FieldIDs.DefaultWorkflow フィールドの値を設定することにより、このデータ テン
プレートに基づくすべてのアイテムにデフォルト ワークフローを指定することができます。たとえば、Master データベース内の User
Defined/Example Data Template データ テンプレートのデフォルト ワークフローを
/Sitecore/System/Workflows/Sample Workflow ワークフローに設定する方法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.TemplateItem example =
master.Templates["user defined/example data template"];
Sitecore.Data.Items.Item standardValues = example.StandardValues;
Sitecore.Data.Items.Item sampleWorkflow =
master.GetItem("/sitecore/system/workflows/sample workflow");
standardValues.Editing.BeginEdit();
standardValues.Fields[Sitecore.FieldIDs.DefaultWorkflow].Value =
sampleWorkflow.ID.ToString();
standardValues.Editing.EndEdit();
データ テンプレートに基づくアイテムにデフォルト レイアウト詳細を指定する方法
データ テンプレートの標準値に Sitecore.FieldIDs.LayoutField フィールドの値を設定することにより、このデータ テンプレー
トに基づくすべてのアイテムにデフォルト レイアウト詳細を指定することができます。たとえば、/Sitecore/Content/Home アイテム
のレイアウト詳細を Master データベース内の User Defined/Example Data Template データ テンプレートの標準値にコ
ピーする方法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.Item home = master.GetItem("/sitecore/content/home");
Sitecore.Data.Items.TemplateItem example =
master.Templates["user defined/example data template"];
Sitecore.Data.Items.Item standardValues = example.StandardValues;
standardValues.Editing.BeginEdit();
standardValues.Fields[Sitecore.FieldIDs.LayoutField].Value =
home.Fields[Sitecore.FieldIDs.LayoutField].Value;
standardValues.Editing.EndEdit();
データ テンプレートに基づくアイテムにデフォルト挿入オプションを指定する方法
データ テンプレートの標準値に Sitecore.FieldIDs.Branches および __Insert Rules フィールドの値を設定することに
より、このデータ テンプレートに基づくすべてのアイテムにデフォルト挿入オプションを指定することができます。たとえば、Master データベー
ス内の User Defined/Example Data Template データ テンプレートの挿入オプションに Sample/Sample アイテムおよ
び Common/Folder データ テンプレートが含まれ、この挿入ルールに /Sitecore/Content/Home アイテムに定義されている
挿入ルールが含まれることを確認する方法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.TemplateItem example =
master.Templates["user defined/example data template"];
Sitecore.Data.Items.Item standardValues = example.StandardValues;
standardValues.Editing.BeginEdit();
Sitecore.Data.Fields.MultilistField standardInsertOptions =
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
15 / 22
standardValues.Fields[Sitecore.FieldIDs.Branches];
foreach (string templateKey in new string[] { "sample/sample item",
Sitecore.TemplateIDs.Folder.ToString() })
{
Sitecore.Data.Items.TemplateItem template = master.Templates[templateKey];
if (!standardInsertOptions.Contains(template.ID.ToString()))
{
standardInsertOptions.Add(template.ID.ToString());
}
}
Sitecore.Data.Fields.MultilistField standardInsertRules =
standardValues.Fields["__Insert Rules"];
Sitecore.Data.Items.Item home = master.GetItem("/sitecore/content/home");
Sitecore.Data.Fields.MultilistField homeInsertRules = home.Fields["__Insert Rules"];
foreach(string homeInsertRuleId in homeInsertRules.Items)
{
if (!standardInsertRules.Contains(homeInsertRuleId))
{
standardInsertRules.Add(homeInsertRuleId);
}
}
standardValues.Editing.EndEdit();
データ テンプレートに基づくアイテムにデフォルト サブアイテムの並べ替えルールを指定する方法
データ テンプレートの標準値に Sitecore.FieldIDs.SubmitemsSorting フィールドの値を設定することにより、このデータ テ
ンプレートに基づくすべてのアイテムにデフォルト サブアイテムの並べ替えルールを指定することができます。たとえば、Master データベース
内の User Defined/Example Data Template データ テンプレートのデフォルト サブアイテムの並べ替えルールを
/Sitecore/System/Settings/Subitems Sorting/Updated サブアイテムの並べ替えルールに設定する方法は、次の
とおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Database core = Sitecore.Configuration.Factory.GetDatabase("core");
Sitecore.Data.Items.Item rule =
core.GetItem("/sitecore/system/settings/subitems sorting/updated");
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.TemplateItem example =
master.Templates["user defined/example data template"];
Sitecore.Data.Items.Item standardValues = example.StandardValues;
standardValues.Editing.BeginEdit();
standardValues.Fields[Sitecore.FieldIDs.SubitemsSorting].Value = rule.ID.ToString();
standardValues.Editing.EndEdit();
standardValues.Editing.EndEdit();
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
16 / 22
Chapter 3
ブランチ テンプレート
この章では、データ テンプレートおよびブランチ テンプレートにアクセスし操作するために使用可能な API について
説明し、これらの例を示します。
この章には次のセクションがあります:
既存のブランチ テンプレートへのアクセス方法
ブランチ テンプレートの作成方法
ブランチ テンプレートにアイテムを追加する方法
ブランチ テンプレートのアイテムのフィールド値へのアクセス方法
ブランチ テンプレートへのアクセスの制御方法
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
17 / 22
3.1 既存のブランチ テンプレートへのアクセス方法
Sitecore.Data.Items.BranchItem クラスを使用して、ブランチ テンプレートにアクセスすることができます。
Sitecore.Data.Database.Branches コレクション プロパティを使用して、既存のブランチ テンプレートにアクセスすることができ
ます。コレクション キーの場合、先頭のスラッシュ文字 ("/") なしで /Sitecore/Templates アイテムに関連するブランチ テンプ
レート定義アイテムへのパスを使用します。たとえば、Master データベース内の Branches/User Defined/Example
Branch Template ブランチ テンプレート (/Sitecore/Templates/Sitecore/Branches/User Defined
/Example Branch Template) にアクセスする方法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.BranchItem exampleBranch =
master.Branches["branches/user defined/example branch template"];
if (exampleBranch==null)
{
//TODO: handle case that branch template does not exist
}
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
18 / 22
3.2 ブランチ テンプレートの作成方法
Sitecore.Data.Items.Item.Add() メソッドを使用して、ブランチ テンプレートを作成することができます。たとえば、Master
データベース内に Branches/User Defined/Example Branch Template ブランチ テンプレートが存在することを確
認する方法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.BranchItem exampleBranch =
master.Branches["branches/user defined/example branch template"];
if (exampleBranch == null)
{
Sitecore.Data.Items.Item parent =
master.GetItem("/sitecore/templates/branches/user defined");
Sitecore.Data.Items.TemplateItem example =
master.Templates[Sitecore.TemplateIDs.BranchTemplate];
exampleBranch = new Sitecore.Data.Items.BranchItem(
parent.Add("Example Branch Template", example));
}
3.2.1 単一アイテムが含まれるブランチ テンプレートの作成方法
Sitecore.Data.Masters.CreateMaster() メソッドを使用して、$name という名前の単一アイテムが含まれるブランチ テン
プレートを作成することができます。アイテムに関連付けられたデータ テンプレートのアイコンをブランチ テンプレート定義アイテムにコ
ピーすることができます。たとえば、データ テンプレートのアイコンをブランチ テンプレート定義アイテムにコピーして、Master データベース
内の Sample/Sample Item データ テンプレートに基づく $name という名前の単一アイテムが含まれる Branches/User
Defined/Sample Item ブランチ テンプレートを作成する方法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.Item parent =
master.GetItem("/sitecore/templates/branches/user defined");
Sitecore.Data.Items.TemplateItem exampleTemplate =
master.Templates["sample/sample item"];
Sitecore.Data.Items.Item exampleItem =
Sitecore.Data.Masters.Masters.CreateMaster(parent,exampleTemplate.ID);
Sitecore.Data.Items.BranchItem exampleBranch =
new Sitecore.Data.Items.BranchItem(exampleItem);
exampleBranch.InnerItem.Editing.BeginEdit();
exampleBranch.InnerItem.Appearance.Icon = exampleTemplate.Icon;
exampleBranch.InnerItem.Editing.EndEdit();
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
19 / 22
3.3 ブランチ テンプレートにアイテムを追加する方法
Sitecore.Data.Items.Item.Add() メソッドを使用して、ブランチ テンプレートにアイテムを追加することができます。たとえば、
Sample/Sample Item データ テンプレートに基づく $name という名前のアイテムが存在しない場合、このアイテムを Master デー
タベース内の Branches/User Defined/Example Branch Template ブランチ テンプレートに追加する方法は、次のとお
りです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.Item exampleBranch =
master.Branches["branches/user defined/example branch template"];
Sitecore.Data.Items.Item child = exampleBranch.Children["$name"];
if (child == null)
{
Sitecore.Data.Items.TemplateItem sampleTemplate =
master.Templates["sample/sample item"];
child = exampleBranch.Add("$name",sampleTemplate);
}
3.3.1 ブランチ テンプレートへのアイテムのコピー方法
Sitecore.Data.Items.Item.CopyTo() メソッドを使用して、ブランチ テンプレートに既存のアイテムまたはアイテムの階層を
コピーすることができます。たとえば、Master データベース内の Branches/User Defined/Sample Item ブランチ テンプレー
トに /Sitecore/Content/Home アイテムをコピーする方法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.BranchItem exampleBranch =
master.Branches["branches/user defined/sample item"];
Sitecore.Data.Items.Item sampleItem = exampleBranch.InnerItem.Children["$name"];
Sitecore.Data.Items.Item home = master.GetItem("/sitecore/content/home");
home.CopyTo(exampleBranch.InnerItem, home.Name);
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
20 / 22
3.4 ブランチ テンプレートのアイテムのフィールド値へのアクセス方法
Sitecore.Data.Items.Item.Fields コレクション プロパティを使用して、ブランチ テンプレートのアイテムのフィールド値にアク
セスすることができます。8 たとえば、Master データベース内の Branches/User Defined/Example Branch Template
ブランチ テンプレートの下にある $name という名前の子の Title フィールドの値を $name に設定する方法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.BranchItem sampleBranch =
master.Branches["branches/user defined/example branch template"];
Sitecore.Data.Items.Item name = sampleBranch.InnerItem.Children["$name"];
name.Editing.BeginEdit();
name.Fields["title"].Value = " $name";
name.Editing.EndEdit();
8 フィールド値の設定の詳細については、
http://sdn.sitecore.net/Reference/References%20in%20Japanese/Content%20API%20Cookbook.aspx から『コ
ンテンツ API クックブック』を参照してください。
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
21 / 22
3.5 ブランチ テンプレートへのアクセスの制御方法
ブランチ テンプレート定義アイテムのセキュリティ アクセス権を操作することにより、このブランチ テンプレートを使用してアイテムを挿入で
きるユーザーを制御することができます。ブランチ テンプレート定義アイテムの子孫のセキュリティ アクセス権を操作することにより、このブラ
ンチ テンプレートを使用して挿入されたアイテムにアクセスできるユーザーを制御することができます。9
3.5.1 ブランチ テンプレートを使用可能なユーザーの制御方法
ブランチ テンプレートを使用してアイテムを挿入できるユーザーを制御するには、ブランチ テンプレート定義アイテムに読み取りアクセス権
を設定します。たとえば、管理者および sitecore\user ユーザーのみが Master データベース内の Branches/User
Defined/Example Branch Template ブランチ テンプレートを使用してアイテムを作成できるよう指定するには、ブランチ テン
プレート定義アイテムのセキュリティ継承を無効にしてから、コンテキスト ユーザーに読み取りアクセス権を許可します:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.BranchItem exampleBranch =
master.Branches["branches/user defined/example branch template"];
Sitecore.Security.AccessControl.AccessRuleCollection accessRules =
new Sitecore.Security.AccessControl.AccessRuleCollection();
Sitecore.Security.Accounts.Role everyone =
Sitecore.Security.Accounts.Role.FromName("__everyone");
accessRules.Helper.AddinheritancePermission(everyone, AccessRight.Any,
PropagationType.Entity, InheritancePermission.Deny);
accessRules.Helper.AddinheritancePermission(everyone, AccessRight.Any,
PropagationType.Descendants, InheritancePermission.Deny);
Sitecore.Security.Accounts.User user =
Sitecore.Security.Accounts.User.FromName(@"sitecore\user",false);
foreach (Sitecore.Security.AccessControl.AccessRight accessRight in
new Sitecore.Security.AccessControl.AccessRight[] {
Sitecore.Security.AccessControl.AccessRight.ItemRead,
Sitecore.Security.AccessControl.AccessRight.ItemWrite })
{
accessRules.Helper.AddAccessPermission(user, accessRight,
Sitecore.Security.AccessControl.PropagationType.Entity, AccessPermission.Allow);
accessRules.Helper.AddAccessPermission(user, accessRight,
Sitecore.Security.AccessControl.PropagationType.Descendants,
AccessPermission.Allow);
}
exampleBranch.InnerItem.Security.SetAccessRules(accessRules);
デフォルトでは、子孫アイテムがブランチ テンプレート定義アイテムのアクセス権を継承します。ブランチ テンプレート定義アイテムのアクセ
ス権により、ブランチ テンプレートを使用してアイテムを挿入できるアカウントや、ブランチ テンプレート内のアイテムを操作できるアカウント
を制御します。
9 セキュリティ API の詳細については、
http://sdn.sitecore.net/Reference/References%20in%20Japanese/Security%20API%20Cookbook.aspx から
『セキュリティ API クックブック』を参照してください。
Sitecore CMS 6 データ定義 API クックブック
Sitecore® は登録商標です。その他の記載されているブランドや製品名はそれぞれ各社の所有物です。この文書の内容はサイトコアの所有物です。
Copyright © 2001-2010 Sitecore. All rights reserved.
22 / 22
3.5.2 ブランチ テンプレートから作成されたアイテムにアクセス可能なユーザーの制御方法
ブランチ テンプレートから作成されたアイテムに対してさまざまな操作を実行できるユーザーを制御するには、ブランチ テンプレート定義ア
イテムの下にあるアイテムにアクセス権を適用します。ブランチ テンプレートを使用してアイテムを挿入すると、ブランチ テンプレート内のア
イテムに定義されているアクセス権が作成済アイテムにコピーされます。たとえば、Master データベース内の Branches/User
Defined/Example Branch Template ブランチ テンプレートから作成されたすべてのアイテムに対する読み取りアクセス権をす
べてのユーザーに許可するよう指定する方法は、次のとおりです:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.BranchItem exampleBranch =
master.Branches["branches/user defined/example branch template"];
Sitecore.Security.AccessControl.AccessRuleCollection emptyAccessRules =
new Sitecore.Security.AccessControl.AccessRuleCollection();
Sitecore.Security.AccessControl.AccessRuleCollection accessRules =
new Sitecore.Security.AccessControl.AccessRuleCollection();
Sitecore.Security.Accounts.Role everyone =
Sitecore.Security.Accounts.Role.FromName("__everyone");
accessRules.Helper.AddinheritancePermission(everyone, AccessRight.Any,
PropagationType.Entity, InheritancePermission.Allow);
accessRules.Helper.AddinheritancePermission(everyone, AccessRight.Any,
PropagationType.Descendants, InheritancePermission.Allow);
accessRules.Helper.AddAccessPermission(everyone,
Sitecore.Security.AccessControl.AccessRight.ItemRead,
Sitecore.Security.AccessControl.PropagationType.Entity, AccessPermission.Allow);
foreach( Sitecore.Data.Items.Item child in exampleBranch.InnerItem.Children )
{
child.Security.SetAccessRules(accessRules);
foreach( Sitecore.Data.Items.Item descendant in child.Axes.GetDescendants())
{
descendant.Security.SetAccessRules(emptyAccessRules);
}
}
メモ
ブランチ テンプレートを使用して 1 つまたは複数のアイテムを挿入する場合、ブランチ テンプレート定義アイテムに定義されているアクセ
ス権は挿入済アイテムにコピーされません。ブランチ テンプレート定義アイテムに定義されているアクセス権は、ブランチ テンプレートを使
用および保持できるユーザーに影響しますが、ブランチ テンプレートを使用して作成されたアイテムのアクセス権には影響しません。ブラン
チ テンプレート内のアイテムにアクセス権を設定しない場合、新しいアイテムはその新しい親からアクセス権を継承します。