1. 加工

セッションエンドバッチ用のカスタムプロセッサを作成します

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

バージョン9.3以降、Sitecoreは一度に1つではなくバッチ単位で処理するようになりました。commitSessionやパイプラインsubmitSessionContextを追加で拡張すると、セッションが期限切れした瞬間に必ずしもxConnectに提出されるわけではありません。したがって、カスタムプロセッサを新しいサービスSitecore.Analytics.XConnect.DataAccess.IXdbRuntimeContextに変更することをお勧めします。これはxConnect Client APIのインターフェースであるSitecore.XConnect.IXdbContextへのアクセスを提供します。

!注セッション期限バッチ設定の設定方法については、「 セッション終了バッチの設定」を参照してください。

カスタムプロセッサを作成し、セッションデータをバッチ処理するには:

  1. commitSessionsubmitSessionContextパイプラインを拡張する:

      <processor type="AddCustomContactDataOnCommitSession, CustomAssembly" patch

    ="processor@type='Sitecore.Analytics.Pipelines.CommitSession.SubmitSession, Sitecore.Analytics'" resolve="true" />

  2. セッションデータを扱うコードを追加してください。以下は、IXdbRuntimeContextを使ってセッション内の連絡先の名前を変更する方法の例です:

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

    public class AddCustomContactDataOnCommitSession : Sitecore.Analytics.Pipelines.CommitSession.CommitSessionProcessor { private readonly Sitecore.Analytics.XConnect.DataAccess.IXdbRuntimeContext _context;

    // Injects IXdbRuntimeContext public AddCustomContactDataOnCommitSession(Sitecore.Analytics.XConnect.DataAccess.IXdbRuntimeContext context) { _context = context; }

    public override void Process(Sitecore.Analytics.Pipelines.CommitSession.CommitSessionPipelineArgs args) { // This provides access to the instance of the IXdbContext that is used for batching var xdbContext = _context.Factory.Create();

    // Check whether contact exists var identifiedContactReference = new Sitecore.XConnect.IdentifiedContactReference("", "");

    var xConnectContact = xdbContext.Get(identifiedContactReference, new Sitecore.XConnect.ExpandOptions { FacetKeys = { Sitecore.XConnect.Collection.Model.PersonalInformation.DefaultFacetKey } });

    if (xConnectContact == null) { return; }

    var personalInfo = xConnectContact.GetFacet<Sitecore.XConnect.Collection.Model.PersonalInformation>() ?? new Sitecore.XConnect.Collection.Model.PersonalInformation();

    personalInfo.FirstName = "";

    // Check that there facet is not modified twice if (xdbContext.DirectOperations.OfType<Sitecore.XConnect.Operations.SetFacetOperation<Sitecore.XConnect.Collection.Model.PersonalInformation>>().All(o => o.Target.Entity.Id != xConnectContact.Id)) { xdbContext.SetPersonal(xConnectContact, personalInfo); }

    // Do not call xdbContext.Submit() as it is called by batching logic afterward } }

!注セッションバッチの成功したセーブや失敗したセーブに対してIXdbContextイベントを活用することもできます。

この記事を改善するための提案がある場合は、 お知らせください!