---
title: "コアコレクションモデルのファセットを活用してください"
slug: "use-core-collection-model-facets"
abstract: "コアコレクションモデルのファセットの使い方。"
---
# コアコレクションモデルのファセットを活用してください

xConnectは複数の組み込みファセットを定義しています。これらのファセットはSitecore.XConnect.Collection.Model名前空間に位置しています。

## コア収集モデルを参照

以下の例は、自分のモデル内でSitecore.XConnect.Collection.Model.CollectionModel.Modelを参照する方法を示しています。

xdbModelBuilder modelBuilder = new XdbModelBuilder("ModelName", new XdbModelVersion(0,1));
modelBuilder.ReferenceModel(Sitecore.XConnect.Collection.Model.CollectionModel.Model);

## コアコレクションモデルの側面を用いる

コアコレクションモデル内でファセットを扱うには、示されたデフォルトのファセットキーを使用します。

var avatarFacet = contact.GetFacet<Avatar>(Avatar.DefaultFacetKey);

すべての組み込みファセットにはデフォルトのファセットキーがあり、それはDefaultFacetKeyプロパティで表現されます。例えば、PersonalInformation.DefaultFacetKey。

## 接触面

### PersonalInformation(PersonalInformation)

PersonalInformationの側面には必須のプロパティはありません。

PersonalInformation personal = new PersonalInformation();

