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

リファレンスデータクライアントAPI

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

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

Reference Data Client APIは、HTTPS経由でReference Data Serviceにアクセスします。これはReferenceDataHttpClientクラスで表され、IReferenceDataClientインターフェイスを実装します。

メモ

各メソッドの同期バージョンと非同期バージョンが利用可能です。たとえば、EnsureDefinitionType()EnsureDefinitionTypeAsync()などです。

すべての例では基本的なDefinition<string,string> 定義型を使用していますが、カスタム型を作成することもできます。

Sitecoreのコンテキストで参照データ クライアントAPIを取得する

次の例は、SitecoreコンテキストでReference Data Client APIの読み取り専用インスタンスと読み取り/書き込みインスタンスを取得する方法を示しています。

using Sitecore.DependencyInjection;
using Sitecore.Xdb.ReferenceData.Core;
namespace Documentation
{
    public class RefDataClients
    {
        public async void AsyncExample()
        {
            // Read-write client
            var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

            // Read-only client
            var readOnlyClient = ServiceLocator.ServiceProvider.GetService(typeof(IReadOnlyReferenceDataClient)) as IReadOnlyReferenceDataClient;
        }
    }
}
手記

Sitecoreのコンテキストでは、設定によってサービス実装とHTTPクライアント実装のどちらを返すかが制御されます。

Sitecore以外のコンテキストで参照データ クライアントAPIを取得する

次の例は、非SitecoreコンテキストでReferenceDataHttpClientを構築する方法を示しています。

using System;
using Microsoft.Extensions.Logging;
using Sitecore.Xdb.Common.Web;
using Sitecore.Xdb.ReferenceData.Client;
using Sitecore.Xdb.ReferenceData.Core.Converter;

namespace TestConsoleApp
{
    public class RefDataHttpClientNonSitecore
    {
        public async void AsyncExample()
        {
            var url = "https://refdata/";

            var converter = new DefinitionEnvelopeJsonConverter();

            // Valid certificate thumbprints must be passed in
            var options = CertificateHttpClientHandlerModifierOptions.Parse(
"StoreName=My;StoreLocation=LocalMachine;FindType=FindByThumbprint;FindValue=BC6DBAC6D7E7796E5816DBA268FE2B7036F0F8D9");

            // Optional timeout modifier
            IHttpClientHandlerModifier[] handlers = { new CertificateHttpClientHandlerModifier(options) };

            var logger = new Logger<ReferenceDataHttpClient>(new LoggerFactory());

            var client = new ReferenceDataHttpClient(
                converter,
                new Uri(url),
                handlers,
                logger
             );
         }
     }
 }

定義の取得

次の例は、定義を取得する方法を示しています。カルチャを指定しない場合は、使用可能なすべてのカルチャが返されます。

using Sitecore.DependencyInjection;
using Sitecore.Xdb.ReferenceData.Client;
using Sitecore.Xdb.ReferenceData.Core;
using System.Globalization;

namespace Documentation
{
    public class RefDataGetDefinition
    {
        public async void AsyncExample()
        {
            var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

            var definitionType = await client.EnsureDefinitionTypeAsync("starfleet ships");
            var criteria = new DefinitionCriteria("voyager", definitionType);

            var definition = await client.GetDefinitionAsync<string, string>(criteria, false);

            var definitionData = definition.CultureData[new CultureInfo("en-us")]; // Get language from e.g. Sitecore.Context.CurrentLanguage.CultureInfo
        }
    }
}

カルチャ固有の定義を取得する

次の例は、カルチャ固有の定義を取得する方法を示しています。

using Sitecore.DependencyInjection;
using Sitecore.Xdb.ReferenceData.Client;
using Sitecore.Xdb.ReferenceData.Core;
using System.Globalization;

namespace Documentation
{
    public class RefDataGetDefinitionCulture
    {
        public async void AsyncExample()
        {
            var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

            // Retrieve Latest Active Definition with Danish Culture Only
            var definitionType = await client.EnsureDefinitionTypeAsync("starfleet ships");
            var criteria = new DefinitionCriteria("voyager", definitionType)
            {
                Culture = new CultureInfo("da") // Get language from e.g. Sitecore.Context.CurrentLanguage.CultureInfo
            };

            var definition = await client.GetDefinitionAsync<string, string>(criteria, false);

            // Get Danish culture
            var data = definition.CultureData[new CultureInfo("da")]; // Get language from e.g.Sitecore.Context.CurrentLanguage.CultureInfo
        }
    }
}

カルチャ不変定義の取得

次の例は、カルチャの不変式定義を取得する方法を示しています。

using Sitecore.DependencyInjection;
using Sitecore.Xdb.ReferenceData.Client;
using Sitecore.Xdb.ReferenceData.Core;
using System.Globalization;

