ウォークスルー
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
このウォークスルーは「エクステンディング・ザ・xConnectコレクション」モデルウォークスルーシリーズの第5部です。このウォークスルーを完了するには、まずパート1、2、3、4のウォークスルーをクリアする必要があります。
このウォークスルーでは、あなたはSitecore Cinema、訪問者から情報を集めるために収集モデルを拡張しなければなりません。情報は、訪問者が映画館と交流するたびにロイヤルティカードをスワイプすることに依存しており、訪問のインセンティブとして、ロイヤルティカードを10回使用すると無料のポップコーンが提供されます。
このウォークスルーでは、以下の方法を説明しています:
- SitecoreCinemaソリューションとクラスライブラリプロジェクトを作成しましょう
- CinemaInfoインタラクションの側面クラスを作成する
- CinemaVisitorInfo コンタクトの面クラスを作成します
- WatchMovieアウトカムアイテムを作成する
- WatchMovie結果クラスを作成する
- BuyConcessionsアウトカムアイテムを作成する
- BuyConcessions結果クラスを作成する
- UseSelfServiceイベントアイテムを作成する
- UseSelfServiceイベントクラスを作成する
- SitecoreCinemaModelコレクションモデルクラスを作成します
- Console.Deployコンソールアプリプロジェクトを作成しましょう
- コレクションモデル SitecoreCinemaModel シリアライズ
- Console.Journeyコンソールアプリプロジェクトを作成しましょう
- Sitecoreシネマ訪問をシミュレートする
!注Sitecore 9.1.0のSitecore.Xdb.Common.Web名前空間では:
Certificate**WebRequest**HandlerModifierOptionsCertificate**HttpClient**HandlerModifierOptionsになった。
Certificate**WebRequest**HandlerModifierCertificate**HttpClient**HandlerModifierになった。
SitecoreCinemaソリューションとクラスライブラリプロジェクトを作成する
SitecoreCinemaソリューションおよびクラスライブラリプロジェクトを作成するには:
-
管理者権限を用いてVisual Studio、フレームワーク用の新しいソリューションおよびクラスライブラリプロジェクトを作成.NET SitecoreCinema:

