---
title: "カスタム条件とセグメンテーションクエリを作成してください"
slug: "create-a-custom-condition-and-segmentation-query"
abstract: "List Managerやマーケティングオートメーションエンジンで使用されるカスタム条件およびセグメンテーションクエリの作成方法。"
---
# カスタム条件とセグメンテーションクエリを作成してください

カスタム条件とセグメンテーションクエリを作成して、連絡先を特定しマーケティングオートメーションプランに登録することができます。以下の例では、Sitecore:

-   顧客を好みの映画館ごとにセグメント化し、毎週最も関連性の高いプロモーションを送ることができます。例えば、Sitecore Cityの映画館を訪れた顧客は、今後開催されるクラシック映画祭のチケットを3-2で購入できます。
-   顧客が希望する映画館に応じて自動化プランの進路を変更します。例えば、Free Popcornプランに登録している顧客は、East Sitecoreを好む映画館であればチョコレートのクーポンを受け取ります。East Sitecore映画館は誤って2000本のチョコレートバーを20,000本注文してしまいました。

この例では、単一のクラス(述 *語*とも呼ばれる)を作成し、以下のインターフェースを実装します。

-   ICondition実装はマーケティングオートメーションエンジンで使用されます。
-   IContactSearchQueryContext実装はList Managerがセグメント化されたリストを作成するために使用されます。

> !注ほとんどの場合、条件とセグメンテーションクエリの両方を作成するのは理にかなっています。しかし、会員権IDのように特定の連絡先に特有のデータを対象とする場合は、セグメンテーションクエリを作成する意味がありません。この場合、IContactSearchQueryContextを実装しないでください。

この例は、以下の条件を満たす場合にtrueを返すカスタム条件およびセグメンテーションクエリクラスの作成方法を示しています。

-   接触は少なくとも一度は相互作用します。
-   提供された映画館名は、連絡先の希望する映画館名と一致します。

