1721703131
2024-07-22 19:08:54
概要
Optimizely Graph (および Content Cloud SaaS) が世界的にデビューするにつれ、いくつかのバグや不具合が発生することが分かっています。
システムの現在の不具合の 1 つは、Geta カテゴリ アドオンの使用、特にファセットの使用に関連しています。幸いなことに、この問題を回避する方法を見つけ出し、一時的な解決策を思いついた人が数人います。
それで……何をする必要があるのでしょうか?
クイックアップデート
皆さん、こんにちは。本題に入る前に、私が Optimizely のエキスパート サービス チームに直接勤務することになったことをお知らせします。サポートが必要な場合は、お気軽にご連絡ください。
さらに、このブログ投稿は、Netcel の Minesh Shah 氏と Muhammad Kashif 氏の協力があってこそ実現しました。お二人のご尽力に感謝いたします。
コンバータ
まず、コンバーターで Geta Category プロパティを取得し、それを Opti Graph でインデックス付けできるプロパティに変換する必要があります。
これを行う最良の方法は、共通プロパティを参照するインターフェイスを作成することです。これにより、そのインターフェイス プロパティをターゲットとするコンバーターを実装できるため、理想的です。
PROTIP: このコンバーターは、インターフェース内の後続の各プロパティに対して作成する必要があります。たとえば、「Categories」という名前のプロパティは、別のコンバーターなしで何度でも使用できますが、「Categories2」を追加する場合は、その特定のプロパティを対象とする別のコンバーターを作成する必要があります。
カテゴリ名ApiModelProperty.cs
[ServiceConfiguration(typeof(IContentApiModelProperty), Lifecycle = ServiceInstanceScope.Singleton)]
public sealed class CategoriesNamesApiModelProperty : IContentApiModelProperty
{
private readonly ICategoryContentLoader _categoryContentLoader;
public CategoriesNamesApiModelProperty(ICategoryContentLoader categoryContentLoader)
{
_categoryContentLoader = categoryContentLoader;
}
public object GetValue(ContentApiModel contentApiModel)
{
if (contentApiModel.Properties.TryGetValue(nameof(IFilterCategoriesContent.Categories), out var propertyModel))
{
if (propertyModel is List contentModelReferences && contentModelReferences.Any())
{
var names = new List();
foreach (var category in contentModelReferences.Where(x => x.Id != null))
{
if (_categoryContentLoader.TryGet(new ContentReference(category.Id!.Value),
out CategoryData categoryData))
{
names.Add(categoryData.Name);
}
}
return names;
}
}
return Enumerable.Empty();
}
public string Name => "CategoryNames";
}
IFilterCategoriesコンテンツ.cs
public interface IFilterCategoriesContent
{
IList? Categories { get; set; }
}
グラフ
上記のファイルが配置されると、インターフェースから継承するすべてのクラスに、Graph にインデックス付けされた新しいプロパティ「CategoryNames」が作成されます。このプロパティを使用して、モデル自体の Geta カテゴリと対話したり、それらをファセットとして使用したりできるようになります。
たとえば、Opti Graph 内で CategoryNames プロパティを利用するサンプル クエリを次に示します。
query getBlogItemListing(
$start: Int = 0,
$pageSize: Int = 24,
$locale: [Locales!] = [en],
$facetsFilter: [String!])
{
getBlogItems: BlogItemPage(
locale: $locale
skip: $start
limit: $pageSize
orderBy: { StartPublish: DESC }
) {
items {
CategoryNames
Url
StartPublish,
Name
}
total
facets {
category: CategoryNames(
orderBy: DESC,
orderType: COUNT,
filters: $facetsFilter,
limit: 99) {
count
name
}
}
}
}
このコードスニピットは、次のようなものを出力します(内容によって異なります)
まとめ
Geta カテゴリを Optimizely Graph 内のファセットとして利用するには、少量のカスタム開発を行う必要があります。これらの手順は、Graph がカテゴリ名を適切にインデックスできるようにするための回避策または応急処置を提供します。
とはいえ、アドオン開発者と協力して、Optimizely 製品を継続的に改善するための作業がバックグラウンドで行われています。いつかこの問題に対するすぐに使える解決策が出てくると期待しています。
#Optimizely #Graph #Geta #カテゴリによるファセット