---
title: "接触と相互作用の抽出"
slug: "extracting-contacts-and-interactions"
abstract: "CreateContactEnumerator()およびCreateInteractionEnumerator()メソッドを使ってコンタクトやインタラクションを抽出する方法。"
---
# 接触と相互作用の抽出

CreateContactEnumerator()とCreateInteractionEnumerator()のメソッドを使って接触点やインタラクションを抽出してください。バッチサイズを指定し、展開オプションを使って各結果でどのファセットを返すべきか指定する必要があります。

データ抽出は同期実行できません。

## 接触線の抽出

以下の例は、すべての接触を抽出する方法を示しています。結果は200個のバッチで返されます。 CreateContactEnumerator() メソッドはContactExpandOptionsオブジェクトを受け入れ、どの接触面や関連する相互作用が返されるかを決定します。

> !重要エクスポートされたJSONには、PIISensitiveとマークされたファセットを抽出する場合、PII(個人識別情報)が含まれます。

using Sitecore.XConnect;
using Sitecore.XConnect.Collection.Model;
using System;
using System.Collections.Generic;

namespace Documentation
{
 public class DataExtraction
 {
 // Async interaction
 public async void ExampleAsync()
 {
 using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
 {
 try
 {
 // Extract contacts
 var contactCursor = await client.CreateContactEnumerator(
 new ContactEnumeratorOptions(
 new ContactExpandOptions(PersonalInformation.DefaultFacetKey)
 {
 Interactions = new RelatedInteractionsExpandOptions(IpInfo.DefaultFacetKey)
 {
 StartDateTime = DateTime.UtcNow.AddDays(-300),
 EndDateTime = DateTime.UtcNow.AddDays(-200)
 }
 })
 {
 BatchSize = 200
 });

 var totalContactsCount = contactCursor.TotalCount;

 while (await contactCursor.MoveNext())
 {
 // Batch of 200
 var currentBatch = contactCursor.Current;

 // Write batch to third party or do something else
 }
 }
 catch (XdbExecutionException ex)
 {
 // Manage exceptions
 }
 }
 }
 }
}

