カスタム為替レートプロバイダーの実装
このチュートリアルでは、 ExchangeRateProvider インターフェイスを実装して、カスタム為替レートプロバイダーを追加する方法を示します。
為替レートプロバイダーは、データソースを使用して通貨間の為替計算を実行します。 Liferay Commerceでは、すぐに使える為替レートプロバイダー、 ECBExchangeRateProvider を提供しています。
概要
サンプルをデプロイする
このセクションでは、為替レートプロバイダーをLiferay Commerceのインスタンスで実行する例を示します。 新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.120-ga120。
http://localhost:8080でLiferayへのサインインします。 メールアドレス test@liferay.com とパスワード test を使用してください。 プロンプトが表示されたら、パスワードを learn に変更します。
次に、以下の手順に従います。
-
Acme Commerce Exchange Rate Provider をダウンロードし、解凍してください。
curl https://resources.learn.liferay.com/commerce/latest/ja/developer-guide/sales/liferay-f2y1.zip -O
liferay-f2y1.zipを解凍してください。
-
liferay-f2y1
に移動します。cd liferay-f2y1
-
サンプルをビルドしてデプロイします。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
noteこのコマンドは、デプロイされたjarをDockerコンテナの
/opt/liferay/osgi/modules
にコピーするのと同じです。 -
Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.f2y1.impl_1.0.0
-
サンプルの為替レートプロバイダーが追加されたことを確認します。 ブラウザで
https://localhost:8080
を開きます。 次に、アプリケーションメニュー()をクリックし、 [commerce] → [Currencies] に移動します。 新しい為替レートプロバイダー([f2y1])が、 [Exchange Rate Provide] ドロップダウンの下に表示されます。
Liferay Commerce 2.1以前のバージョンでは、[コントロールパネル] → [commerce] → [設定] → [Currencies] → [Exchange Rate]に移動して為替レートを検索します。 新しい為替レートプロバイダー([f2y1])が、[Exchange Rate Provider]ドロップダウンの下に表示されます。
これで、ExchangeRateProvider
を実装する新しい為替レートプロバイダーを正常に構築およびデプロイできました。
次に、詳細をさらに詳しく見ていきましょう。
サンプルの説明
このセクションでは、デプロイしたサンプルについて確認します。 最初に、OSGi登録用のクラスに注釈を付けます。 次に、ExchangeRateProvider
インターフェイスを確認します。 最後に、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 を参照してください。 F2Y1ExchangeRateProvider.java にアクセスして、
_getStaticExchangeRates
および_getRateForCode
を参照してください。2つの通貨に対し
CommerceCurrency
オブジェクトを使用して、通貨コードなどの必要な情報を取得します。CommerceCurrency
オブジェクトで使用できる他のメソッドについては、 CommerceCurrency.java と CommerceCurrencyModel.java を参照してください。
まとめ
ExchangeRateProvider
インターフェイスを実装するための基本を理解し、Liferay Commerceに新しい為替レートプロバイダーを追加しました。