OData準拠

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

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

!注Sitecore Experience Commerce(XC)リリース10.0以降はMicrosoftをベースにしています。AspNetCore.Odataバージョン7.3.1。

Commerce Service APIはOpen Data Protocol(OData)に基づいています。ODataは、外部システムがCommerceの機能やデータ構造を発見できるメタデータを提供します。ODataはまた、メタデータに対する注釈もサポートしており、これにより基本的な検証要件や列挙が可能で、より賢いクライアントが列挙可能なプロパティを事前検証しドロップダウンでサポートできるようにします。

ほとんどのMicrosoft製品はODataをネイティブに利用可能です。例えば、ExcelはODataソースに接続でき、Power Pivotやその他のExcelベースの分析ツールを簡単に統合できます。Microsoft Dynamics AXを含む他のMicrosoft製品もサービス層でODataをサポートしています。

コントローラー

Sitecore XCコントローラはODataControllerクラスから継承します。基底クラスはCommerceODataControllerであり、以下の例で示されています。

... Authorize(Policy = "RoleRequirement") public class ComerceODataController : ODataController, IActionFilter, IAzynActionFilter, IDisposable

ODataルート

ODataRouteはODataRoute属性とODataRoutePrefix属性を使用します。

ODataRoute属性

ODataRoute属性はコントローラーの操作を定義します。例えば:

HttpGet ODataRoute EnableQuery(MaxExpansionDepth = 0) public async Task<IEnumerable> Get()

HttpGet EnableQuery(MaxExpansionDepth = 0) ODataRoute("({Id}) public async Task Get(FromODataUri string id)

!注RouteNameを指定しない場合、このアクションはCommerceAPIとCommerceOpsの両方のルートで利用可能です。

!注拡張フィルターが2レベル以上使われるGETアクションには、EnableQuery属性にMaxExpansionDepth = 0を使うことを推奨します。

コントローラーアクション用のODataRoute属性例

以下の行動はCommerceOpsルートでのみ可能です。

HttpPost ODataRoute("RunMinion", RouteName = CoreConstants.CommercepsApi) public <IActionResult RunMinion(FromBody ODataActionParameters value)

以下の行動はCommerceAPIルートでのみ可能です。

HttpGet ODataRoute("GetListMetadata(listName={listName})", RouteName = CoreConstants.CommerceAPI) public async Task GetListMetadata(FromODataUri string listName)

以下の操作はルートを指定しておらず、そのためCommerceAPIルートとCommerceOpsルートの両方で利用可能です。

HttpPost ODataRoute("AddPolicy") public async Task AddPolicy(FromBody ODataActionParameters value)

ODataRoutePrefixの属性

エンティティODataコントローラの場合、ODataRoutePrefix属性はそのコントローラのすべてのアクションに使用されるプレフィックスを指定します。 ODataRoutePrefix属性値はエンティティ集合の名前と一致しなければなりません。

以下の例では、ODataRoutePrefixは次のように定義されたエンティティ集合に基づいてarg.EntitySet("Environments"):

... ODataRoutePrefx("Environments") public class EnvironmentsController : CommerceOdataController

ODataモデルビルダー

このODataConventionModelBuilder(https://docs.microsoft.com/en-us/odata/webapi/convention-model-builder) は厳密なディスカバリー機構を使用しています。ディスカバリーメカニズムがより厳格であるため、クラスをIEdmModelに追加しなければなりません。

XCはIEdmModelを構築するために以下のパイプラインを使用します:

  • IConfigureServiceApiPipeline
  • IConfigureOpsServiceApiPipeline

派生クラスの発見を促進するために、ODataConventionModelBuilderの以下の拡張機能を使用できます:

  • AddCommerceComplexType: この拡張機能はCLRクラスとそのすべての派生クラスをComplexTypesとしてマッピングします。この操作はCommerceAPIルートとCommerceOpsルートの両方で利用可能です。

    例えば:

    arg.AddCommerceCompletexType(typeof(Model)); arg.AddCommerceCompletexType(typeof(Policy)); arg.AddCompletexType(typeof(CommandMessage)); arg.AddCompletexType(typeof(EntityReference)); arg.AddCompletexType(typeof(Dictionary<string, string>)); arg.AddCompletexType(typeof(List<Task>)); arg.AddCompletexType(typeof(ConcurrentDictionary<string, string>));

  • AddCommerceEntity: この拡張はCLRクラスを写像し、その派生クラスをエンティティとしてallします。例えば:

    arg.AddCommerceEntity(typeof(CommerceEntity)); arg.AddCommerceEntity(typeof(Component));

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