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

製品 API - 複数の SKU を持つ製品の作成

製品 API または製品アプリケーションを使用して、複数のアクティブな SKU を持つ製品を作成できます。 このような製品を作成するには、まず オプション API またはオプション アプリケーションを使用してオプション テンプレートを作成し、オプションの値を用意する必要があります。 オプション アプリケーションから値を追加することも、 オプション値 APIを使用することもできます。

製品の「オプション」タブからオプション テンプレートを作成することもできます。 ただし、ここで追加される値は製品固有のものであり、グローバル メニュー (Applications Menu icon) → コマース → オプションの下にあるオプション テンプレートには追加されません。

複数のSKUを持つ製品の追加

新しいLiferay DXPインスタンスを起動し、以下を実行します。

docker run -it -m 8g -p 8080:8080 liferay/dxp:2025.q1.6-lts

メールアドレス test@liferay.com とパスワード testを使用して、 http://localhost:8080 で Liferay にサインインします。 プロンプトが表示されたら、パスワードを learnに変更します。

次に、次の手順に従います。

  1. 製品 API - 複数の SKU を持つ製品の追加をダウンロードして解凍します。

    curl https://resources.learn.liferay.com/commerce/latest/en/product-management/developer-guide/liferay-q8t5.zip -O
    
    unzip liferay-q8t5.zip
    
  2. 製品はカタログにスコープされ、カタログ ID は必須パラメータの 1 つです。 複数のアクティブな SKU を持つには、製品にオプションも必要です。 オプション テンプレートを作成して、複数の製品で再利用することができます。 オプション テンプレートを製品にリンクするには、オプション ID が必要です。

    カタログ ID を取得するには、 グローバル メニュー (Applications Menu icon) を開き、 コマースカタログに移動します。 製品を追加するカタログを選択し、その名前の横にある ID をメモします。

    オプション ID を取得するには、 グローバル メニュー (Applications Menu icon) を開き、 コマースオプションに移動します。 製品にリンクするオプションを選択し、その名前の横にある ID をメモします。

    重要

    この例では、 Able という名前で作成されたオプション テンプレートに、 BakerCharlieという 2 つの値が含まれていることを前提としています。

  3. cURL スクリプトを使用して、複数の SKU を持つ新しい製品をカタログに追加します。 コマンドラインで、curlフォルダに移動します。 カタログ ID とオプション ID をパラメータとして、 Products_POST_ToCatalog.sh スクリプトを実行します。

    ./Products_POST_ToCatalog.sh 1234 5678
    

    JSON 応答には、複数の SKU を持つ新しい製品が追加されたことが示されています。

    {
       "actions" : {
          "get" : {
             "method" : "GET",
             "href" : "http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/products/46860"
          },
          "update" : {
             "method" : "PATCH",
             "href" : "http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/products/46860"
          },
          "delete" : {
             "method" : "DELETE",
             "href" : "http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/products/46860"
          }
       },
       "active" : true,
       "catalogId" : 1234,
       "categories" : [ ],
       "createDate" : "2023-06-09T11:32:27Z",
       "customFields" : [ ],
       "description" : {
          "en_US" : ""
       },
       "displayDate" : "2023-06-09T11:32:00Z",
       "expando" : { },
       "externalReferenceCode" : "82462cc8-1af3-0d14-30f2-d47b38946cf2",
       "id" : 46860,
       "metaDescription" : {
          "en_US" : ""
       },
       "metaKeyword" : {
          "en_US" : ""
       },
       "metaTitle" : {
          "en_US" : ""
       },
       "modifiedDate" : "2023-06-09T11:32:27Z",
       "name" : {
          "en_US" : "Foo"
       },
       "productAccountGroupFilter" : false,
       "productChannelFilter" : false,
       "productId" : 46861,
       "productStatus" : 0,
       "productType" : "simple",
       "productTypeI18n" : "Simple",
       "shortDescription" : {
          "en_US" : ""
       },
       "skuFormatted" : "(Multiple SKUs)",
       "tags" : [ ],
       "thumbnail" : "/o/commerce-media/default/?groupId=43744",
       "urls" : {
          "en_US" : "foo"
       },
       "version" : 1,
       "workflowStatusInfo" : {
          "code" : 0,
          "label" : "approved",
          "label_i18n" : "Approved"
       }
    }
    

    skuFormatted フィールドに、複数の SKU が作成されたことを確認する (複数の SKU) が表示されることに注意してください。

  4. これを確認するには、 グローバル メニュー (Applications Menu icon) を開き、 コマース製品に移動します。 リンクされた製品オプションを表示するには、 オプション タブをクリックします。 SKU タブをクリックすると、承認済みステータスの新しい SKU が 2 つ表示されます。

    複数の SKU を持つ新しい製品が追加されたことを確認します。

  5. Java クライアントを使用して REST サービスを呼び出すこともできます。 curl フォルダから、 java フォルダに移動します。 ソースファイルをコンパイルします。

    javac -classpath .:* *.java
    
  6. Products_POST_ToCatalog クラスを実行します。 catalogIdoptionId を適切な値に置き換えます。

    java -classpath .:* -DcatalogId=1234 -DoptionId=5678 Products_POST_ToCatalog
    

