Documentation

カスタム為替レートプロバイダーの実装

このチュートリアルでは、 ExchangeRateProvider インターフェイスを実装して、カスタム為替レートプロバイダーを追加する方法を示します。

為替レートプロバイダーは、データソースを使用して通貨間の為替計算を実行します。 Liferay Commerceでは、すぐに使える為替レートプロバイダー、 ECBExchangeRateProvider を提供しています。

すぐに使える為替レートプロバイダー

サンプルをデプロイする

このセクションでは、為替レートプロバイダーをLiferay Commerceのインスタンスで実行する例を示します。

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

docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.29-ga29。

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

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

  1. Acme Commerce Exchange Rate Provider をダウンロードし、解凍してください。

    curl https://learn.liferay.com/commerce/latest/ja/developer-guide/sales/liferay-f2y1.zip -O
    
    liferay-f2y1.zipを解凍してください。
    
  2. liferay-f2y1に移動します。

    cd liferay-f2y1
    
  3. サンプルをビルドしてデプロイします。

    ./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
    

    注釈

    このコマンドは、デプロイされたjarをDockerコンテナの/opt/liferay/osgi/modulesにコピーするのと同じです。

  4. Dockerコンテナコンソールでデプロイを確認します。

    STARTED com.acme.f2y1.impl_1.0.0
    
  5. サンプルの為替レートプロバイダーが追加されたことを確認します。 ブラウザでhttps://localhost:8080を開きます。 次に、アプリケーションメニュー(Applications Menu)をクリックし、 [コマース] → [Currencies] に移動します。 新しい為替レートプロバイダー([f2y1])が、 [Exchange Rate Provide] ドロップダウンの下に表示されます。

注釈

Liferay Commerce 2.1以前のバージョンでは、[コントロールパネル] → [コマース] → [設定] → [Currencies] → [Exchange Rate]に移動して為替レートを検索します。 新しい為替レートプロバイダー([f2y1])が、[Exchange Rate Provider]ドロップダウンの下に表示されます。

新しい為替レートプロバイダー

これで、ExchangeRateProviderを実装する新しい為替レートプロバイダーを正常に構築およびデプロイできました。

次に、詳細をさらに詳しく見ていきましょう。

サンプルの説明

このセクションでは、デプロイしたサンプルについて確認します。 最初に、OSGi登録用のクラスに注釈を付けます。 次に、ExchangeRateProviderインターフェイスを確認します。 最後に、ExchangeRateProviderの実装を完了します。

OSGi登録用のクラスに注釈を付ける

@Component(
    immediate = true, 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.javaCommerceCurrencyModel.java を参照してください。

まとめ

ExchangeRateProviderインターフェイスを実装するための基本を理解し、Liferay Commerceに新しい為替レートプロバイダーを追加しました。