1. 検索フィールド ハンドラー

チュートリアル: カスタムSitecore Commerceテンプレート プロパティのフィールド ハンドラーの作成

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

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

新しいカタログ エンティティ プロパティをCommerceテンプレートに追加し、それらの新しいプロパティに基づいて検索機能を提供する場合は、次のことを行う必要があります。

  • カスタム コマース テンプレート フィールド ハンドラーを作成します。

  • 新しいCatalogエンティティ プロパティをCommerce Engine検索ポリシー セットに追加します。

  • 新しいフィールドをCE Connect検索プロバイダー構成に追加します。

カスタム外部設定フィールド ハンドラー クラスを作成する

Sitecore Commerceテンプレートを新しいカタログ プロパティで拡張する場合は、カスタム カタログ エンティティ フィールドをカタログ外部設定コンポーネントに追加するカスタム インデックス フィールド ハンドラー クラスを作成して、Commerce Engineがそれらを見つける場所を認識できるようにします。

External Settingsとして定義された新しいCatalogプロパティのカスタムハンドラを作成するには:

  1. Sitecore.Commerce.Plugin.Search.AbstractIndexFieldHandlerクラスを継承するクラスを作成します。

    public class ExternalSettingsFieldHandler : AbstractIndexFieldHandler
  2. ExternalSettingsPropertyNameの名前を含む公開プロパティを追加します。

    public class ExternalSettingsFieldHandler : AbstractIndexFieldHandler
     {
      public string ExternalSettingsPropertyName { get; set; } = string.Empty;
  3. ComposeValueメソッドのオーバーライドを追加し、有効なフィールドハンドラ情報を確認します。

    public override object ComposeValue(object source, ConcurrentDictionary<string, object> context)
    {
     // check for valid field handler information
     if (context == null || source == null || !(source is CatalogItemBase entity) || string.IsNullOrEmpty(ExternalSettingsPropertyName))
      {
       return null;
      }
  4. ComposeValueの本文で、外部設定コンポーネントを確認し、設定をインデックスを作成するプロパティの決定論的IDと一致させます。

    • 一致するものがある場合は、指定した言語で最初にインデックスを作成するプロパティ名を探します。

    • 指定した言語に一致するものが存在しない場合は、共有設定 を確認します。

    • 共有設定 で一致が見つからない場合は、一致がないため、インデックスを作成するものはありません。

      // check for required external settings information
      if (!entity.HasComponent<ExternalSettingsComponent>() ||
        !context.TryGetValue("LanguageCode", out object languageCode) ||
        !context.TryGetValue("DeterministicId", out var tempDeterministicId) ||
        !(tempDeterministicId is Guid deterministicId))
        {
         return null;
        }
        string lang = languageCode.ToString().ToLowerInvariant();
        var externalSettingsComponent = entity.GetComponent<ExternalSettingsComponent>();
        var settingsCollection = JsonConvert.DeserializeObject<Dictionary<Guid, Dictionary<string, Dictionary<string, string>>>>(externalSettingsComponent.Settings);
        if (!settingsCollection.ContainsKey(deterministicId))
        {
         // this id in not in the external settings, return null
         return null;
        }
        var externalSettings = settingsCollection[deterministicId];
        if (externalSettings == null)
        {
         // bad external settings return null
         return null;
        }
         // look for language first
         if (externalSettings.ContainsKey(lang))
         {
          // we found a language, try to find the property
          var languageSettings = externalSettings[lang];
          if (languageSettings.ContainsKey(ExternalSettingsPropertyName))
           {
            // found it, return the value
            return languageSettings[ExternalSettingsPropertyName];
           }
         }
        // no language property found, check shared settings
        var sharedSettings = externalSettings["shared"];
        if (sharedSettings.ContainsKey(ExternalSettingsPropertyName))
        {
         // found in shared settings, return the value
         return sharedSettings[ExternalSettingsPropertyName];
        }
        // Not found, just return null
        return null;
        }
     }

ユーザー設定フィールド ハンドラーと新しいプロパティを検索ポリシー セット ファイルのインデックスに追加します

カスタム・フィールド・ハンドラーと新しいカスタム・フィールドを検索索引に登録するには、Commerce EngineのSolr検索ポリシー・セットにそれらを追加する必要があります。

