為替レートプロバイダーの実装
ExchangeRateProvider インターフェイスを実装して、カスタム為替レートプロバイダーを追加できます。
為替レートプロバイダーは、データソースを使用して通貨間の為替計算を実行します。 Liferay Commerce は、すぐに使用できる為替レートプロバイダーを 1 つ提供しています ECBExchangeRateProvider。

概要
サンプルをデプロイする
このセクションでは、Liferay Commerce のインスタンスでサンプルの為替レートプロバイダーを起動して実行します。
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.132-ga132
http://localhost:8080でLiferayにサインインします。 メールアドレス test@liferay.com とパスワード testを使用してください。 プロンプトが表示されたら、パスワードを learnに変更します。
次に、以下の手順に従います。
-
Acme Commerce Exchange Rate Providerをダウンロードして解凍します。
curl https://resources.learn.liferay.com/commerce/latest/en/developer-guide/sales/liferay-f2y1.zip -Ounzip liferay-f2y1.zip -
liferay-f2y1に移動します。cd liferay-f2y1 -
サンプルをビルドしてデプロイします。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注このコマンドは、デプロイされたjarをDockerコンテナ上の
/opt/liferay/osgi/modulesにコピーするのと同じです。 -
Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.f2y1.impl_1.0.0 -
サンプルの為替レートプロバイダーが追加されたことを確認します。 ブラウザで
https://localhost:8080を開きます。 次に、アプリケーション メニュー (
) をクリックし、 コマース → 通貨に移動します。 新しい為替レートプロバイダー (「f2y1」) が 為替レートプロバイダー ドロップダウンの下に表示されます。
Liferay Commerce 2.1 以前では、 コントロール パネル → コマース → 設定 → 通貨 → 為替レートに移動して為替レートを確認します。 新しい為替レートプロバイダー (「f2y1」) は、 為替レートプロバイダー ドロップダウンの下に表示されます。

これで、ExchangeRateProviderを実装する新しい為替レートプロバイダーを正常に構築およびデプロイできました。
次に、詳細をさらに詳しく見ていきましょう。
サンプルの説明
このセクションでは、デプロイした例を確認します。 まず、OSGi 登録用のクラスにアノテーションを付けます。 次に、 ExchangeRateProvider インターフェースを確認します。 3 番目に、 ExchangeRateProviderの実装を完了します。
OSGi登録用のクラスに注釈を付ける
@Component(
property = "commerce.exchange.provider.key=f2y1",
service = ExchangeRateProvider.class
)
public class F2Y1ExchangeRateProvider implements ExchangeRateProvider {
Liferay Commerce が新しい為替レートプロバイダーを 為替レートプロバイダーレジストリ内の他の為替レートプロバイダーと区別できるように、為替レートプロバイダーに固有のキーを提供することが重要です。 すでに使用されているキーを再利用すると、既存の関連付けられている為替レートプロバイダーが上書きされます。
ExchangeRateProviderインターフェイスを確認する
次のメソッドを実装します。
@Override
public BigDecimal getExchangeRate(
CommerceCurrency primaryCommerceCurrency,
CommerceCurrency secondaryCommerceCurrency)
throws Exception;
このメソッドは、通貨間の為替レートを計算するために呼び出されます。 レートに選択するデータソースは、Liferay Commerceのインスタンスで使用される可能性のある通貨を処理できる必要があります。
為替レートプロバイダーを完成させる
為替レートプロバイダーは、2つの通貨間の為替レートを計算するロジックで構成されています。 以下を行います。
為替レート計算ロジックを実装する
@Override
public BigDecimal getExchangeRate(
CommerceCurrency primaryCommerceCurrency,
CommerceCurrency secondaryCommerceCurrency)
throws Exception {
return new BigDecimal(
_getExchangeRate(secondaryCommerceCurrency) /
_getExchangeRate(primaryCommerceCurrency));
}
private Double _getExchangeRate(CommerceCurrency commerceCurrency) {
String code = StringUtil.toUpperCase(commerceCurrency.getCode());
return _exchangeRates.get(code);
}
private Map<String, Double_exchangeRates = new HashMap<String, Double>() {
{
put("AUD", 1.9454);
put("BRL", 5.15262);
put("CAD", 1.84981);
put("CHF", 1.36562);
put("CLP", 947.813);
put("CNY", 9.49073);
put("CZK", 31.0599);
put("DKK", 9.04642);
put("EUR", 1.21177);
put("GBP", 1.09733);
put("HKD", 10.9628);
put("HUF", 390.23);
put("IDR", 19698.8);
put("ILS", 5.12143);
put("INR", 98.562);
put("JPY", 150.862);
put("KRW", 1567.74);
put("MXN", 26.7972);
put("MYR", 5.72459);
put("NOK", 11.8138);
put("NZD", 2.05827);
put("PHP", 73.2097);
put("PKR", 194.073);
put("PLN", 5.22207);
put("RUB", 93.4562);
put("SEK", 12.4178);
put("SGD", 1.88797);
put("THB", 44.6128);
put("USD", 1.39777);
put("ZAR", 19.3996);
}
};
この例では、為替レートのマップを使用しています。 より実用的な使用例については、 ECBExchangeRateProvider、および liferay-f2y1.zip/f2y1-impl/src/main/java/com/acme/f2y1/internal/commerce/currency/utilの F2Y1ExchangeRateProvider.java クラスの _getStaticExchangeRates メソッドと _getRateForCode メソッドを参照してください。
2つの通貨に対しCommerceCurrencyオブジェクトを使用して、通貨コードなどの必要な情報を取得します。 CommerceCurrency オブジェクトで使用できるその他のメソッドについては、 CommerceCurrency.java および CommerceCurrencyModel.java を参照してください。
さいごに
ExchangeRateProviderインターフェイスを実装するための基本を理解し、Liferay Commerceに新しい為替レートプロバイダーを追加しました。