---
title: "Insertルールの作成と割り当て"
slug: "create-and-assign-insert-rules"
abstract: "ユーザーの挿入オプションを再定義するためのカスタムInsertルールを作成します。"
---
# Insertルールの作成と割り当て

挿入オプションを割り当てる過程の一環として、管理者は挿入ルールを定義でき、これにより実行時に [ユーザーの有効な挿入オプション](https://doc.sitecore.com/xp/ja/developers/103/sitecore-experience-manager/assigned-insert-options-versus-effective-insert-options.html "Assigned insert options versus effective insert options") を動的に再定義できます。開発者は管理者が選択できるカスタム挿入ルールを実装できます。

管理者はまた、効果的な挿入オプションを定義するためにInsert Optionsルールを実装し、ルールパラメータを選択するユーザーインターフェースを提供できます。特定のアイテムに適用されるInsertルールとは異なり、Insert Optionsルールはすべてのアイテムに適用されますが、通常はその適用を制限します。

このトピックでは、Insertルールの作成と割り当て方法について説明します。

## Insertルールを作成する

挿入ルールを挿入オプションに [割り当てることで](https://doc.sitecore.com/xp/ja/developers/103/sitecore-experience-manager/insert-options.html "Insert options") 、実行時に利用可能な [有効な挿入オプション](https://doc.sitecore.com/xp/ja/developers/103/sitecore-experience-manager/assigned-insert-options-versus-effective-insert-options.html "Assigned insert options versus effective insert options") を動的に再定義できます。

インサートルールを作成するには:

1.  Sitecore.Data.Masters.InsertRuleクラスから継承するクラスを作成し、単一のSystem.Int32パラメータを受け入れるコンストラクタを使い、Expand()メソッドを上書きします。以下のコードサンプルを使用できます:
    
    namespace Namespace.Data.InsertRules
    {
     public class ClassName : Sitecore.Data.Masters.InsertRule
     {
     public ClassName(System.Int32 count)
     {
    }
     public override void Expand( System.Collections.Generic.List<Sitecore.Data.Items.Item> insertOptions, Sitecore.Data.Items.Item item)
     {
     //TODO: manipulate insertOptions
     }
     }
    }
    
2.  コンテンツエディターで、*/Templates/Common/Folder data template* templateを使って、*/Sitecore/System/Settings/Insert Rules*下に必要なプロジェクト固有のフォルダを挿入します。
    
3.  該当するプロジェクト固有のフォルダ内に、*/System/Branches/Insert Rule data data template* templateを使ってルール定義アイテムを挿入します。
    
4.  ルール定義項目の挿入、**データ** セクションの **タイプ** フィールドにクラスの署名を入力します。
    

> !注挿入ルールを他の項目に割り当てるには、「 [挿入オプションの割り当てまたはコピー](https://doc.sitecore.com/xp/ja/developers/103/sitecore-experience-manager/assign-or-copy-insert-options.html "Assign or copy insert options")」を参照してください。

## インサートルールを割り当てる

[挿入オプション](https://doc.sitecore.com/xp/ja/developers/103/sitecore-experience-manager/insert-options.html "Insert options")自体に挿入ルールを割り当てることで、実行時にユーザーの効果的な挿入オプションを動的に再定義できます。管理者が選択できるカスタム挿入ルールも実装できます。

データテンプレートまたは個別の項目にインサートルールを割り当てるには:

1.  **テンプレートマネージャー**またはコンテンツエディターで、標準値の項目または個別の項目を選択します。
2.  「 **構成** 」タブの **「オプションを挿入** 」グループで「 **割り当て**」をクリックします。
3.  **Insert Options**ダイアログボックスの**Insert Rules**タブで、Insert Ruleをダブルクリックして**Selected**リストに移動します。
4.  **OK**をクリックします。

### 例:単一のデータテンプレートに基づく複数の子を防ぐコード

以下のInsertルールの例はこれらの要件を実装しています:

-   ホームアイテムの下で、ユーザーは複数の異なるデータテンプレートに基づいて子項目を作成できます。
-   ホームアイテムの下では、ユーザーは任意のデータテンプレートに基づいて2つの子項目を作成することはできません。

namespace Namespace.Data.InsertRules
{
 public class PreventChildrenWithCommonTemplate : Sitecore.Data.Masters.InsertRule
 {
 public PreventChildrenWithCommonTemplate(System.Int32 count)
 {
 }
 public override void Expand( System.Collections.Generic.List<Sitecore.Data.Items.Item> insertOptions, Sitecore.Data.Items.Item item)
 {
 foreach (Sitecore.Data.Items.Item insertOption in insertOptions.ToArray())
 {
 if(item.Axes.SelectSingleItem("./\*@@templateid='"+insertOption.ID + "'")!=null)
 {
 insertOptions.Remove(insertOption);
 }
 }
 }
 }
 }