personal.Birthdate = new DateTime(1901, 01, 20, 0, 0, 0, DateTimeKind.Utc;
personal.JobTitle = "xDB Enthusiast";
personal.LastName = "McSitecore";
personal.MiddleName = "";
personal.FirstName = "Myrtle";
personal.Gender = "Female";
personal.PreferredLanguage = "dk-DK";
personal.Suffix = "the Magnificent";
personal.Title = "Miss";
personal.Nickname = "Myrtle the Cool";

client.SetFacet<PersonalInformation>(new FacetReference(contact, PersonalInformation.DefaultFacetKey), personal);

クライアント側で .SetPersonal() 拡張機能も使えます:

client.SetPersonal(contact, personal);

### メールアドレスリスト

var preferredEmail = new EmailAddress("sample@sitecore.test", true);
var preferredKey = "Work";

var emailFacet = new EmailAddressList(preferredEmail, preferredKey)
{
 Others = new Dictionary<string, EmailAddress>()
 {
 { "Spam", new EmailAddress("spam@me.com", false) }
 },
};

client.SetFacet<EmailAddressList>(new FacetReference(contact, EmailAddressList.DefaultFacetKey), emailFacet);

> !重要優先メールアドレスは .Othersリストには含まれていません。

クライアント側で .SetEmails() 拡張機能も使えます:

client.SetEmails(contact, emailFacet);

### アドレスリスト

// Preferred address
Address preferredAddress = new Address()
{
 AddressLine1 = "Slartibartfast Mansion",
 AddressLine2 = "42",
 AddressLine3 = "Douglas Road",
 AddressLine4 = "Adams Common",
 City = "Sqornshellous",
 CountryCode = "UK",
 GeoCoordinate = new GeoCoordinate(51.507351f, -0.127758f),
 PostalCode = "AB1 2CD",
 StateOrProvince = "Dragonville"
};

AddressList addressList = new AddressList(preferredAddress, "Home");

Address workAddress = new Address()
{
 AddressLine1 = "44 Work Street",
 City = "Work City",
 CountryCode = "DK"
};

addressList.Others.Add("Work", workAddress);

> !重要希望住所は .Othersに記載されていません。

クライアント側で .SetAddresses() 拡張機能も使えます:

client.SetAddresses(contact, addressList);

### 電話番号リスト

var countryCode = "44";
var number = "(555) 555-5555"

PhoneNumber mainNumber = new PhoneNumber(countryCode, number)
{
 Extension = "5"
};

PhoneNumberList numbers = new PhoneNumberList(mainNumber, "Home");

PhoneNumber mobileNumber = new PhoneNumber()
{
 CountryCode = "44",
 Number = "07912345678"
};

numbers.Others.Add("Mobile", mobileNumber);

> !重要希望電話番号はOthersリストに含まれていません。

クライアント側で .SetPhoneNumbers() 拡張機能も使えます:

client.SetPhoneNumbers(contact, numbers);

### 同意情報

ConsentInformation consent = new ConsentInformation();

consent.ConsentRevoked = false;
consent.DoNotMarket = true;
consent.ExecutedRightToBeForgotten = false;

クライアント側で .SetConsentInformation() 拡張機能も使えます:

client.SetConsentInformation(contact, consent);

### リスト購読

ListSubscriptions subscriptions = new ListSubscriptions();

var listId = Guid.NewGuid(); /\* Replace with real list ID \*/
var isActive = true;
var added = DateTime.UtcNow;

ContactListSubscription subscription = new ContactListSubscription(added, isActive, listId);

subscriptions.Subscriptions.Add(subscription);

クライアントの .SetListSubscriptions() 拡張機能を使って、次のファセットを設定できます:

client.SetListSubscriptions(contact, subscriptions);

#### 連絡先リストの定義を取得する方法

各ContactListSubscriptionはリストIDを保存します。リストの詳細(リスト名など)にアクセスしたい場合は、[Contact List Definition Manager](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-platform/contact-lists.html "Contact lists") (マーケティングオペレーションAPIの一部)をご利用ください。

### AutomationPlanEnrollmentCache

AutomationPlanEnrollmentCacheには、連絡先の現在の自動化プラン登録状況と、登録されているアクティビティが含まれます。このファセットは、新しいプランやアクティビティに登録される際に自動化[エンジン](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-platform/marketing-automation-engine.html "Marketing Automation Engine")によって設定されます。

> !重要このファセットは手動で設定しないでください。マーケティング [オートメーション運用API](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-platform/marketing-automation-operations-api.html "Marketing Automation Operations API")によって更新されます。

AutomationPlanEnrollmentCache enrollmentCache = new AutomationPlanEnrollmentCache();

foreach (var enrollment in enrollmentCache.ActivityEnrollments)
{
 Guid activityID = enrollment.ActivityId;
 Guid planID = enrollment.AutomationPlanDefinitionId;
 DateTime entryDate = enrollment.ActivityEntryDate; // Entry date for activity
 string contextKey = enrollment.ContextKey;
}

この側面を復元するには:

var facet = contact.GetFacet<AutomationPlanEnrollmentCache>(AutomationPlanEnrollmentCache.DefaultFacetKey);

#### 計画と活動の定義を取得しましょう

各AutomationPlanEnrollmentはアクティビティIDとプランIDを保存します。プランやアクティビティの詳細(名前など)にアクセスし**たい場合は、**[自動化プラン定義マネージャー](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-platform/automation-plans.html "Automation plans")(マーケティングオペレーションAPIの一部)をご利用ください。

### アバター

var pictureByteArray = new byte { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };
var mimeType = "image/jpeg";

Avatar avatar = new Avatar(pictureByteArray, mimeType);

この側面を復元するには:

var facet = contact.GetFacet<Avatar>(Avatar.DefaultFacetKey);

クライアント側で .SetAvatar() 拡張機能も使えます:

client.SetAvatar(contact, avatar);

## 計算された接触面

以下の [計算された接触面は](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-platform/calculated-facets.html "Calculated facets") デフォルトで利用可能です:

-   [接触行動プロファイル](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-platform/contact-behavior-profile.html "Contact Behavior Profile")
-   [関与措置](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-platform/engagement-measures.html "Engagement measures")
-   [キービヘイビアキャッシュ](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-platform/key-behavior-cache.html "Key behavior cache")
-   [インタラクションキャッシュ](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-platform/interactions-cache.html "Interactions cache")

> !重要計算されたファセットの値は決して設定すべきではありません。これらはxConnectにやり取りが提出されるたびにサービスプラグインによって設定されます。

## 相互作用の側面

### UserAgentInfo

UserAGentInfo userAgentInfo = new UserAgentInfo();

userAgentInfo.CanSupportTouchScreen = true;
userAgentInfo.DeviceType = "Mobile";
userAgentInfo.DeviceVendor = "HTC"
userAgentInfo.DeviceVendorHardwareModel = "HTC Desire"

### IpInfo

var ipAddress = "8, 8, 8, 8";

IpInfo ipInfo = new IpInfo(ipAddress);

ipInfo.Isp = "Super Duper Internet";
ipInfo.Latitude = 55.673977;
ipInfo.Longitude = 12.568730;
ipInfo.MetroCode = "408";
ipInfo.AreaCode = "205";
ipInfo.BusinessName = "Bizniz";
ipInfo.City = "Super City";
ipInfo.Country = "Narnia";
ipInfo.PostalCode = "12A 24B";
ipInfo.Region = "Icy Plains";
ipInfo.Url = "host.local";
ipInfo.Dns = "dnsvalue";

この側面を復元するには:

var facet = interaction.GetFacet<IpInfo>IpInfo.DefaultFacetKey);

クライアント側で .SetIpInfo() 拡張機能も使えます:

client.SetIpInfo(interaction, ipInfo);

### プロフィールスコア

ProfileScore profileScore = new ProfileScore()
{
 MatchedPatternId = Guid.NewGuid(), // Guid of matched profile
 ProfileDefinitionId = Guid.NewGuid(), // Guid of profile
 Score = 1.9f,
 ScoreCount = 3,
 Values = new Dictionary<Guid, float>() { { Guid.NewGuid(), 1.2f }, { Guid.NewGuid(), 1.2f } }
};

ProfileScores profiles = new ProfileScores();

profiles.Scores.Add(Guid.NewGuid(), profileScore);

