1. 加工

セッション終了バッチ処理用のカスタム・プロセッサーの作成

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

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

バージョン9.3以降、Sitecoreは期限切れのセッションを一度に1つずつではなく、バッチで処理します。commitSessionパイプラインを拡張したり、追加のプロセッサでsubmitSessionContextパイプラインを実行したりすると、セッションの有効期限が切れた瞬間にセッションがxConnectに送信される必要がなくなります。そのため、カスタム プロセッサを変更して、xConnectクライアントAPIのインターフェイスであるa aのSitecore.XConnect.IXdbContextを作成するファクトリへのアクセスを提供する新しいサービスSitecore.Analytics.XConnect.DataAccess.IXdbRuntimeContextを使用することをお勧めします。

メモ

セッションの有効期限のバッチ設定を設定する方法については、「 セッション終了のバッチ処理の構成」を参照してください。

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

  1. commitSessionsubmitSessionContextパイプラインを拡張します。

    <commitSession>  
        <processor type="AddCustomContactDataOnCommitSession, CustomAssembly" patch:before="processor[@type='Sitecore.Analytics.Pipelines.CommitSession.SubmitSession, Sitecore.Analytics']" resolve="true" />
    </commitSession>
  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("<IdentifierSource>", "<identifier>");
    
            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 = "<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イベントを使用して、セッションバッチの成功した保存と失敗した保存に対応することもできます。

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