cURLコマンドの検証

Products_POST_ToCatalog.sh スクリプトは、cURL コマンドを使用して REST サービスを呼び出します。

curl \
	"http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/products" \
	--data-raw '
		{
			"active": true,
			"catalogId": "'"${1}"'",
			"name": {
				"en_US": "Foo"
			},
			"productOptions": [
				{
					"fieldType": "select",
					"key": "able",
					"name": {
						"en_US": "Able"
					},
					"optionId": "'"${2}"'",
					"required": true,
					"skuContributor": true
				}
			],
			"productType": "simple",
			"skus": [
				{
					"published": true,
					"purchasable": true,
					"sku": "SKU-01",
					"skuOptions": [
						{
							"key": "able",
							"value": "Baker"
						}
					]
				},
				{
					"published": true,
					"purchasable": true,
					"sku": "SKU-02",
					"skuOptions": [
						{
							"key": "able",
							"value": "Charlie"
						}
					]
				}
			]
		}' \
	--header "Content-Type: application/json" \
	--request "POST" \
	--user "test@liferay.com:learn"

ここでは、コマンドの引数を紹介します。

引数説明
-H "Content-Type: application/json"リクエストボディのフォーマットがJSONであることを示します。
-X POST指定されたエンドポイントで起動するHTTPメソッド
"http://localhost:8080/o/headless-commerce-admin-catalog/v1.0/products"RESTサービスのエンドポイント
-d "{\"active\": true, \"catalogId\": \"${1}\", \"name\": {\"en_US\": \"Foo\"}, \"productOptions\": [{\"fieldType\": \"select\", \"key\": \"able\", \"name\": {\"en_US\": \"Able\"}, \"optionId\": \"${2}\", \"required\": true, \"skuContributor\": true}], \"productType\": \"simple\", \"skus\": [{\"published\": true, \"purchasable\": true, \"sku\": \"SKU-01\", \"skuOptions\": [{\"key\": \"able\", \"value\": \"Baker\"}]}, {\"published\": true, \"purchasable\": true, \"sku\": \"SKU-02\", \"skuOptions\": [{\"key\": \"able\", \"value\": \"Charlie\"}]}]}"投稿するデータ
-u "test@liferay.com:learn"基本的な認証情報

ここでは、デモのために基本的な認証を使用しています。 本番環境では、 OAuth2経由でユーザーを認証する必要があります。 OAuth2 を利用するサンプル React アプリケーションについては、 OAuth2 を使用してユーザーを承認する を参照してください。

Javaクラスを調べる

Products_POST_ToCatalog.java クラスは、製品関連のサービスを呼び出して、複数の SKU を持つ製品を追加します。