カスタム・フィールド・ハンドラーと新しいプロパティーを検索ポリシー・セット・ファイルに追加するには、次のようにします。

  1. C:\inetpub\wwwroot\<CommerceEngine>\wwwroot\data\Environments\PlugIn.Search.Solr.PolicySet-1.0.0.jsonファイルを開きます。

  2. インデックス構成を含むセクションを見つけます。たとえば、次の例は、新しいハンドラー クラス ("$type": "Myplugin.Search.Solr.ExternalSettingsFieldHandler, MyPlugin.Search.Solr") とインデックスを作成するカスタム カタログ エンティティ プロパティ ("ExternalSettingsPropertyName": "TestingText") を定義するSitecoreマスター インデックス設定を示しています。

    {
      "$type": "Sitecore.Commerce.Plugin.Search.ItemIndexablePolicy, Sitecore.Commerce.Plugin.Search",
      "IndexName": "sitecore_master_index",
      "FieldTypeMappers": ...
      "Fields": [ ...
        {
        "$type": "MyPlugin.Search.Solr.SolrIndexFieldConfiguration, MyPlugin.Search.Solr",
        "Name": "ExampleExternalSettingProperty",
        "Type": "System.String",
        "Handler": {
           "$type": "Myplugin.Search.Solr.ExternalSettingsFieldHandler, MyPlugin.Search.Solr",
           "ExternalSettingsPropertyName": "TestingText"
           },
        "Localizable": true
    }
  3. インデックス設定で、次の変更を行います。

    • Sitecoreのテンプレートの新しいカスタム フィールドの名前と一致するように、"Name" プロパティを更新します。

    • "Handler": クラスを新しいインデックス フィールド ハンドラー クラスの名前で更新します。

      メモ

      新しいカスタムフィールドが共有設定でない場合は、"Localizable": true

  4. 設定を変更した後、Commerce Engineをブートストラップします。

  5. Microsoft IIS Managerで、Commerce Engineミニオン サービス ( CommerceMinions_Scなど) を再起動します。

  6. Sitecore XPインデックスを手動で再構築します。インデックスを再構築すると、Solr Adminクエリーページで、新しい検索ハンドラーが検索インデックスに表示されます。次の例では、新しいインデックス付きフィールドは次のようになります "exampleexternalsettingproperty_t":"Testing Text"

    {
     "responseHeader":{
       "status":0,
       "QTime":2,
       "params":{
         "q":"*:*",
         "fl":"_displayname, productid_t, commercesearchitemtype_t,catalogentityid_t, exampleexternalsettingproperty_t, exampleexternalsettingproperty_t_en",
         "fq":["catalogentityid_t:\"Entity-SellableItem-7042112\"",
           "_language:en",
           "_latestversion:true",
           "_parent:e9f2e3a705750632b67e5e65092230c3"],
         "rows":"11",
         "_":"1611154590220"}},
     "response":{"numFound":1,"start":0,"docs":[
         {
           "productid_t":"7042112",
           "_displayname":"Optix 9.2MP Flash Memory Camcorder—30X 320X Zoom",
           "commercesearchitemtype_t":"SellableItem",
           "catalogentityid_t":"Entity-SellableItem-7042112",
           "exampleexternalsettingproperty_t":"Testing Text",
           "exampleexternalsettingproperty_t_en":"Testing Text"}]
         }
    }

CE Connect検索プロバイダー構成に新しいフィールドを追加する

新しいフィールドをSitecoreで検索可能にするには、CE Connectの検索プロバイダー設定に追加する必要があります。

CE Connectの検索プロバイダー構成に新しいフィールドを追加するには、次のようにします。

  1. Sitecoreサービス インスタンスの \App_Config\Include\Y.Commerce.Engineフォルダーで、検索プロバイダーの設定ファイルを開きます。たとえば、Sorlの場合は、Sitecore.Commerce.Engine.Connectors.Index.Solr.configファイルを開きます。

  2. FieldMapセクションで、新しいfieldName定義を追加します。次の例では、"exampleexternalsettingproperty"という名前の新しいフィールドを追加します。

    <field fieldName="exampleexternalsettingproperty" storageType="YES" indexType="UN_TOKENIZED" vectorType="NO" boost="1f" returnType="string" settingType="Sitecore.ContentSearch.SolrProvider.SolrSearchFieldConfiguration, Sitecore.ContentSearch.SolrProvider"/>
この記事を改善するための提案がある場合は、 お知らせください!