目的
Cloud IntegrationのiFlowで、複数箇所で使用し、かつ環境によって変わらないパラメータを管理したい場合、Value Mappingを使うことができます。
※環境によって変わる値を管理した場合は、以下のブログを参照
本ブログでは、パラメータを一元管理する方法としてValue Mappingを紹介します。
Value Mappingとは
連携元と連携先の機関(Agency)で、コード値のマッピングを定義するためのオブジェクトです。
これを流用して、固定値を管理するために使用されることがあります。
Value Mappingを定義してiFlowで使用するステップ
1. Value Mappingを登録
Agencyを登録します。共通パラメータの管理用なので、片方はGlobal、もう片方はValueとしました。Identifierはkey、valueとします。これで、どちらがキーでどちらが値を格納する側かが明確になります。

以上で保存し、デプロイします。
2. iFlowでValue Mappingを取得
以下のようなシンプルなiFlowを作成し、Groovy ScriptでValue Mappingから値を取得します。

Value Mappingから値を取得する関数getMappedValueは引数が5つもあってわかりづらいので、ローカル関数を定義し、キーを渡すだけで値を取れるようにします。これで複数の固定値を取得する場合にやりやすくなります。
import com.sap.gateway.ip.core.customdev.util.Message
import com.sap.it.api.ITApiFactory
import com.sap.it.api.mapping.ValueMappingApi
// ローカル関数として定義
String getConfig(String key, String sourceAgency = 'Global', String targetAgency = 'Value') {
def api = ITApiFactory.getApi(ValueMappingApi.class, null)
return api.getMappedValue(sourceAgency, 'key', key, targetAgency, 'value')
}
def Message processData(Message message) {
def folderName = getConfig('folderName')
def paymentMethod = getConfig('paymentMethod')
message.setProperty('folderName', folderName)
message.setProperty('paymentMethod', paymentMethod)
return message
}
iFlowをシミュレーションで実行し、Value Mappingで定義した値が取得できることを確認しました。

Value Mappingは移送で上書きされるか
以下のステップで、Value Mappingを移送したときの動作を確認しました。結論としては、Value Mappingは移送で上書きされます。
- 別のテナントにExport, Importでプロジェクトを移送
- 移送先の環境でValue Mappingの値を更新
- プロジェクトを再インポート
1. 別のテナントにExport, Importでプロジェクトを移送
2. 移送先の環境でValue Mappingの値を更新
変更ボタンをクリックすると「変更すると以降の更新が反映されなくなる」という警告が出ますが、続行します。

この警告は、標準のインテグレーションパッケージの動作に関するものであり、パッケージの移送を行なった場合には上書きされるという動きでした。
folderNameの値をoutbound2に変更し、保存します。

アーティファクトの一覧で、ステータスが"Modified"に変わります。

3. プロジェクトを再インポート
インポートする際に同名のパッケージが存在するため警告が出ますが、続行します。

Value Mappingのステータスが"Unmodified"に戻っています。

Value MappingをiFlowと同じパッケージに含めると移送で上書きされてしまいますが、独立したパッケージとして、初期移送のあとは各環境でメンテナンスする運用にすれば、上書きの心配はなくなります。