> !注Sitecoreのパーソナライズエンジンは、[異なる条件](https://doc.sitecore.com/xp/en/users/101/sitecore-experience-platform/en/the-rule-set-editor.html)の実装を使用しています。

## CinemaDetailsの側面を作成して展開します

カスタム [ファセット](https://doc.sitecore.com/xp/ja/developers/105/sitecore-experience-platform/create-a-custom-facet.html "Create a custom facet")、例えばCinemaDetailsファセットを作成し、それを条件クラスで使用するためにデプロイする必要があります。

CinemaDetailsの側面を作成・展開するには:

1.  Sitecoreを継承するクラスを作成してください。XConnect.Facet。
    
    using System;
    using System.Linq.Expressions;
    using Sitecore.Framework.Rules;
    using Sitecore.XConnect;
    using Sitecore.XConnect.Segmentation.Predicates;
    
    namespace Documentation.Examples
    {
     // Contact facet that stores contact's preferred cinema name
     Serializable
     public class CinemaDetails : Facet
     {
     public const string DefaultFacetKey = "CinemaDetails";
     public string PreferredCinema { get; set; }
     }
    }
    
2.  [コレクションモデル](https://doc.sitecore.com/xp/ja/developers/105/sitecore-experience-platform/create-a-custom-model.html "Create a custom model")を実装し登録します。
    
3.  [収集モデルを展開します。](https://doc.sitecore.com/xp/ja/developers/105/sitecore-experience-platform/deploy-a-custom-model.html "Deploy a custom model")
    

## 条件クラスを作成する

CinemaDetailsのファセットを作成したら、カスタムファセットを使う条件ロジックを持つ条件クラスを作成する必要があります。

条件クラスを作成するには:

-   以下のコードサンプルに示すように、 ICondition と IContactSearchQueryFactory を継承するクラスを作成します。

> !重要結合はすべての検索プロバイダーでサポートされているわけではないため、contact.InteractionsプロパティではなくInteractionsCacheファセットを使う必要があります。

using System;
using System.Linq.Expressions;
using Sitecore.Framework.Rules;
using Sitecore.XConnect;
using Sitecore.XConnect.Segmentation.Predicates;
using Sitecore.XConnect.Collection.Model;
using System.Linq;

namespace Documentation.Examples
{
 public class PreferredCinemaMatches : ICondition, IContactSearchQueryFactory
 {
 public string PreferredCinema { get; set; }

 // TIP: There are other operation types in theSitecore.XConnect.Segmentation.Predicates namespace
 public StringOperationType Comparison { get; set; }

 // Evaluates condition for single contact
 public bool Evaluate(IRuleExecutionContext context)
 {
 var contact = context.Fact<Contact>();

 return Comparison.Evaluate(contact.GetFacet<CinemaDetails>(CinemaDetails.DefaultFacetKey)?.PreferredCinema, PreferredCinema)
 && contact.Interactions.Any();
 }

 // Evaluates contact in a search context
 // IMPORTANT: Use InteractionsCache() facet rather than contact.Interactions as some search providers do not provide joins.
 public Expression<Func<Contact, bool>> CreateContactSearchQuery(IContactSearchQueryContext context)
 {
 return contact => Comparison.Evaluate(contact.GetFacet<CinemaDetails>(CinemaDetails.DefaultFacetKey).PreferredCinema, PreferredCinema)
 && contact.InteractionsCache().InteractionCaches.Any();
 }
 }
}

## 条件記述子を作成する

条件記述子は条件タイプと関連するテキストを定義します。Sitecoreユーザーはその後、List Managerおよびマーケティングオートメーションのユーザーインターフェースで条件テキストを検索できます。

条件記述子を作成するには:

1.  カスタム条件およびセグメンテーションクエリDLLを、すべてのコアロール(Content Management、Content Delivery、xDB Processing)に展開します。
    
2.  */sitecore/system/Settings/Rules/Definitions/Elements*で自分の状態に合った場所を選びます。例えば、*/sitecore/system/Settings/Rules/Definitions/Elements/XConnect - Contact Personal Details(個人情報に連絡*)などです。
    
    > !注状態の場所によって、どのユーザーインターフェースで利用可能かが決まります。
    
3.  以下のテンプレートを使って条件を作成します */sitecore/Templates/System/Rules/Condition template*:
    
    ![xConnect conditions shown in the Content Editor](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/105/sitecore-experience-platform/images/create-condition1.png)
    
4.  以下の例のように**Type**と**Text**フィールドを指定します。この例では文字列比較を用いています:
    
    ![Type and Text fields defined for the preferred cinema condition](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/105/sitecore-experience-platform/images/condition1.png)
    

## List Managerでカスタムセグメンテーションルール用のセクションを作成する

セグメント作成時にカスタムルールを見つけやすくするために、「 **ルール作成** 」ダイアログボックスに表示するセクションを作成できます。

![Custom section in the Create rule dialog box.](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/105/sitecore-experience-platform/images/CreateRuleCustomSection.png)

カスタムセグメンテーションルール用のセクションを作成するには、List Manager内で以下を行います:

1.  マスターデータベースの */sitecore/System/Settings/Rules/Definitions* 項目に行ってください。
2.  *Element*フォルダを右クリックしてから「**挿入、要素フォルダ**」をクリックします。
3.  **メッセージ**ダイアログボックスでフォルダ名を入力し、**OK**をクリックします。
4.  新しく作成した *Element* フォルダを展開し、 Tags/Default アイテムに移動します。
5.  *Default*アイテムを選択し、**コンテンツ**タブのタ**クソノミー**セクションの**タグフィールド**で、**xConnect – Search Query**タグをダブルクリックして**「選択済み**リスト」に移動してください。
6.  変更を保存してください。

> !注カスタムセクションは少なくとも1つのルールが含まれている場合にのみ表示されます。

## マーケティングオートメーションエンジンの設定

マーケティングオートメーションエンジンは、カスタム条件に照らしてコンタクトを評価するために、条件とセグメンテーションクエリDLLのコピーが必要です。

> !注マーケティングオートメーションエンジンの文脈では、条件クエリとセグメンテーションクエリの組み合わせは構成における *述語* と呼ばれます。

マーケティングオートメーションエンジンの設定:

1.  条件とセグメンテーションクエリのDLLをマーケティングオートメーションエンジンにデプロイしてください。
    
2.  以下のXMLで設定ファイルを作成し、C:\\path\\to\\xconnect\\App\_data\\jobs\\continuous\\AutomationEngine\\App\_Data\\Config\\sitecore\\Segmentationを追加します。 idノードはSitecoreの条件項目のIDと一致しなければなりません。
    
    <Settings>
     <Sitecore>
     <XConnect>
     <Services>
     <DescriptorLocator>
     <Options>
     <PredicateDescriptors>
     <PreferredCinemaMatches>
     <id>{E9046292-BF68-4733-9FD4-10A74FB45E50}</id>
     <type>Documentation.Examples.PreferredCinemaMatches, Documentation.Examples</type>
     </PreferredCinemaMatches>
     </PredicateDescriptors>
     </Options>
     </DescriptorLocator>
     </Services>
     </XConnect>
     </Sitecore>
    </Settings>
    

> !注デフォルトの述語はsc.XConnect.Segmentation.Predicates.Model.xml設定ファイルで定義されます。