-
Solution Explorerで右クリックSitecoreCinema/References 「 参照を追加」をクリックします。
-
参照管理者のウィンドウで「Browse」をクリックして、
\bin\フォルダから以下の参照を追加してください: - Sitecore.XConnect.Collection.Model.dll
- Sitecore.XConnect.Core
- Sitecore.XConnect.dll
-
OKをクリックします。
CinemaInfoのインタラクションファセットクラスを作成します
CinemaInfoクラスは、交流中に訪れた映画館に関する情報を含むインタラクションの側面です。
CinemaInfoインタラクション面クラスを作成するには:
-
管理者権限でVisual Studio、Solution ExplorerでSitecoreCinemaプロジェクトを右クリックして「 追加、新しい項目」をクリックします。
-
「新しいアイテムを追加」ウィンドウで:
- 左側のペインで Installed/Visual C# Itemsをクリックします。
- 中央のパネルで「 クラス」をクリックします。
- 下部の 「Name 」欄で「 CinemaInfo.cs 」を入力し、「 追加」をクリックします。
-
CinemaInfo.csファイルでは、内容を以下のコードに置き換えます:
using Sitecore.XConnect;
namespace SitecoreCinema.Model.Collection { FacetKey(DefaultFacetKey) public class CinemaInfo : Facet { public const string DefaultFacetKey = "CinemaInfo"; public int CinemaId { get; set; } } }
-
CinemaInfo.csファイルを保存してください。
CinemaVisitorInfoの連絡先ファセットクラスを作成する
CinemaVisitorInfoクラスは、ロイヤルティの情報を含む連絡先の側面であり、ロイヤルティIDなどです。
CinemaVisitorInfo接触面クラスを作成するには:
-
管理者権限でVisual Studio、Solution ExplorerでSitecoreCinemaプロジェクトを右クリックして「 追加、新しい項目」をクリックします。
-
「新しいアイテムを追加」ウィンドウで:
- 左側のペインで Installed/Visual C# Itemsをクリックします。
- 中央のパネルで「 クラス」をクリックします。
- 下部の 「Name 」欄で「 CinemaVisitorInfo.cs 」を入力し、「 追加」をクリックします。
-
CinemaVisitorInfo.csファイルでは、内容を以下のコードに置き換えます:
using Sitecore.XConnect;
namespace SitecoreCinema.Model.Collection { FacetKey(DefaultFacetKey) public class CinemaVisitorInfo : Facet { public const string DefaultFacetKey = "CinemaVisitorInfo"; public string FavoriteMovie { get; set; } } }
-
CinemaVisitorInfo.csファイルを保存してください。
WatchMovieの結果項目を作成する
WatchMovie結果項目を作成するには:
- マーケティングコントロールパネルで Marketing Control Panel/Outcomesをクリックします。
- オプションペインで**「結果定義**」をクリックします。
- メッセージウィンドウでWatchMovieを入力し、OKをクリックします。
- クイックインフォのセクションで、アイテムIDをメモしてください。
WatchMovieの結果クラスを作成する
WatchMovie結果クラスは、来訪者が映画チケットを購入する際に販売時点管理システムからWatchMovie結果項目をトリガーします。
WatchMovie結果クラスを作成するには:
-
管理者権限でVisual Studio、Solution ExplorerでSitecoreCinemaプロジェクトを右クリックして「 追加、新しい項目」をクリックします。
-
「新しいアイテムを追加」ウィンドウで:
- 左側のペインで Installed/Visual C# Itemsをクリックします。
- 中央のパネルで「 クラス」をクリックします。
- 下部の 「Name 」欄で「 WatchMovie.cs 」を入力し、「 追加」をクリックします。
-
WatchMovie.csファイルでは、内容を以下のコードに置き換えます:
using Sitecore.XConnect; using System;
namespace SitecoreCinema.Model.Collection { public class WatchMovie : Outcome { public static Guid EventDefinitionId { get; } = new Guid("
"); public WatchMovie( DateTime timestamp, string currencyCode, decimal monetaryValue ) : base(EventDefinitionId, timestamp, currencyCode, monetaryValue) { }
// Entertainment Identifier Registry number (see https://eidr.org/) public string EIDR { get; set; } } }
-
WatchMovie結果項目をID挿入します。
-
WatchMovie.csファイルを保存してください。
BuyConcessionsの成果項目を作成しました
BuyConcessions結果項目を作成するには:
- マーケティングコントロールパネルで Marketing Control Panel/Outcomesをクリックします。
- オプションペインで**「結果定義**」をクリックします。
- メッセージウィンドウでBuyConcessionsを入力し、OKをクリックします。
- クイックインフォのセクションで、アイテムIDをメモしてください。
BuyConcessionsの結果クラスを作成する
BuyConcessions結果クラスは、訪問者が売店を購入する際に販売時点管理システムからBuyConcessions結果項目をトリガーします。
BuyConcessions結果クラスを作成するには:
-
管理者権限でVisual Studio、Solution ExplorerでSitecoreCinemaプロジェクトを右クリックして「 追加、新しい項目」をクリックします。
-
「新しいアイテムを追加」ウィンドウで:
- 左側のペインで Installed/Visual C# Itemsをクリックします。
- 中央のパネルで「 クラス」をクリックします。
- 下部の 「Name 」欄で「 BuyConcessions.cs 」を入力し、「 追加」をクリックします。
-
BuyConcessions.csファイルでは、内容を以下のコードに置き換えます:
using Sitecore.XConnect; using System;
namespace SitecoreCinema.Model.Collection { public class BuyConcessions : Outcome { public static Guid EventDefinitionId { get; } = new Guid("
"); public BuyConcessions( DateTime timestamp, string currencyCode, decimal monetaryValue ) : base(EventDefinitionId, timestamp, currencyCode, monetaryValue) { }
public bool BoughtAlcoholicDrink { get; set; } } }
-
BuyConcessions結果項目をID挿入します。
-
BuyConcessions.csファイルを保存してください。
UseSelfServiceイベント項目を作成する
UseSelfServiceイベントアイテムを作成するには:
- マーケティングコントロールパネルで Marketing Control Panel/Eventsをクリックします。
- オプション画面でイベントをクリックします。
- メッセージウィンドウでUseSelfServiceを入力し、OKをクリックします。
- クイックインフォのセクションで、アイテムIDをメモしてください。
UseSelfServiceイベントクラスを作成する
UseSelfServiceイベントクラスは、来場者が映画チケットを購入すると、チケット販売機からUseSelfServiceイベントアイテムが発動します。
UseSelfServiceイベントクラスを作成するには:
-
管理者権限でVisual Studio、Solution ExplorerでSitecoreCinemaプロジェクトを右クリックして「 追加、新しい項目」をクリックします。
-
「新しいアイテムを追加」ウィンドウで:
- 左側のペインで Installed/Visual C# Itemsをクリックします。
- 中央のパネルで「 クラス」をクリックします。
- 下部の 「Name 」欄で「 UseSelfService.cs 」を入力し、「 追加」をクリックします。
-
UseSelfService.csファイルでは、内容を以下のコードに置き換えます:
using Sitecore.XConnect; using System;
namespace SitecoreCinema.Model.Collection { public class UseSelfService : Event { public static Guid EventDefinitionId { get; } = new Guid("
"); public UseSelfService(DateTime timestamp) : base(EventDefinitionId, timestamp) { } } } -
UseSelfServiceイベントアイテムをID挿入します。
-
UseSelfService.csファイルを保存してください。
SitecoreCinemaModelコレクションモデルクラスを作成します
SitecoreCinemaModelコレクションモデルクラスを作成するには:
-
管理者権限を持つVisual Studioで、Solution Explorerで右クリックしてSitecoreCinemaを右クリックし、「 追加、新しい項目」をクリックします。
-
「新しいアイテムを追加」ウィンドウで:
- 左側のペインで Installed/Visual C# Itemsをクリックします。
- 中央のパネルで「 クラス」をクリックします。
- 下部の 「Name 」欄で「 SitecoreCinemaModel.cs 」を入力し、「 追加」をクリックします。
-
SitecoreCinemaModel.csファイルでは、内容を以下のコードに置き換えます:
using Sitecore.XConnect; using Sitecore.XConnect.Schema;
namespace SitecoreCinema.Model.Collection { public class SitecoreCinemaModel { public static XdbModel Model { get; } = BuildModel();
private static XdbModel BuildModel() { XdbModelBuilder modelBuilder = new XdbModelBuilder("SitecoreCinemaModel", new XdbModelVersion(1, 0));
modelBuilder.DefineFacet<Contact, CinemaVisitorInfo>(FacetKeys.CinemaVisitorInfo); modelBuilder.DefineFacet<Interaction, CinemaInfo>(FacetKeys.CinemaInfo); modelBuilder.DefineEventType
(false); modelBuilder.DefineEventType (false); modelBuilder.DefineEventType (false); modelBuilder.ReferenceModel(Sitecore.XConnect.Collection.Model.CollectionModel.Model); return modelBuilder.BuildModel(); } }
public class FacetKeys { public const string CinemaInfo = "CinemaInfo"; public const string CinemaVisitorInfo = "CinemaVisitorInfo"; } }
-
SitecoreCinemaModel.csファイルを保存してください。
Console.Deploy console appプロジェクトを作成してください
Console.DeployコンソールアプリはSitecoreCinemaModelをJSON形式にシリアライズします。
Console.Deployコンソールアプリプロジェクトを作成するには:
-
管理者権限でVisual Studio、SitecoreCinemaソリューションを右クリックし、「 追加、新しいプロジェクト 」をクリックして、フレームワーク用の新しいコンソールアプリプロジェクト.NET Console.Deployを作成します。

-
Solution Explorerで右クリックConsole.Deploy/References 「 参照を追加」をクリックします。
-
リファレンスマネージャーウィンドウのプロジェクトタブでSitecoreCinemaを選択します。
-
参照管理者のウィンドウで「Browse」をクリックして、
\bin\フォルダから以下の参照を追加してください: - Sitecore.XConnect.Core.dll
- Sitecore.XConnect.dll
-
OKをクリックします。
-
Solution ExplorerでConsole.Deploy/Program.csファイルをダブルクリックします。
-
Program.csファイルでは、内容を以下のコードに置き換えます:
using System.IO;
namespace SitecoreCinema.Console.Deploy { public class Program { public static void Main(string args) { System.Console.WriteLine("Generating your model ..."); var model = SitecoreCinema.Model.Collection.SitecoreCinemaModel.Model; string filePath = "C:\\" + model.FullName + ".json"; var serializedModel = Sitecore.XConnect.Serialization.XdbModelWriter.Serialize(model); File.WriteAllText(filePath, serializedModel); System.Console.WriteLine("Your model is here: " + filePath); System.Console.WriteLine("Press any key to continue!"); System.Console.ReadKey(); } } }
-
Program.csファイルを保存してください。
SitecoreCinemaModelコレクションモデルのシリアライズ
SitecoreCinemaModel収集モデルをシリアライズするには:
-
管理者権限でVisual Studio、Solution ExplorerでConsole.Deployプロジェクトを右クリックし、「 スタートアッププロジェクトとして設定」をクリックします。
-
Console.Deployアプリを起動してモデルのシリアライズを待つために**「スタート**」をクリックしてください:

C:\SitecoreCinemaModel, 1.0.jsonファイル内のシリアル化されたモデルには、以下の内容が含まれていなければなりません。
{ "Name": "SitecoreCinemaModel", "Version": "1.0", "References": { "Name": "XConnect", "Version": "1.0" }, { "Name": "Sitecore.XConnect.Collection.Model", "Version": "9.3" } , "Types": { "SitecoreCinema.Model.Collection.CinemaVisitorInfo": { "Type": "Facet", "BaseType": "Sitecore.XConnect.Facet", "ClrType": "SitecoreCinema.Model.Collection.CinemaVisitorInfo, SitecoreCinema, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Properties": { "FavoriteMovie": { "Type": "String" } } }, "SitecoreCinema.Model.Collection.CinemaInfo": { "Type": "Facet", "BaseType": "Sitecore.XConnect.Facet", "ClrType": "SitecoreCinema.Model.Collection.CinemaInfo, SitecoreCinema, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Properties": { "CinemaId": { "Type": "Int32" } } }, "SitecoreCinema.Model.Collection.WatchMovie": { "Type": "Event", "BaseType": "Sitecore.XConnect.Outcome", "ClrType": "SitecoreCinema.Model.Collection.WatchMovie, SitecoreCinema, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Properties": { "EIDR": { "Type": "String" } } }, "SitecoreCinema.Model.Collection.BuyConcessions": { "Type": "Event", "BaseType": "Sitecore.XConnect.Outcome", "ClrType": "SitecoreCinema.Model.Collection.BuyConcessions, SitecoreCinema, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Properties": { "BoughtAlcoholicDrink": { "Type": "Boolean" } } }, "SitecoreCinema.Model.Collection.UseSelfService": { "Type": "Event", "BaseType": "Sitecore.XConnect.Event", "ClrType": "SitecoreCinema.Model.Collection.UseSelfService, SitecoreCinema, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Properties": {} } }, "Facets": { "Target": "Contact", "Name": "CinemaVisitorInfo", "Type": "SitecoreCinema.Model.Collection.CinemaVisitorInfo" }, { "Target": "Interaction", "Name": "CinemaInfo", "Type": "SitecoreCinema.Model.Collection.CinemaInfo" }
}
-
C:\SitecoreCinemaModel, 1.0.jsonファイルを
\App_Data\Models\フォルダにコピーしてください。
Console.Journeyコンソールアプリプロジェクトを作成
Console.Journeyコンソールアプリは、Sitecore映画館を巡る訪問者の旅をシミュレートします:
- 来場者は券売機で映画のチケットを購入します。
- 訪問者は売店でキャンディを買います。
- 来場者は映画館に入るために映画券をスキャンします。
Console.Journeyコンソールアプリプロジェクトを作成するには:
-
管理者権限でVisual Studio、SitecoreCinemaソリューションを右クリックし、「 追加、新しいプロジェクト 」をクリックして、フレームワーク用の新しいコンソールアプリプロジェクト.NET Console.Journeyを作成します。

-
Solution Explorerで右クリックConsole.Journey/References 「 参照を追加」をクリックします。
-
リファレンスマネージャーウィンドウのプロジェクトタブでSitecoreCinemaを選択します。
-
参照管理者のウィンドウで「Browse」をクリックして、
\bin\フォルダから以下の参照を追加してください: - Sitecore.XConnect.Client.dll
- Sitecore.XConnect.Collection.Model.dll
- Sitecore.XConnect.Core.dll
- Sitecore.XConnect.dll
- Sitecore.Xdb.Common.Web.dll
-
OKをクリックします。
-
Solution Explorerで 「References 」を右クリックし、「 Manage NuGet Packages」をクリックします。
-
NuGetウィンドウで「ブラウズ」をクリックし、以下の参照を追加してください:
- Microsoft.Extensions.Configuration.Abstractions
- System.Interactive.Async.Providers
-
Solution ExplorerでConsole.Journey/Program.csファイルをダブルクリックします。
-
Program.csファイルでは、内容を以下のコードに置き換えます:
using Sitecore.XConnect; using Sitecore.XConnect.Client; using Sitecore.XConnect.Client.WebApi; using Sitecore.XConnect.Collection.Model; using Sitecore.XConnect.Schema; using Sitecore.Xdb.Common.Web; using SitecoreCinema.Model.Collection; using System; using System.Collections.Generic; using System.Threading.Tasks;
namespace SitecoreCinema.Console.Journey { public class Program { // From
\App_Config\AppSettings.config const string CERTIFICATE_OPTIONS = "StoreName=My;StoreLocation=LocalMachine;FindType=FindByThumbprint;FindValue=???"; // From your installation const string XCONNECT_URL = "https://???XConnect.local";
const string CONTACT_ID = "L94564543543543534"; const int CINEMA_ID = 22; const string CONTACT_ID_SOURCE = "SitecoreCinema";
public static string Identifier { get; set; }
private static void Main(string args) {
// Welcome to // _____ _ __ _______ // / ___/(_) /____ _________ ________ / ____(_)___ ___ ____ ___ ____ _ // \__ \/ / __/ _ \/ ___/ __ \/ ___/ _ \/ / / / __ \/ _ \/ __ `__ \/ __ `/ // ___/ / / /_/ __/ /__/ /_/ / / / __/ /___/ / / / / __/ / / / / / /_/ / // ____/_/\__/\___/\___/\____/_/ \___/\____/_/_/ /_/\___/_/ /_/ /_/\__,_/
// ____ _ _ // | _ \ ___ __ _(_)___| |_ ___ _ __ // | |_) / _ \/ _` | / __| __/ _ \ '__| // | _ < __/ (_| | \__ \ || __/ | // |_| \_\___|\__, |_|___/\__\___|_| // |___/
// You decide to register for the loyalty card scheme on the Sitecore Cinema website. // Apparently you get free popcorn for every 10 times you swipe your loyalty card.
Task.Run(async () => { await Register(); }).Wait();
// ___ _ _ _ _ _ _ // |_ _|_ __ | |_ ___ _ __ __ _ ___| |_(_) ___ _ __ _| || |_/ | // | || '_ \| __/ _ \ '__/ _ |/ __| __| |/ _ \| '_ \|_ .. _| | // | || | | | || __/ | | (_| | (__| |_| | (_) | | | |_ _| | // |___|_| |_|\__\___|_| \__,_|\___|\__|_|\___/|_| |_| |_||_| |_|
// You visit a Sitecore Cinema and buy a movie ticket in the self service machine. // You swipe your loyalty card, and the machine sends the interaction to xConnect. // Because you are a loyalty card member, you do not pay at this point.
Task.Run(async () => { await SelfServiceMachine(); }).Wait();
// ___ _ _ _ _ _ ____ // |_ _|_ __ | |_ ___ _ __ __ _ ___| |_(_) ___ _ __ _| || ||___ \ // | || '_ \| __/ _ \ '__/ _ |/ __| __| |/ _ \| '_ \|_ .. _|__) | // | || | | | || __/ | | (_| | (__| |_| | (_) | | | |_ _/ __/ // |___|_| |_|\__\___|_| \__,_|\___|\__|_|\___/|_| |_| |_||_||_____|
// You buy some candy. // You swipe your loyalty card, and the machine sends the interaction to xConnect.
Task.Run(async () => { await BuyCandy(); }).Wait();
// ___ _ _ _ _ _ _____ // |_ _|_ __ | |_ ___ _ __ __ _ ___| |_(_) ___ _ __ _| || ||___ / // | || '_ \| __/ _ \ '__/ _ |/ __| __| |/ _ \| '_ \|_ .. _||_ \ // | || | | | || __/ | | (_| | (__| |_| | (_) | | | |_ _|__) | // |___|_| |_|\__\___|_| \__,_|\___|\__|_|\___/|_| |_| |_||_||____/
// You scan your ticket and head into the movie theater. // Your loyalty card details are embedded in the barcode of your ticket. // At this point, the system takes payment.
Task.Run(async () => { await WatchAMovie(); }).Wait();
System.Console.ForegroundColor = ConsoleColor.DarkGreen; System.Console.WriteLine(""); System.Console.WriteLine("END OF PROGRAM."); System.Console.ReadKey(); }
private static async Task Register() { CertificateHttpClientHandlerModifierOptions options = CertificateHttpClientHandlerModifierOptions.Parse(CERTIFICATE_OPTIONS);
var certificateModifier = new CertificateHttpClientHandlerModifier(options);
List
clientModifiers = new List (); var timeoutClientModifier = new TimeoutHttpClientModifier(new TimeSpan(0, 0, 20)); clientModifiers.Add(timeoutClientModifier); var collectionClient = new CollectionWebApiClient( new Uri(XCONNECT_URL + "/odata"), clientModifiers, new { certificateModifier } );
var searchClient = new SearchWebApiClient( new Uri(XCONNECT_URL + "/odata"), clientModifiers, new { certificateModifier } );
var configurationClient = new ConfigurationWebApiClient( new Uri(XCONNECT_URL + "/configuration"), clientModifiers, new { certificateModifier } );
var cfg = new XConnectClientConfiguration( new XdbRuntimeModel(CollectionModel.Model, SitecoreCinemaModel.Model), collectionClient, searchClient, configurationClient );
try { await cfg.InitializeAsync();
// Print "Register" if configuration is valid var arr = new { @" ____ _ _ ", @" | _ \ ___ __ _(_)___| |_ ___ _ __ ", @" | |_) / _ \/ _` | / __| __/ _ \ '__| ", @" | _ < __/ (_| | \__ \ || __/ | ", @" |_| \_\___|\__, |_|___/\__\___|_| ", @" |___/ ", }; System.Console.WindowWidth = 160; foreach (string line in arr) System.Console.WriteLine(line); System.Console.WriteLine(); } catch (XdbModelConflictException ce) { System.Console.WriteLine("ERROR:" + ce.Message); return; }
// Initialize a client using the validated configuration using (var client = new XConnectClient(cfg)) { try { ContactIdentifier identifier = new ContactIdentifier( CONTACT_ID_SOURCE, CONTACT_ID + Guid.NewGuid(), ContactIdentifierType.Known );
System.Console.WriteLine("We will generate an loyalty member ID for you and print it on a loyalty card."); System.Console.WriteLine( "Alright, your loyalty member ID is "
- identifier.Identifier
- ". Congratulations!" );
Identifier = identifier.Identifier; Contact contact = new Contact(new ContactIdentifier { identifier });
System.Console.WriteLine("What is your first name?"); var firstname = System.Console.ReadLine();
System.Console.WriteLine("What is your last name?"); var lastname = System.Console.ReadLine();
PersonalInformation personalInfo = new PersonalInformation() { FirstName = firstname, LastName = lastname };
System.Console.WriteLine("What is your favourite movie?"); var favouriteMovie = System.Console.ReadLine();
CinemaVisitorInfo visitorInfo = new CinemaVisitorInfo() { FavoriteMovie = favouriteMovie };
client.AddContact(contact); client.SetFacet
(contact, CinemaVisitorInfo.DefaultFacetKey, visitorInfo); client.SetFacet (contact, PersonalInformation.DefaultFacetKey, personalInfo); var offlineChannel = Guid.NewGuid(); var registrationGoalId = Guid.NewGuid();
Interaction interaction = new Interaction( contact, InteractionInitiator.Brand, offlineChannel, String.Empty );
interaction.Events.Add(new Goal(registrationGoalId, DateTime.UtcNow)); client.AddInteraction(interaction); await client.SubmitAsync(); System.Console.WriteLine("Great! See you at the movies. Press any key to go to a Sitecore Cinema."); System.Console.ReadKey(); } catch (XdbExecutionException ex) { // Deal with exception } } }
private static async Task SelfServiceMachine() { CertificateHttpClientHandlerModifierOptions options = CertificateHttpClientHandlerModifierOptions.Parse(CERTIFICATE_OPTIONS);
var certificateModifier = new CertificateHttpClientHandlerModifier(options); List
clientModifiers = new List (); var timeoutClientModifier = new TimeoutHttpClientModifier(new TimeSpan(0, 0, 20)); clientModifiers.Add(timeoutClientModifier); var collectionClient = new CollectionWebApiClient( new Uri(XCONNECT_URL + "/odata"), clientModifiers, new { certificateModifier } );
var searchClient = new SearchWebApiClient( new Uri(XCONNECT_URL + "/odata"), clientModifiers, new { certificateModifier } );
var configurationClient = new ConfigurationWebApiClient( new Uri(XCONNECT_URL + "/configuration"), clientModifiers, new { certificateModifier } );
var cfg = new XConnectClientConfiguration( new XdbRuntimeModel(CollectionModel.Model, SitecoreCinemaModel.Model), collectionClient, searchClient, configurationClient );
try { await cfg.InitializeAsync();
// Print "Ticket" if configuration is valid var arr = new { @" _____ _ _ _ ", @"|_ _(_) ___| | _____| |_ ", @" | | | |/ __| |/ / _ \ __|", @" | | | | (__| < __/ |_ ", @" |_| |_|\___|_|\_\___|\__|", }; System.Console.WindowWidth = 160; foreach (string line in arr) System.Console.WriteLine(line); System.Console.WriteLine(); } catch (XdbModelConflictException ce) { System.Console.WriteLine("ERROR:" + ce.Message); return; }
// Initialize a client using the validated configuration using (var client = new XConnectClient(cfg)) { try { System.Console.ForegroundColor = ConsoleColor.Cyan; System.Console.WriteLine("You swipe your loyalty card."); System.Console.ForegroundColor = ConsoleColor.White;
var identifier = new IdentifiedContactReference(CONTACT_ID_SOURCE, Identifier);
var contact = await client.GetAsync
( identifier, new ContactExpandOptions( PersonalInformation.DefaultFacetKey, CinemaVisitorInfo.DefaultFacetKey) ); if (contact != null) { var personalInfo = contact.GetFacet
(); var cinemaInfo = contact.GetFacet (); System.Console.WriteLine( "Hello "
- personalInfo.FirstName
- " "
- personalInfo.LastName
- ". I see that your favorite film is "
- cinemaInfo.FavoriteMovie
- ". We might play that soon. Check our website or sign up for our newsletter." );
var interaction = new Interaction( contact, InteractionInitiator.Contact, Guid.NewGuid(), // The GUID should match a Sitecore channel item id "" );
client.SetFacet
( interaction, CinemaInfo.DefaultFacetKey, new CinemaInfo() { CinemaId = CINEMA_ID } ); interaction.Events.Add(new UseSelfService(DateTime.UtcNow)); client.AddInteraction(interaction); await client.SubmitAsync(); System.Console.WriteLine("Here is your ticket. We will charge you when you use it, in case you have some sort of emergency between here and the theater ;-)"); System.Console.WriteLine("It is just one of those courtesies we offer loyalty card members! Press any key to buy some candy."); System.Console.ReadKey(); } } catch (XdbExecutionException ex) { // Deal with exception } }
} private static async Task BuyCandy() { CertificateHttpClientHandlerModifierOptions options = CertificateHttpClientHandlerModifierOptions.Parse(CERTIFICATE_OPTIONS);
var certificateModifier = new CertificateHttpClientHandlerModifier(options); List
clientModifiers = new List (); var timeoutClientModifier = new TimeoutHttpClientModifier(new TimeSpan(0, 0, 20)); clientModifiers.Add(timeoutClientModifier); var collectionClient = new CollectionWebApiClient( new Uri(XCONNECT_URL + "/odata"), clientModifiers, new { certificateModifier } );
var searchClient = new SearchWebApiClient( new Uri(XCONNECT_URL + "/odata"), clientModifiers, new { certificateModifier } );
var configurationClient = new ConfigurationWebApiClient( new Uri(XCONNECT_URL + "/configuration"), clientModifiers, new { certificateModifier } );
var cfg = new XConnectClientConfiguration( new XdbRuntimeModel(CollectionModel.Model, SitecoreCinemaModel.Model), collectionClient, searchClient, configurationClient );
try { await cfg.InitializeAsync();
// Print "Candy" if configuration is valid var arr = new { @" ____ _ ", @" / ___|__ _ _ __ __| |_ _ ", @"| | / _` | '_ \ / _` | | | |", @"| |__| (_| | | | | (_| | |_| |", @" \____\__,_|_| |_|\__,_|\__, |", @" |___/ ", }; System.Console.WindowWidth = 160; foreach (string line in arr) System.Console.WriteLine(line); System.Console.WriteLine(); } catch (XdbModelConflictException ce) { System.Console.WriteLine("ERROR:" + ce.Message); return; }
// Initialize a client using the validated configuration using (var client = new XConnectClient(cfg)) { try { System.Console.ForegroundColor = ConsoleColor.Cyan; System.Console.WriteLine("You swipe your loyalty card."); System.Console.ForegroundColor = ConsoleColor.White;
var identifier = new IdentifiedContactReference(CONTACT_ID_SOURCE, Identifier);
var contact = await client.GetAsync
( identifier, new ContactExpandOptions( PersonalInformation.DefaultFacetKey, CinemaVisitorInfo.DefaultFacetKey ) ); if (contact != null) { var personalInfo = contact.GetFacet
(); var cinemaInfo = contact.GetFacet (); System.Console.WriteLine("Hello again " + personalInfo.FirstName + "."); System.Console.WriteLine("Candy? You got it.");
var interaction = new Interaction( contact, InteractionInitiator.Contact, Guid.NewGuid(), // The GUID should match a Sitecore channel item id "" );
client.SetFacet
( interaction, CinemaInfo.DefaultFacetKey, new CinemaInfo() { CinemaId = CINEMA_ID } ); interaction.Events.Add(new BuyConcessions(DateTime.UtcNow, "DKK", 150m)); client.AddInteraction(interaction); await client.SubmitAsync(); System.Console.WriteLine("Enjoy the movie! Press any key to go to the movie theater."); System.Console.ReadKey(); } } catch (XdbExecutionException ex) { // Deal with exception } } }
private static async Task WatchAMovie() { CertificateHttpClientHandlerModifierOptions options = CertificateHttpClientHandlerModifierOptions.Parse(CERTIFICATE_OPTIONS);
var certificateModifier = new CertificateHttpClientHandlerModifier(options); List
clientModifiers = new List (); var timeoutClientModifier = new TimeoutHttpClientModifier(new TimeSpan(0, 0, 20)); clientModifiers.Add(timeoutClientModifier); var collectionClient = new CollectionWebApiClient( new Uri(XCONNECT_URL + "/odata"), clientModifiers, new { certificateModifier } );
var searchClient = new SearchWebApiClient( new Uri(XCONNECT_URL + "/odata"), clientModifiers, new { certificateModifier } );
var configurationClient = new ConfigurationWebApiClient( new Uri(XCONNECT_URL + "/configuration"), clientModifiers, new { certificateModifier } );
var cfg = new XConnectClientConfiguration( new XdbRuntimeModel(CollectionModel.Model, SitecoreCinemaModel.Model), collectionClient, searchClient, configurationClient );
try { await cfg.InitializeAsync();
// Print "Movie" if configuration is valid var arr = new { @" __ __ _ ", @"| \/ | _____ _(_) ___ ", @"| |\/| |/ _ \ \ / / |/ _ \", @"| | | | (_) \ V /| | __/", @"|_| |_|\___/ \_/ |_|\___|",
}; System.Console.WindowWidth = 160; foreach (string line in arr) System.Console.WriteLine(line); System.Console.WriteLine(); } catch (XdbModelConflictException ce) { System.Console.WriteLine("ERROR:" + ce.Message); return; }
// Initialize a client using the validated configuration using (var client = new XConnectClient(cfg)) { try { System.Console.ForegroundColor = ConsoleColor.Cyan; System.Console.WriteLine("You scan your ticket which has your loyalty member information embedded in its bar code."); System.Console.ForegroundColor = ConsoleColor.White;
var identifier = new IdentifiedContactReference(CONTACT_ID_SOURCE, Identifier);
var contact = await client.GetAsync
( identifier, new ContactExpandOptions( PersonalInformation.DefaultFacetKey, CinemaVisitorInfo.DefaultFacetKey ) ); if (contact != null) { var personalInfo = contact.GetFacet
(); var cinemaInfo = contact.GetFacet (); System.Console.WriteLine("Enjoy your movie, " + personalInfo.FirstName + "!"); System.Console.WriteLine("Since you are a loyalty member, we will take payment for your ticket now.");
var interaction = new Interaction( contact, InteractionInitiator.Contact, Guid.NewGuid(), // The GUID should match a Sitecore channel item id "" );
interaction.Events.Add( new WatchMovie(DateTime.UtcNow, "DKK", 100m) { EIDR = "10.5240/08B0-F8C2-5525-BF22-BA07-4" } );
client.SetFacet
( interaction, CinemaInfo.DefaultFacetKey, new CinemaInfo() { CinemaId = CINEMA_ID } ); client.AddInteraction(interaction); await client.SubmitAsync(); System.Console.WriteLine("Before you go! Do you want to see the data we have collected about you today? :)");
var contactAgain = await client.GetAsync
( identifier, new ContactExpandOptions( PersonalInformation.DefaultFacetKey, CinemaVisitorInfo.DefaultFacetKey ) { Interactions = new RelatedInteractionsExpandOptions( new string { CinemaInfo.DefaultFacetKey } ) { StartDateTime = DateTime.Today } } ); if (contactAgain != null) { var details = contactAgain.GetFacet
(); var movie = contactAgain.GetFacet (); System.Console.WriteLine(String.Format( "Your name is {0} {1}, and your favorite movie is {2}.", details.FirstName, details.LastName, movie.FavoriteMovie ));
System.Console.WriteLine( "Today you have had "
- contactAgain.Interactions.Count
- " interactions with us." );
var i = 0;
foreach (var interactionsToday in contactAgain.Interactions) { i++; var cinemaId = interactionsToday.GetFacet
(CinemaInfo.DefaultFacetKey); System.Console.WriteLine(""); System.Console.WriteLine( "Interaction #"
- i
- (cinemaId != null ? " at Cinema #" + cinemaId.CinemaId : String.Empty) );
System.Console.Write("Events: ");
foreach (var evv in interactionsToday.Events) { System.Console.Write(evv.GetType().ToString() + ""); };
System.Console.WriteLine(""); } }
System.Console.ReadKey(); } } catch (XdbExecutionException ex) { // Deal with exception } } } } }
-
CERTIFICATE_THUMBPRINTとXCONNECT_URL定数を編集してください。
-
Program.csファイルを保存してください。
Sitecoreシネマ訪問をシミュレートする
Sitecoreシネマをシミュレートするには、以下の訪問をしてください:
-
管理者権限でVisual Studio、Solution ExplorerでConsole.Journeyプロジェクトを右クリックし、「 スタートアッププロジェクトとして設定」をクリックします。
-
「スタート」をクリックしてConsole.Journeyアプリを実行し、次の動作を待つことができます:
- 名前を登録してください。
- セカンドネームを登録してください。
- お気に入りの映画を登録しましょう。
- 映画のチケットを買うシミュレーションをしましょう。
- キャンディを買うシミュレーションをします。
- 映画館に入ることをシミュレートします。
- 収集した連絡先情報とやり取りを提示してください。
