Using Client Extensions
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

配送エンジンクライアント拡張機能の使用

Liferay DXP 2024.Q1+/ポータル GA112+

クライアント拡張機能を使用して、Liferay に新しい配送エンジンを追加できます。 サンプルワークスペース からのこのクライアント拡張機能は、OAuth 2 を使用して Liferay と通信するスタンドアロンの Spring Boot アプリケーションで構成されています。 Liferay ですぐに使用できる配送方法の詳細については、 配送方法の設定 を参照してください。

前提条件

  1. サポートされているバージョンの Javaをインストールします。

    注

    推奨される JVM 設定については、 JVM 構成 を参照してください。

  2. サンプルワークスペースをダウンロードし、解凍します。

    curl -o com.liferay.sample.workspace-latest.zip https://repository.liferay.com/nexus/service/local/artifact/maven/content\?r\=liferay-public-releases\&g\=com.liferay.workspace\&a\=com.liferay.sample.workspace\&\v\=LATEST\&p\=zip
    
    unzip -d liferay-sample-workspace com.liferay.sample.workspace-latest.zip
    

これで、クライアント拡張機能を起動して Liferay にデプロイするためのツールが手に入りました。

配送エンジンクライアント拡張機能を調べる

client-extensions/liferay-sample-commerce-shipping-engine/client-extension.yaml ファイルは、サンプルワークスペース内の配送エンジンクライアント拡張機能を定義します。 .yaml ファイルには、理解しておく必要がある 3 つの重要なブロックがあります。

assemble:
    - fromTask: bootJar

assemble ブロックは、スタンドアロン アプリケーション/マイクロサービスが bootJar コマンドで作成されることを指定します。 これは Spring Boot Gradle プラグインから入手できます。 Liferay SaaS にデプロイするには、アプリケーション JAR を LUFFA に含める必要があります。

liferay-sample-commerce-shipping-engine:
   key: liferay-sample-commerce-shipping-engine
   name: Liferay Sample Commerce Shipping Engine
   oAuth2ApplicationExternalReferenceCode: liferay-sample-commerce-shipping-engine-oauth-application-user-agent
   shippingEngineTypeSettings:
      key1: value1
      key2: value2
      key3: value3
      key4: value4
      key5: value5
   type: commerceShippingEngine

liferay-sample-commerce-shipping-engine ブロックには、配送エンジンクライアント拡張に必要な主要な設定が含まれています。 各フィールドの詳細については、 Shipping Engine Client Extension YAML Reference を参照してください。

liferay-sample-commerce-shipping-engine-oauth-application-user-agent:
   .serviceAddress: localhost:58081
   .serviceScheme: http
   name: Liferay Sample Commerce Shipping Engine OAuth Application User Agent
   scopes:
      - Liferay.Headless.Admin.Workflow.everything
   type: oAuthApplicationUserAgent

client-extension.yaml のもう 1 つの重要な部分は、 liferay-sample-commerce-shipping-engine-oauth-application-user-agent 定義にあります。 serviceAddress パラメータはサービスがローカルで実行される場所を定義し、 serviceScheme パラメータはプロトコルを定義します。 name フィールドは、OAuth アプリケーション ユーザー エージェントの名前を定義します。 スコープ フィールドは、ヘッドレス API に付与されるアクセスを定義します。 このセクションでは、Liferay を認可サーバーとして設定し、次にデプロイする配送エンジンがリソース サーバーの安全なエンドポイントを呼び出してペイロードを送信できるようにします。 詳細については、 OAuth ユーザー エージェント YAML 構成リファレンス を参照してください。

配送エンジンクライアント拡張機能をデプロイする

  1. サンプルワークスペースに移動します。

  2. 実行

    ./gradlew initBundle
    

    これにより、ワークスペースの /bundles フォルダー内にバンドルがダウンロードされます。

  3. /bundles/tomcat/bin フォルダに移動します。 実行

    ./catalina run
    
  4. サンプルワークスペースs /client-extensions/liferay-sample-commerce-shipping-engine フォルダに戻ります。

  5. 実行

    ../../gradlew clean createClientExtensionConfig deploy
    
  6. Liferayのログで、クライアント拡張機能がデプロイされ、起動したことを確認します。

    2024-02-23 11:41:03.277 INFO  [com.liferay.portal.kernel.deploy.auto.AutoDeployScanner][AutoDeployDir:212] Processing liferay-sample-commerce-shipping-engine.zip
    2024-02-23 11:41:13.918 INFO  [fileinstall-directory-watcher][BundleStartStopLogger:68] STARTED liferaysamplecommerceshippingengine_7.4.13 [1504]
    

    さらに、OAuth ユーザー エージェントに関するメッセージも記録されます。

    2024-02-23 11:41:14.066 INFO  [CM Event Dispatcher (Fire ConfigurationEvent: pid=com.liferay.oauth2.provider.configuration.OAuth2ProviderApplicationUserAgentConfiguration~liferay-sample-commerce-shipping-engine-oauth-application-user-agent)][InterpolationConfigurationPlugin:135] Replaced value of configuration property 'homePageURL' for PID com.liferay.oauth2.provider.configuration.OAuth2ProviderApplicationUserAgentConfiguration~liferay-sample-commerce-shipping-engine-oauth-application-user-agent
    2024-02-23 11:41:14.099 INFO  [CM Event Dispatcher (Fire ConfigurationEvent: pid=com.liferay.oauth2.provider.configuration.OAuth2ProviderApplicationUserAgentConfiguration~liferay-sample-commerce-shipping-engine-oauth-application-user-agent)][OAuth2ProviderApplicationUserAgentConfigurationFactory:170] OAuth 2 application with external reference code liferay-sample-commerce-shipping-engine-oauth-application-user-agent and company ID 44408322414245 has client ID id-536a55dd-89fb-f483-b719-328270d95199
    
  7. OAuth アプリケーション ユーザー エージェントが Liferay に追加されたことを確認します。 コントロール パネル → OAuth2 管理に移動します。

