ウォークスルー Commerceテンプレートプロパティのフィールドハンドラ作成
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
新しいカタログエンティティプロパティをCommerceテンプレートに追加し、それらの新しいプロパティに基づいて検索できるようにしたい場合、以下の条件を満たす必要があります:
- カスタムのCommerceテンプレートフィールドハンドラーを作成します。
- 新しいカタログエンティティプロパティをCommerce Engineの検索ポリシーセットに追加してください。
- 新しいフィールドをCE Connect検索プロバイダーの設定に追加してください。
カスタム外部設定フィールドハンドラークラスを作成します
Sitecore Commerceテンプレートに新しいカタログプロパティを追加すると、カスタムインデックスフィールドハンドラクラスを作成し、Catalog External SettingsコンポーネントにカスタムCatalogエンティティのフィールドを追加し、Commerce Engineがそれらの場所を把握できるようにします。
外部設定として定義された新しいカタログプロパティのカスタムハンドラーを作成するには:
-
Sitecoreから継承するクラスを作成します 。Commerce.Plugin。Search。AbstractIndexFieldHandlerクラス:
public class ExternalSettingsFieldHandler : AbstractIndexFieldHandler
-
公共財産の名前を付け加えるExternalSettingsPropertyName:
public class ExternalSettingsFieldHandler : AbstractIndexFieldHandler { public string ExternalSettingsPropertyName { get; set; } = string.Empty;
-
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; }
-
ComposeValueの本文で「外部設定」コンポーネントを確認し、設定をインデックスするプロパティの決定論的IDに照合します。
- 一致があれば、指定された言語で最初にインデックスするプロパティ名を探してください。
- 指定された言語でマッチが存在しない場合は、共有設定を参照してください。
- 共有設定でマッチが見つからなければ、マッチは存在せず、インデックスするものがありません。
// check for required external settings information if (!entity.HasComponent
() || !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 (); 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 = settingsCollectiondeterministicId; 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 = externalSettingslang; if (languageSettings.ContainsKey(ExternalSettingsPropertyName)) { // found it, return the value return languageSettingsExternalSettingsPropertyName; } } // no language property found, check shared settings var sharedSettings = externalSettings"shared"; if (sharedSettings.ContainsKey(ExternalSettingsPropertyName)) { // found in shared settings, return the value return sharedSettingsExternalSettingsPropertyName; } // Not found, just return null return null; } }
カスタムフィールドハンドラと新しいプロパティを追加して、Searchポリシーセットファイルにインデックスします
カスタムフィールドハンドラと新しいカスタムフィールドを検索インデックスに登録するには、Commerce EngineのSolr検索ポリシーセットに追加する必要があります。
カスタムフィールドハンドラと新しいプロパティをSearchポリシーセットファイルに追加するには:
-
C:\inetpub\wwwroot\
\wwwroot\data\Environments\PlugIn.Search.Solr.PolicySet-1.0.0.jsonファイルを開け。 -
インデックス構成を含むセクションを見つけてください。例えば、以下の例は新しいハンドラークラス("$type": "Myplugin.Search.Solr.ExternalSettingsFieldHandler, MyPlugin.Search.Solr")を定義するSitecoreマスターインデックス構成と、インデックス用のカスタムカタログエンティティプロパティ(「ExternalSettingsPropertyName」: "TestingText")を示しています。
{ "$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 }
-
インデックス構成では、以下の変更を加えます。
-
"Name"プロパティをテンプレートの新しいカスタムフィールドの名前に合わせて更新してくださいSitecore。
-
"Handler"
。!注新しいカスタムフィールドが共有設定でない場合は、"Localizable": true
-
-
設定変更を行ったら、Commerce Engineをブートストラップしてください。
-
IISマネージャー Microsoft Commerce Engineのミニオンサービスを再起動します(例: CommerceMinions_Sc)。
-
手動でインデックスSitecore XP再構築します。インデックスを再構築した後、Solr Adminクエリページで新しい検索ハンドラが検索インデックスに表示されます。以下の例では、新しいインデックスフィールドは "exampleexternalsettingproperty_t":"Testing Text"
{ "responseHeader":{ "status"
, "QTime", "params":{ "q":"*:*", "fl":"_displayname, productid_t, commercesearchitemtype_t,catalogentityid_t, exampleexternalsettingproperty_t, exampleexternalsettingproperty_t_en", "fq":"catalogentityid_t:\"Entity-SellableItem-7042112\"", "_language", "_latestversion", "_parent", "rows":"11", "_":"1611154590220"}}, "response":{"numFound","start","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の検索プロバイダー設定に新しいフィールドを追加するには:
-
Sitecoreサービスインスタンスの \App_Config\Include\Y.Commerce.Engineフォルダで検索プロバイダーの設定ファイルを開きます。例えば、Sorlの場合はSitecore.Commerce.Engine.Connectors.Index.Solr.configファイルを開いてください。
!注検索プロバイダーとしてAzureを使う場合は、Sitecore.Commerce.Engine.Connectors.Index.Azure.configファイルを開いてください。
-
FieldMapセクションで新しいfieldName定義を追加します。次の例では、"exampleexternalsettingproperty"という新しいフィールドを追加します。