public class RefDataGetDefinitionCultureInvariant
{
    public async void AsyncExample()
    {
        var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

        // Retrieve Latest Active Definition Culture Invariant
        var definitionType = await client.EnsureDefinitionTypeAsync("starfleet ships");
        var criteria = new DefinitionCriteria("voyager", definitionType)
        {
            Culture = CultureInfo.InvariantCulture
        };

        var definition = await client.GetDefinitionAsync<string, string>(criteria, false);

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

カルチャ不変データは、データにカルチャがあるが、そのカルチャがデータのソースによって明示的に定義されていない場合に使用されます。たとえば、外部プロバイダーは英語で都市名の一覧を提供する場合がありますが、データのカルチャを明示的に指定しません。このような場合、データはカルチャ不変条件として格納する必要があります。

定義の保存

次の例は、さまざまなカルチャで新しい定義を作成して保存する方法を示しています。

using Sitecore.DependencyInjection;
using Sitecore.Xdb.ReferenceData.Core;
using System.Globalization;

namespace Documentation
{
    public class RefDataSaveDefinition
    {
        public async void Example()
        {
            var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

            var definitionType = await client.EnsureDefinitionTypeAsync("country");

            var definitionKey = new DefinitionKey("se", definitionType, 1);
            var definition = new Definition<string, string>(definitionKey)
            {
                IsActive = true,
                                    CommonData = "the common data",
                                    CultureData = {
                                            { new CultureInfo("en"), "Sweden" }
                                    }
            };

            // aDd another definition culture
            definition.CultureData[new CultureInfo("se")] = "Sverige";

            // Culture invariant data (has culture, but culture is unknown)
            definition.CultureData[CultureInfo.InvariantCulture] = "Swedenland";

            await client.SaveAsync(definition);
        }
    }
}

複数の定義の保存

次の例は、複数の定義を保存する方法を示しています。

using Sitecore.DependencyInjection;
using Sitecore.Xdb.ReferenceData.Core;
using System.Globalization;
using Sitecore.Xdb.ReferenceData.Core.Collections;

namespace Documentation
{
    public class RefDataSaveDefinition
    {
        public async void Example()
        {
            var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

            var definitionType = await client.EnsureDefinitionTypeAsync("country");

            var definitionKey = new DefinitionKey("se", definitionType, 1);
            var definition = new Definition<string, string>(definitionKey)
            {
                IsActive = true
            };

            definition.CultureData[new CultureInfo("en")] = "Sweden";
            definition.CultureData[new CultureInfo("se")] = "Sverige";

            var definitionKey2 = new DefinitionKey("de", definitionType, 1);
            var definition2 = new Definition<string, string>(definitionKey)
            {
                IsActive = true
            };

            definition.CultureData[new CultureInfo("en")] = "Germany";
            definition.CultureData[new CultureInfo("se")] = "Tyskland";

            var definitions = new DefinitionCollection<string, string>
            {
                definition,
                definition2
            };

            await client.SaveAsync(definitions);
        }
    }
}

定義のアクティブ化

定義をアクティブ化するには、定義のIsActiveプロパティをtrueに設定し、定義を保存します。

using Sitecore.DependencyInjection;
using Sitecore.Xdb.ReferenceData.Client;
using Sitecore.Xdb.ReferenceData.Core;
using System.Globalization;

namespace Documentation
{
    public class RefDataActivateDefinition
    {
        public async void AsyncExample()
        {
            var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

            var definitionType = await client.EnsureDefinitionTypeAsync("starfleet ships");
            var criteria = new DefinitionCriteria("voyager", definitionType);

            var definition = await client.GetDefinitionAsync<string, string>(criteria, false);

            definition.IsActive = true;

            await client.SaveAsync(definition);
        }
    }
}

特定の型ですべての定義を取得する

次の例は、特定の型ごとにすべての定義を取得し、結果をページ分割する方法を示しています。

using Sitecore.DependencyInjection;
using Sitecore.Xdb.ReferenceData.Core;
namespace Documentation
{
    public class RefDataActivateGetByType
    {
        public async void AsyncExample()
        {
            var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

            var definitionType = await client.EnsureDefinitionTypeAsync("starfleet ships");

            // Gets the first 10 active definitions
            var definitions = await client.GetDefinitionsByTypeAsync<string, string>(definitionType, true, 1, 10);

            var pageOneDefinitions = definitions.Definitions;
            var currentPage = definitions.PageNumber;
            var currentPageSize = definitions.PageSize;
            var totalDefinitions = definitions.Total; // Total number of definitions with type 'starfleet ships'
        }
    }
}
この記事を改善するための提案がある場合は、 お知らせください!