クライアント拡張機能をデプロイすると、Liferay サンプル コマース配送エンジン OAuth アプリケーション ユーザー エージェントが追加されます。

Liferay サンプルコマース配送エンジン OAuth アプリケーションユーザーエージェントは、Liferay が保護されたエンドポイントを介して Spring Boot アプリケーションのデータにアクセスできるようにするために必要な OAuth 2 認証 を提供します。 この場合、Liferay がアプリケーションを承認するために必要なのは、 application-default.propertiesで外部参照コードを宣言することだけです。

liferay.oauth.application.external.reference.codes=liferay-sample-commerce-shipping-engine-oauth-application-user-agent

マイクロサービスを開始する

client-extensions/liferay-sample-commerce-shipping-engine フォルダから、

../../gradlew bootRun

Spring Boot アプリケーションが起動し、ログにメッセージが出力されます。

...
2024-02-28 09:44:17.880  INFO 4363 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 58081 (http) with context path ''
2024-02-28 09:44:17.887  INFO 4363 --- [           main] c.l.sample.SampleSpringBootApplication   : Started SampleSpringBootApplication in 2.32 seconds (JVM running for 2.62)
<==========---> 80% EXECUTING [56s]
> :client-extensions:liferay-sample-commerce-shipping-engine:bootRun

配送エンジンの追加を確認する

  1. 管理者としてログインし、 グローバル メニュー (Applications Menu icon) を開き、 コントロール パネル → サイトに移動します。

  2. 新しい Minium サイトを追加します。

  3. グローバル メニュー (Applications Menu icon) を開き、 コマース → チャネルに移動します。

  4. ミニアムポータル を選択し、配送方法セクションまで下にスクロールします。 ここで、新しい配送エンジンの追加を確認します。 デフォルトでは非アクティブです。

    チャネル設定で新しい配送エンジンの追加を確認します。

  5. 新しい配送エンジンを選択し、 アクティブ トグルを使用してアクティブにします。

  6. [保存]をクリックします。 配送エンジン用の新しい 構成 タブが表示されます。 構成タブには入力フィールドがあります。 クライアント拡張機能自体に値をハードコーディングする代わりに、クライアント拡張機能に必要な情報をここに入力できます。 例にはサンプルのキーと値のペアが含まれています。

  7. [保存]をクリックします。

  8. サイトを開き、アカウントセレクターを使用して新しいアカウントを作成します。

  9. いくつかの商品をカートに追加します。

  10. ミニカートを開き、 「送信」をクリックします。 これによりチェックアウトフローが開始されます。

  11. 配送オプションを選択する手順に到達するまでチェックアウトを続けます。

    新しく追加されたクライアント拡張機能から 2 つの新しい配送オプションが追加されたことを確認します。

  12. クライアント拡張機能から 2 つの新しいオプションのいずれかを選択し、注文を完了します。

コードを調べる

Liferay で配送エンジンを作成するには、次の詳細が必要です。

  • キー
  • 名前
  • 説明
  • 配送オプション
  • 有効な配送オプション
  • 配送オプションラベル

提供されているサンプル配送エンジン クライアント拡張機能には、Liferay に新しい配送エンジンを作成するために Spring Boot アプリケーションによって呼び出されるいくつかのコントローラーが含まれています。 client-extension.yaml ファイルの key フィールドは、配送エンジンのキーを指定します。 既存の配送方法と競合しない一意のキーを使用する必要があります。

NameRestController.javaを調べる

@PostMapping
public ResponseEntity<String> post(
   @AuthenticationPrincipal Jwt jwt, @RequestBody String json) {

   log(jwt, _log, json);

   return new ResponseEntity<>(
      new JSONObject(
      ).put(
         "name", "Shipping Engine Name"
      ).toString(),
      HttpStatus.OK);
}

NameRestController には、JSON Web Token (JWT) とリクエスト本体の 2 つのパラメーターを持つ単一の post メソッドが含まれています。 トークンは HTTP 呼び出しを認証し、リクエスト本体には JSON 形式の文字列としてデータが含まれます。 リクエスト本体をログに記録した後、 JSONObject() コンストラクターを使用して配送エンジンの名前を追加し、それを HTTP ステータスとともに応答エンティティとして返します。

