ODataコンプライアンス

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

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

メモ

Sitecore Experience Commerce (XC) リリース10.0以降は、Microsoft.AspNetCore.Odataバージョン7.3.1に基づいています。

Commerce Service APIは、Open Data Protocol (OData) に基づいています。ODataは、外部システムがコマース機能とデータ構造を検出できるようにするメタデータを提供します。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ルート

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

ODataRoute属性

ODataRoute属性は、次のようなコントローラーアクションを定義します。

[HttpGet]
[ODataRoute]
[EnableQuery(MaxExpansionDepth = 0)]
public async Task<IEnumerable<CommerceEnvironment>> Get()
[HttpGet]
[EnableQuery(MaxExpansionDepth = 0)]
ODataRoute("({Id})]
public async Task<IActionResult> Get([FromODataUri] string id) 
手記

RouteNameを指定しない場合、アクションはCommerceAPIルートとCommerceOpsルートの両方で使用できます。

手記

展開フィルターが2レベル以上使用されるGETアクションでは、EnableQuery属性で "MaxExpansionDepth = 0" を使用することをお勧めします。

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

次のアクションは、CommerceOpsルートを通じてonly 使用できます。

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

次のアクションは、CommerceAPIルートを通じてonly使用できます。

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

次のアクションはルートを指定しないため、CommerceAPIルートとCommerceOpsルートの両方で使用できます。

[HttpPost]
[ODataRoute("AddPolicy")]
public async Task<IactionResult> AddPolicy([FromBody] ODataActionParameters value)

ODataRoutePrefix属性

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

次の例では、ODataRoutePrefixは として定義されたエンティティセットに基づいていますarg.EntitySet<CommerceEnvironment>("Environments")

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

ODataモデル ビルダー

ODataConventionModelBuilderは厳密な検出メカニズムを使用します。検出メカニズムはより厳密であるため、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<CommerceCommand>>));
    arg.AddCompletexType(typeof(ConcurrentDictionary<string, string>));
  • AddCommerceEntity: この拡張機能は、CLRクラスをマップし、その派生クラスをエンティティとしてallします。例えば:

    arg.AddCommerceEntity(typeof(CommerceEntity));
    arg.AddCommerceEntity(typeof(Component));
この記事を改善するための提案がある場合は、 お知らせください!