// NOTE: The Scores dictionary key should be the profile definition ID as a Guid

### ウェブ訪問

WebVisitファセットはウェブサイト上で発生したやり取りに関する情報を保存します。Sitecore文脈では、このファセットはセッション終了時にトラッカーによって埋め込まれます。以下の例は、WebVisitファセットを設定し、複数のPageViewEventイベントを追加することでウェブ訪問を模倣する方法を示しています。

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

namespace Documentation
{
 public class SampleWebVisit
 {
 public async void Example()
 {
 using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
 {
 // Create a new contact and set some facets
 var contact = new Contact();

 var personalInfoFacet = new PersonalInformation()
 {
 FirstName = "Myrtle",
 LastName = "McSitecore"
 };

 client.SetPersonal(contact, personalInfoFacet);

 client.AddContact(contact);

 // Create a new interaction for the contact
 Guid channelId = Guid.NewGuid();
 string userAgent = "Sample User Agent";
 Interaction webInteraction = new Interaction(contact, InteractionInitiator.Brand, channelId, userAgent);

 // Create a new web visit facet model
 var webVisitFacet = new WebVisit();

 // Populate data about the web visit
 webVisitFacet.Browser = new BrowserData() { BrowserMajorName = "Chrome", BrowserMinorName = "Desktop", BrowserVersion = "22.0" };
 webVisitFacet.Language = "en";
 webVisitFacet.OperatingSystem = new OperatingSystemData() { Name = "Windows", MajorVersion = "10", MinorVersion = "4" };
 webVisitFacet.Referrer = "www.google.com";
 webVisitFacet.Screen = new ScreenData() { ScreenHeight = 1080, ScreenWidth = 685 };
 webVisitFacet.SearchKeywords = "sitecore";
 webVisitFacet.SiteName = "website";

 var itemId = Guid.NewGuid();
 var itemVersion = 5;

 // First page view
 pageView = new PageViewEvent(new DateTime(2016, 10, 10, 13, 20, 22).ToUniversalTime(), itemId, itemVersion, "en");

 pageView.ItemLanguage = "en";
 pageView.Duration = new TimeSpan(3000);

 webInteraction.Events.Add(pageView);

 var secondItemId = Guid.NewGuid();
 var secondItemVersion = 2;

 // Second page view
 PageViewEvent pageView2 = new PageViewEvent(new DateTime(2016, 10, 10, 13, 21, 22).ToUniversalTime(), secondItemId, secondItemVersion, "en");

 pageView.ItemLanguage = "en";
 pageView.Duration = new TimeSpan(3200);

 webInteraction.Events.Add(pageView2);

 // First goal, associated with second page view
 Goal goal1 = new Goal(Guid.NewGuid(), new DateTime(2016, 10, 10, 13, 22, 22).ToUniversalTime());

 goal1.ParentEventId = pageView2.Id;

 webInteraction.Events.Add(goal1);

 var thirdItemId = Guid.NewGuid();
 var thirdItemVersion = 2;

 // Third page view
 PageViewEvent pageView3 = new PageViewEvent(new DateTime(2016, 10, 10, 13, 22, 22).ToUniversalTime(), thirdItemId, thirdItemVersion, "en");

 pageView.ItemLanguage = "en";
 pageView.Duration = new TimeSpan(1200);

 webInteraction.Events.Add(pageView3);

 // Set web visit facet on interaction
 client.SetWebVisit(webInteraction, webVisitFacet);

 // Add interaction
 client.AddInteraction(webInteraction);

 // Submit contact and interaction
 await client.SubmitAsync(); // Synchronous version - client.SubmitAsync().GetAwaiter().GetResult();
 }
 }
 }
}

### ロケインフォ

LocaleInfo localeInfo = new LocaleInfo();

localeInfo.TimeZoneOffset = new TimeSpan(200);
localeInfo.GeoCoordinate = new GeoCoordinate(1.11111f, 2.22222f);

クライアント側で .SetLocaleInfo() 拡張機能も使えます:

client.SetLocaleInfo(interaction, localeInfo);
## ファセット取得/セット拡張メソッド

クラスにusingSitecore.XConnect.Collection.Modelを追加して、連絡先、インタラクション、xConnectクライアント向けの拡張メソッドにアクセスでき、組み込みのファセットの取得や設定を容易にします。例えば、myContact.Personal() は以下のメソッドを呼び出します:

public static PersonalInformation Personal(this Contact c)
{
 return c.GetFacet<PersonalInformation>(PersonalInformation.DefaultFacetKey);
}

同様に、client.SetAddresses(myContactObject,myFacetObject) は以下の方法を呼びます。

public static SetFacetOperation<AddressList> SetAddresses(this XdbContext context, IEntityReference<Contact> contact, AddressList facet)
{
 return context.SetFacet(new FacetReference(contact, PersonalInformation.DefaultFacetKey), facet);
}