DescriptionRestController.javaを調べる

@PostMapping
public ResponseEntity<String> post(
   @AuthenticationPrincipal Jwt jwt, @RequestBody String json) {

   log(jwt, _log, json);

   return new ResponseEntity<>(
      new JSONObject(
      ).put(
         "description", "Shipping Engine Description"
      ).toString(),
      HttpStatus.OK);
}

DescriptionRestController には、JSON Web Token (JWT) とリクエスト本体の 2 つのパラメーターを持つ単一の post メソッドが含まれています。 トークンは HTTP 呼び出しを認証し、リクエスト本体には JSON 形式の文字列としてデータが含まれます。 リクエストボディをログに記録した後、 JSONObject() コンストラクターを使用して配送エンジンの説明を追加し、HTTP ステータスとともに応答エンティティとして返します。

OptionLabelRestController.javaを調べる

@PostMapping
public ResponseEntity<String> post(
      @AuthenticationPrincipal Jwt jwt, @RequestBody String json)
   throws Exception {

   log(jwt, _log, json);

   JSONObject jsonObject = new JSONObject(json);

   if (!jsonObject.has("name")) {
      return null;
   }

   return new ResponseEntity<>(
      new JSONObject(
      ).put(
         "name", "Shipping Option Name"
      ).toString(),
      HttpStatus.OK);
}

OptionLabelRestController には、JSON Web Token (JWT) とリクエスト本体の 2 つのパラメーターを持つ単一の post メソッドが含まれています。 トークンは HTTP 呼び出しを認証し、リクエスト本体には JSON 形式の文字列としてデータが含まれます。 リクエストボディをログに記録した後、 JSONObject() コンストラクターを使用して、リクエストボディ内の JSON 文字列から新しい JSON オブジェクトを作成します。 JSON オブジェクトに name 属性が含まれていない場合は、null を返します。 次に、 JSONObject() コンストラクターを使用して配送オプション名を追加し、HTTP ステータスとともに応答エンティティとして返します。

OptionsRestController.javaを調べる

@PostMapping
public ResponseEntity<String> post(
      @AuthenticationPrincipal Jwt jwt, @RequestBody String json)
   throws Exception {

   log(jwt, _log, json);

   return new ResponseEntity<>(
      new JSONObject(
      ).put(
         "shippingOptions",
         new JSONArray(
         ).put(
            new JSONObject(
            ).put(
               "amount", 13.90
            ).put(
               "key", "CXOption1"
            ).put(
               "name", "CXOption1"
            ).put(
               "priority", 1
            )
         ).put(
            new JSONObject(
            ).put(
               "amount", 15.99
            ).put(
               "key", "CXOption2"
            ).put(
               "name", "CXOption2"
            ).put(
               "priority", 2
            )
         ).put(
            new JSONObject(
            ).put(
               "amount", 17.50
            ).put(
               "key", "CXOption3"
            ).put(
               "name", "CXOption3"
            ).put(
               "priority", 3
            )
         )
      ).toString(),
      HttpStatus.OK);
}

OptionsRestController には、JSON Web Token (JWT) とリクエスト本体の 2 つのパラメーターを持つ単一の post メソッドが含まれています。 トークンは HTTP 呼び出しを認証し、リクエスト本体には JSON 形式の文字列としてデータが含まれます。 リクエスト本体をログに記録した後、 JSONObject() コンストラクター、続いて JSONArray() コンストラクターを使用して、配送エンジンに 3 つの配送オプションを追加し、それを HTTP ステータスとともに応答エンティティとして返します。 各配送オプションには、 キー、 名前、 優先度、および 金額が必要です。

OptionsEnabledRestController.javaを調べる

@PostMapping
public ResponseEntity<String> post(
      @AuthenticationPrincipal Jwt jwt, @RequestBody String json)
   throws Exception {

   log(jwt, _log, json);

   return new ResponseEntity<>(
      new JSONObject(
      ).put(
         "shippingOptions",
         new JSONArray(
         ).put(
            new JSONObject(
            ).put(
               "amount", 13.90
            ).put(
               "key", "CXOption1"
            ).put(
               "name", "CXOption1"
            ).put(
               "priority", 1
            )
         ).put(
            new JSONObject(
            ).put(
               "amount", 15.99
            ).put(
               "key", "CXOption2"
            ).put(
               "name", "CXOption2"
            ).put(
               "priority", 2
            )
         )
      ).toString(),
      HttpStatus.OK);
}

OptionsEnabledRestController には、JSON Web Token (JWT) とリクエスト本体の 2 つのパラメーターを持つ単一の post メソッドが含まれています。 トークンは HTTP 呼び出しを認証し、リクエスト本体には JSON 形式の文字列としてデータが含まれます。 リクエスト本体をログに記録した後、 JSONObject() コンストラクター、続いて JSONArray() コンストラクターを使用して、配送エンジンに 2 つの配送オプションを追加し、それを HTTP ステータスとともに応答エンティティとして返します。 これらの配送オプションは、チェックアウト時に選択できるアクティブなオプションです。 各配送オプションには、 キー、 名前、 優先度、および 金額が必要です。