---
title: "コンタクトプロセッサを作成する"
slug: "create-a-contact-processor"
abstract: "コンタクトプロセッサの作成と登録方法。"
---
# コンタクトプロセッサを作成する

このトピックでは、自分だけのコンタクトプロセッサーを作成・登録する方法を示します。

## ContactProcessingProcessorを継承する

すべてのコンタクトプロセッサは以下の以下のものを継承しますSitecore.Analytics.Aggregation.Pipeline.ContactProcessingProcessor:

public class SampleProcessor : ContactProcessingProcessor
{
 protected override void OnProcess(ContactProcessingArgs args)
 {
 }
}

## 取得する接触面を指定してください

処理パイプラインは[xConnect Client API](https://doc.sitecore.com/xp/ja/developers/91/sitecore-experience-platform/xconnect-client-api-overview.html "xConnect Client API overview")を使って接触点を取得します。どの接触面を取得するかを指定するには、プロセッサにUsesContactFacetsを付けて特定する必要があります。

使用例:

UsesContactFacets("Personal", "Classification")
public class SampleProcessor : ContactProcessingProcessor
{
 protected override void OnProcess(ContactProcessingArgs args)
 {
 }
}

ファセットキーはハードコーディングしないことが推奨されます。Sitecore[の組み込みファセット名](https://doc.sitecore.com/xp/ja/developers/91/sitecore-experience-platform/use-core-collection-model-facets.html "Use core collection model facets") はファセットオブジェクト自体にあります。例えばPersonalInformation.DefaultFacetKey。

UsesContactFacets(PersonalInformation.DefaultFacetKey, Classification.DefaultFacetKey)
public class SampleProcessor : ContactProcessingProcessor
{
}

> !重要特定のファセットを明示的にリクエストしなければ、処理中に利用できません。なぜか理解するために、[連絡先取得](https://doc.sitecore.com/xp/ja/developers/91/sitecore-experience-platform/get-contacts.html "Get contacts")時の拡張オプションの役割についてさらに詳しく読んでください。

## ContactProcessingArgsの使用

UsesContactFacets(PersonalInformation.DefaultFacetKey, Classification.DefaultFacetKey)
public class SampleProcessor : ContactProcessingProcessor
{
 protected override void OnProcess(ContactProcessingArgs args)
 {
 }
}

### 連絡先へのアクセス

連絡先はargsで直接利用できます:

UsesContactFacets(PersonalInformation.DefaultFacetKey, Classification.DefaultFacetKey)
public class SampleProcessor : ContactProcessingProcessor
{
 protected override void OnProcess(ContactProcessingArgs args)
 {
 var contact = args.Contact;
 }
}

連絡先の要素をリクエストされた場合は、.GetFacet<T> 延長方式からアクセス可能です。

var personalFacet = args.Contact.GetFacet<PersonalInformation>(PersonalInformation.DefaultFacetKey);

あるいは、Sitecore.XConnect.Collection.Modelにある拡張方法を使うこともできます:

var personalFacet = args.Contact.Personal();

### アクセス処理理由

args.ProcessingReasonプロパティはタイプSitecore.Analytics.Processing.ProcessingReasonの のenumを返します。これは、そもそもなぜその連絡が処理されているのかを示しています。

-   Created:接触は新しい
-   Updated:連絡先が更新されました
-   Obsoleted: 連絡先識別子は廃止されました
-   Unknown:処理の理由は不明です

### 他のAPIへのアクセス

すべてのプロセッサは以下のAPIにアクセスできargs.Sources:

-   xConnect クライアント API
-   リファレンスデータサービス
-   定義管理者
-   分類管理者

> !重要コンタクトプロセッサの文脈では、すべてのサービスエンドポイント(xConnect、定義、分類、参照データサービス)は読み取り専用として扱うべきです。

#### xConnectへのアクセス

xConnectクライアントAPIの読み取り専用インスタンスはargs.Sources.Collectionを通じてアクセスされます。連絡先データの検索や取得が可能です:

UsesContactFacets(PersonalInformation.DefaultFacetKey, Classification.DefaultFacetKey)
public class SampleProcessor : ContactProcessingProcessor
{
 protected override void OnProcess(ContactProcessingArgs args)
 {
 // Searching
 var contacts = args.Sources.Collection.Contacts.Where(x => x.Identifiers.Any(c => c.IdentifierType == ContactIdentifierType.Known));
 }
}

> !注連絡先はargs.Contactを通じて利用できることを忘れないでください。

#### 定義マネージャーへのアクセス

UsesContactFacets(PersonalInformation.DefaultFacetKey, Classification.DefaultFacetKey)
public class SampleProcessor : ContactProcessingProcessor
{
 protected override void OnProcess(ContactProcessingArgs args)
 {
 var goalManager = args.Sources.Definitions.GetDefinitionManager<IGoalDefinition>();
 }
}

#### 分類管理ツールへのアクセス

UsesContactFacets(PersonalInformation.DefaultFacetKey, Classification.DefaultFacetKey)
public class SampleProcessor : ContactProcessingProcessor
{
 protected override void OnProcess(ContactProcessingArgs args)
 {
 var assetTaxonomyManager = args.Sources.Taxonomies.GetManager<AssetTaxonomyManager>();
 }
}

#### 参照データサービスへのアクセス

UsesContactFacets(PersonalInformation.DefaultFacetKey, Classification.DefaultFacetKey)
public class SampleProcessor : ContactProcessingProcessor
{
 protected override void OnProcess(ContactProcessingArgs args)
 {
 var definitionType = args.Sources.Reference.EnsureDefinitionType("alpha");
 var criteria = new DefinitionCriteria("enterprise", definitionType)
 {
 Culture = new CultureInfo("da")
 };

 Definition<string, string> definition = args.Sources.Reference.GetDefinition<string, string>(criteria, true);
 }
}

> !注コンタクト処理パイプラインは参照データサービスAPIの読み取り専用版を使用し、クライアントAPIは使用しません。

## コンタクトプロセッサの設定

プロセッサーをコンタクト処理パイプラインに追加してください:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <sitecore>
<pipelines>
 <group groupName="analytics.aggregation">
 <pipelines>
 <contacts>
 <processor type="Sitecore.Analytics.Aggregation.Tests.Processors.FakeContactProcessingProcessor, Sitecore.Analytics.Aggregation.Tests" />
 </contacts>
 </pipelines>
 </group>
</pipelines>
 </sitecore>
</configuration>