public static void main(String[] args) throws Exception {
	ProductResource.Builder builder = ProductResource.builder();

	ProductResource productResource = builder.authentication(
		"test@liferay.com", "learn"
	).build();

	System.out.println(
		productResource.postProduct(
			new Product() {
				{
					active = true;
					catalogId = Long.valueOf(
						System.getProperty("catalogId"));
					name = new HashMap<String, String>() {
						{
							put("en_US", "Foo");
						}
					};
					productOptions = new ProductOption[] {
						new ProductOption() {
							{
								fieldType = "select";
								key = "able";
								name = new HashMap<String, String>() {
									{
										put("en_US", "Able");
									}
								};
								optionId = Long.valueOf(
									System.getProperty("optionId"));
								required = true;
								skuContributor = true;
							}
						}
					};
					productType = "simple";
					skus = new Sku[] {
						new Sku() {
							{
								published = true;
								purchasable = true;
								sku = "SKU-01";
								skuOptions = new SkuOption[] {
									new SkuOption() {
										{
											key = "able";
											value = "Baker";
										}
									}
								};
							}
						},
						new Sku() {
							{
								published = true;
								purchasable = true;
								sku = "SKU-02";
								skuOptions = new SkuOption[] {
									new SkuOption() {
										{
											key = "able";
											value = "Charlie";
										}
									}
								};
							}
						}
					};
				}
			}));
}

このクラスは、次の3行のコードのみを使用してRESTサービスを呼び出します。

行(省略形)説明
ProductResource.Builder builder = ...ProductResource サービスインスタンスを生成するための Builder を取得します。
ProductResource productResource = builder.authentication(...).build();基本認証を指定し、 ProductResourceサービスインスタンスを生成します。
productResource.postProduct(...);productResource.postProductメソッドを呼び出し、データをpostに渡します。

プロジェクトには、依存関係としてcom.liferay.headless.commerce.admin.catalog.client.jarファイルが含まれていることに注意してください。 すべてのRESTアプリケーションのクライアントJAR依存関係情報は、/o/apiでインストール先のAPIエクスプローラーで確認できます。

メイン メソッドのコメントは、クラスの実行を示しています。

ペイロードの確認

これは、2 つのアクティブな SKU を持つ 1 つの製品を作成するために使用されるサンプルのペイロードです。

{
   "active": true,
   "catalogId": 1234,
   "name": {
     "en_US": "Foo"
   },
   "productOptions":[
      {
         "fieldType": "select",
         "key": "able",
         "name": {
            "en_US": "Able"
         },
         "optionId": 5678,
         "required": true,
         "skuContributor": true
      }
   ],
   "productType": "simple",
   "skus": [
      {
         "published": true,
         "purchasable": true,
         "sku": "SKU-01",
         "skuOptions":[{
            "key": "able",
            "value": "Baker"
         }]
      },
      {
         "published": true,
         "purchasable": true,
         "sku": "SKU-02",
         "skuOptions":[{
            "key": "able",
            "value": "Charlie"
         }]
      }
   ]
}

JSON には合計 6 つのフィールドがあります。

項目説明
active製品の表示を変更するには、true または false に設定します。
catalogId製品のカタログの ID。
name製品の名前。
productOptionsさまざまな製品オプション。 ProductOptionを参照してください
productType製品のタイプ (シンプル、グループ化、仮想、またはダイアグラム)。
skus製品 SKU の配列。 SKUを参照

productOptions フィールドには、製品にリンクされているオプションに関する情報が含まれています。

項目説明
fieldTypeオプション フィールドのタイプ。 次のいずれかになります "テキスト""選択""ラジオ""複数チェックボックス""日付""数値"、または "チェックボックス"
keyオプションのキー。
nameオプションの名前。
optionIdオプションの ID。
requiredtrue の場合、チェックアウトする前にオプションを選択する必要があります。
skuContributortrue の場合、各オプションは SKU にリンクされます。 複数の SKU を持つ製品の場合、これは必須です。

skus フィールドには、製品の SKU に関する情報が含まれています。

項目説明
publishedtrue の場合、SKU がストアフロントに表示されます。
purchasabletrue の場合、SKU は購入可能です。
skuSKU の名前。
skuOptionsSKU オプションの配列。 SkuOptionを参照してください。 キー はオプション テンプレートのキーであり、 はオプションの値の 1 つを指定します。

skuOptions 内の キーoptionIdoptionValueIdに置き換えることができます。