1. リファレンスデータサービス

参照データモデルの概要

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

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

このトピックでは、Reference Data Serviceに対してデータの読み取りと書き込みを行うときに使用されるモデルについて説明します。完全なコード サンプルについては、Reference Data Client APIを参照してください。

種類

定義の種類は、"Sitecore XP Automation Plan"、"Sitecore XP Goal"、"Airport Code" などの一意の文字列nameによって識別されます。定義タイプは文字列であり、カスタムクラスではありません。

次の例では、「Airport Code」という名前の定義タイプが取得されています。定義タイプが存在しない場合は、.EnsureDefinitionTypeAsync() メソッドによって作成されます。

var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

DefinitionTypeKey definitionType = await client.EnsureDefinitionTypeAsync("Airport Code");

モニカー

参照データ サービス内の定義は、モニカーと呼ばれる文字列識別子によって識別されます。モニカーは特定の定義の種類内で一意であるため、2つの異なる定義の種類に同じモニカーを使用できます。

次の例は、"Airport Codes" 型の "LHR" モニカーを使用して定義を作成する方法を示しています。

var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

DefinitionTypeKey definitionType = await client.EnsureDefinitionTypeAsync("Airport Codes");

var definitionKey = new Sitecore.Xdb.ReferenceData.Model.DefinitionKey("LHR", definitionType, 1);

定義データ

参照データ定義は、2つのDTOタイプで定義されます。1つのクラスは、定義のすべての言語に共通の属性を定義し、もう1つのクラスは、定義のカルチャ固有の属性を定義します。これらの型は、Definition<TCommon,TCulture> クラスの型パラメーターとして提供され、TCommonDataTCultureDatastringなどの単純な型または カスタム型にすることができます。

次の例では、Definition<string,string> の新しいインスタンスが定義キーを使用してインスタンス化され、カルチャ固有のエントリが追加されます。

var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

DefinitionTypeKey definitionType = await client.EnsureDefinitionTypeAsync("Airport Codes");

var definitionKey = new Sitecore.Xdb.ReferenceData.Model.DefinitionKey("LHR", definitionType, 1);

var definition = new Sitecore.Xdb.ReferenceData.Model.Definition<string, string>(definitionKey);

definition.CultureData[new CultureInfo("en")] = "London Heathrow Airport";

カルチャ固有のデータと共通データ

参照データ サービスでは、カルチャ固有のデータと共通データがサポートされています。カルチャ固有のデータには名前と説明が含まれ、共通データにはカルチャ間で同じもの (値など) が含まれます。次の例では、共通データが入力され、2つのカルチャ固有のエントリ ( endk) が追加されます。

var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

DefinitionTypeKey definitionType = await client.EnsureDefinitionTypeAsync("Airport Codes");

var definitionKey = new Sitecore.Xdb.ReferenceData.Model.DefinitionKey("LHR", definitionType, 1);

var definition = new Sitecore.Xdb.ReferenceData.Model.Definition<string, string>(definitionKey)
{
    IsActive = true,  // Denotes that this version is active (version 1)
    CommonData = "Common data about this airport code",
            CultureData = {
                    { new CultureInfo("en"), "London Heathrow Airport" },
                    { new CultureInfo("dk"), "Danish London Heathrow Airport" }
            }
};

カルチャ不変データ

場合によっては、表示するデータがありますが、データのカルチャが指定されていません (特に、データが外部データ プロバイダーから取得された場合)。たとえば、GeoIPデータ プロバイダーは、IPが配置されている都市の名前を提供します。都市名は英語になります。ただし、名前が英語になることを明示的に指定していないため、この事実を推測することはできません。このような場合は、カルチャ不変としてデータを格納する必要があります。

メモ

カルチャの不変条件データは、特定のカルチャが使用できない場合のフォールバック メカニズムとして使用できます。

カルチャ不変データの保存

次の例は、カルチャ不変データを格納する2つの方法を示しています。

definition.CultureData[CultureInfo.InvariantCulture] = "Swedenland";
definition.CultureData[new CultureInfo("")] = "Swedenland";

カルチャ不変データの取得

定義を取得するときにカルチャを指定しない場合は、使用可能なすべてのカルチャが返されます。カルチャ不変データのみを表示する場合は、DefinitionCriteriaCultureとしてCultureInfo.Invariantを渡します。

DefinitionCriteria criteria = new DefinitionCriteria("moniker", definitionTypeKey)
{
    Culture = CultureInfo.InvariantCulture
};

定義が返されたら、次のようにカルチャ不変データを取得できます。

var data = definition.CultureData[CultureInfo.InvariantCulture];

バージョン

定義は番号でバージョン管理されます。個々のバージョンをアクティブまたは非アクティブにすることができます。定義を削除するときは、定義のすべてのバージョンを個別に削除する必要があります。定義バージョンは、非アクティブとしてマークされている場合にのみ削除できます。

手記

この操作は、開発者が誤って定義を削除しないようにするために、意図的に手間がかかります。

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