> !注データ抽出は [、マージ時に廃](https://doc.sitecore.com/xp/ja/developers/105/sitecore-experience-platform/merge-contacts.html "Merge contacts")止された連絡先を含むすべての連絡先を返します。

## 相互作用の抽出

以下の例は、指定されたカットオフ日以前に保存されたすべての相互作用を抽出する方法を示しています。結果は200件のバッチで返されます。 CreateInteractionEnumerator() メソッドはInteractionExpandOptionsオブジェクトを受け入れ、どの相互作用面と関連する接触面が返されるかを決定します。

using Sitecore.XConnect;
using Sitecore.XConnect.Collection.Model;
using System;
using System.Collections.Generic;

namespace Documentation
{
 public class DataExtraction
 {
 // Async interaction
 public async void ExampleAsync()
 {
 using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
 {
 try
 {
 // Extract interactions
 var interactionCursor = await client.CreateInteractionEnumerator(
 new InteractionEnumeratorOptions(DateTime.UtcNow, new InteractionExpandOptions(IpInfo.DefaultFacetKey)
 {
 Contact = new RelatedContactExpandOptions(PersonalInformation.DefaultFacetKey)
 })

 {
 BatchSize = 200
 });

 var totalInteractionsCount = interactionCursor.TotalCount;

 while (await interactionCursor.MoveNext())
 {
 // Batch of 200
 var currentBatch = interactionCursor.Current;

 // Write batch to third party or do something else
 }

 }
 catch (XdbExecutionException ex)
 {
 // Manage exceptions
 }
 }
 }
 }
}

### 日付範囲の指定

CreateInteractionEnumerator()メソッドは、cutOffDateパラメータと連動する以下のオプションの構成パラメータを受け入れます。

-   minStartDateTime - 最小相互作用 StartDateTime (含む)。
-   maxStartDateTime\- 最大相互作用 StartDateTime (排他的)。

相互作用のStartDateTimeプロパティは相互作用が開始された時期を表し、LastModifiedプロパティは相互作用がxConnectに保存された時刻を表します。外部システムからスケジュールされた間隔でインタラクションがインポートされた場合、LastModified日はStartDateTimeより大きい可能性が高いです。

開始日の範囲と終了日を指定することで、2つの日付間で発生したやり取りを抽出できますが、特定の日付以降にxConnectに保存されたその範囲内のやり取りは除外できます。

![A cut-off date is used to limit the interactions that are extracted from xConnect](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/105/sitecore-experience-platform/images/data-extraction1.png)

> !注デフォルトでは、cutOffDateは抽出カーソルの作成時間を使用します。抽出処理に時間がかかるため、その後の新しい接触や相互作用は含まれません。

以下の例では、11月1日から11月10日までに始まったすべてのインタラクションを返しますが、11月8日以降に保存されたインタラクションは除外します。

using Sitecore.XConnect;
using Sitecore.XConnect.Collection.Model;
using System;
using System.Collections.Generic;

namespace Documentation
{
 public class DataExtraction
 {
 // Async interaction
 public async void ExampleAsync()
 {
 using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
 {
 try
 {
 var startDate = new DateTime(2017, 11, 01).ToUniversalTime(); // 1st November 2017

 var endDate = new DateTime(2017, 11, 10).ToUniversalTime(); // 10th November 2017

 var cutOff = new DateTime(2017, 11, 08).ToUniversalTime(); // 8th November 2017

 // Extract interactions
 var dateRangeInteractionCursor = await client.CreateInteractionEnumerator(

 new InteractionEnumeratorOptions(cutOff, new InteractionExpandOptions(IpInfo.DefaultFacetKey)

 {
 Contact = new RelatedContactExpandOptions(PersonalInformation.DefaultFacetKey)

 })

 {

 MinStartDateTime = startDate,

 MaxStartDateTime = endDate,

 BatchSize = 200

 });

 var totalDateRangeInteractionsCount = dateRangeInteractionCursor.TotalCount;

 while (await dateRangeInteractionCursor.MoveNext())

 {

 // Batch of 200

 var currentBatch = dateRangeInteractionCursor.Current;

 }
}
 catch (XdbExecutionException ex)
 {
 // Manage exceptions
 }
 }
 }
 }
}

## カーソルマークの使用

プロセスが中断された場合、カーソルマークを使ってデータ抽出を再開できます。これは接触データ抽出とインタラクションデータ抽出の両方に適用されます。以下の例は、例外が投げられた場合にカーソルマークをCreateContactEnumerator() に渡す方法を示しています:

using Sitecore.XConnect;
using Sitecore.XConnect.Collection.Model;
using System;
using System.Collections.Generic;

namespace Documentation
{
 public class DataExtractionBookmark
 {
 // Async interaction
 public async void ExampleAsync(byte b)
 {
 using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.XConnectClientConfiguration.GetClient())
 {
 IAsyncEntityBatchEnumerator<Contact> contactCursor = null;
 var batchSize = 200;
 byte bookmark = b;

 try
 {
 var expandOptions = new RelatedInteractionsExpandOptions(IpInfo.DefaultFacetKey)
 {
 StartDateTime = DateTime.UtcNow.AddDays(-300),
 EndDateTime = DateTime.UtcNow.AddDays(-200)
 };

 if (bookmark == null)
 {
 // Extract contacts - no bookmark
 contactCursor = await client.CreateContactEnumerator(new ContactEnumeratorOptions(
 new ContactExpandOptions(PersonalInformation.DefaultFacetKey)
 {
 Interactions = expandOptions
 })
 {
 BatchSize = batchSize
 });
 }
 else
 {
 // Extract contacts - with bookmark
 contactCursor = await client.CreateContactEnumerator(
 new BookmarkContactEnumeratorOptions(
 batchSize,
 bookmark,
 new ContactExpandOptions(PersonalInformation.DefaultFacetKey)
 { Interactions = expandOptions
 }));

 }
 , batchSize);
 }

 var totalContactsCount = contactCursor.TotalCount;

 while (await contactCursor.MoveNext())
 {
 // Batch of 200
 var currentBatch = contactCursor.Current;
 bookmark = contactCursor.GetBookmark();
 }
 }
 catch (XdbExecutionException ex)
 {
 // Something happened!
 // Restart at cursor mark
 ExampleAsync(bookmark);
 }
 }
 }
 }
}

シャードの位置情報はカーソル内に保存されません。つまり、シャードが別のサーバーに移動されるとカーソルマークは期限切れになります。カーソルマークが期限切れになった場合は、データ抽出プロセスを最初から開始しなければなりません。

## 接触マージとデータ抽出

データ抽出がどのように処理されるかについては、[マージ連絡先](https://doc.sitecore.com/xp/ja/developers/105/sitecore-experience-platform/merge-contacts.html "Merge contacts") を参照してください:

-   以前に統合された連絡先。
-   データ抽出中に行われるコンタクトマージ。