【TIPS】IBM webMethods Integrationのワークフローでループ処理の組み方!!
投稿者:Hiroshi Hirama
こんにちは。
私たちIntegrationチームはシステム/アプリケーションを統合するソリューションエンジニアであり、API、メッセージ・データ、ファイルを使った様々なデータソースやアプリケーションの統合において、製品の選定から設計・構築、そして導入後のサポートを行っております。
このBlogでは、webMethods Integrationのワークフローでループ処理を実装するためのノウハウを共有します。
webMethods Integrationでシステム連携のロジックを実装するときにワークフロー/フローサービスのいずれかを選択、あるいは組み合わせますが、ループ処理の利用を検討したときに直観的に実装しやすいフローサービスを選ぶことが多いように思えます。そのせいか、ワークフローでループ処理を実装する方法を知らない方も多いんじゃないかと思っています。
個人的になぜかな?と思って、考えたときにループ内外で扱うデータを格納する変数とスコープの関係、それらの扱い方が原因かなと考えたので、このBlogで組み方を紹介したいと思います。
webMethods Integrationのweb型フローデザイナーは非常に使いやすいローコードツールですが、ワークフローでループ処理を組む時に、Loopノードはすぐに見つかりますが、変数を格納するノードを発見することができません。(なぜならば、MulesoftのSet Variableみたいなわかりやすい名称になっていないためです。)
webMethods Integrationでは、データを格納する変数として使えるノードは、名称は少し変わっており、「データストア」となっています。
そして、データストアには次の通り、3つのタイプがあります。
| タイプ | 用途 |
|---|---|
| アカウントストア | Integrationのテナント内の全てのプロジェクト、ワークフローでデータを共有する場合に利用するデータストア |
| フローストア | 特定のワークフロー内でデータを共有する場合に利用するデータストア |
| メモリーストア | 一過性のデータの格納・参照に利用するデータストア(キュー近い特性であり、一般的な変数と同じように扱うことは難しい) |
いずれのタイプのデータストアも、Key-Value方式でデータを扱うため、共通で次のメソッド「Get、Set、GetAll、Delete」がサポートしています。
データストアの説明を終えたところで、具体的なシナリオに基づきループ処理の実装を紹介していきます。
● 多重データ登録防止処理の実装
今回、新規のレコードを登録するにあたり、登録済みレコードを参照・比較して、同じレコードが観測されない場合に限り、レコードをデータストアへ登録するワークフローの実装を見ていきます。
今回の例では、複数のワークスペースでレコードを共有するためアカウントストアにデータを保管し、比較状態の管理用にフローストアを使っています。
– 今回のワークフローで扱うデータレコード:
{
"id": "駐車場ID",
"name": "駐車場名",
"address": "駐車場住所",
"country": "国",
"state": "都道府県",
"vehicle_type": ⇐ 駐車可能車種
[
"EV",
"Luxury"
],
"number_of_unit": "台数"
}
レコードを登録するワークフローを以下に示します。

★学びポイント
データストアに対するメソッド「GET/GETDataALL」は、その時のデータを変数に格納します。
このため、メソッド「Set/Delete」で更新した後の状態が必要な場合、今回の例のように改めて取得しなおす必要があります。
続いて、「RunWorkflow」ノードの中身を説明します。
「RunWorkflow」ノードでは、駐車場IDに基づきレコードの存在有無を回答するワークフローを呼び出しており、存在しない場合はステータスコード「404」、存在している場合は「200」を応答します。

最後に、Loop処理の中身を説明します。

以上、IBM webMethods Integrationのワークフローでループ処理の組み方について説明しました。
次回は、MCPに関するテーマをお届けしていきます。