SaaS BPM クエステトラのマスタデータをMySQLと同期:CData API Server連携

by 杉本和也 | September 23, 2020

こんにちは。CData Software Japanリードエンジニアの杉本です。

今回はクラウドベースのBPM クエステトラとCData API Serverを組み合わせて、クエステトラの選択肢マスタを同期させる方法を紹介したいと思います。

クエステトラ(Questetra BPM Suite)とは?

クラウドベースの業務プロセス管理システム (SaaS BPMS) です。

https://questetra.com/ja/

以下のような業務フロー図を描くように様々な業務アプリをローコードで作成できるのが特徴です。

また、外部連携用のAPIが公開されていたり

ワークフローの中で外部APIを呼び出す機能が搭載されていたりと、外部のサービス・アプリケーションと連携を柔軟に実現できる仕組みが提供されています。

ja.workflow-sample.net

実現するシナリオ

今回はクエステトラに備わっている外部APIとの連携機能を使って、MySQL(ローカル)に格納されているマスタデータをクエステトラのマスタデータ(選択肢マスタ)と同期させる方法を紹介したいと思います。

クエステトラはアプリ内部で独自に選択肢や選択肢マスタを持つことができますが、おそらく皆さんの環境ではローカルのRDBやCSVデータ、SalesforceやKintoneなどに最新の顧客マスタや商品マスタが管理されているのではないでしょうか。

そんな時にこのマスタ連携を実現することで、複数のマスタ管理の手間を削減することができます。

実現方法

まず前提として、クエステトラはWeb APIをリクエストする機能は存在するものの、RDBに直接接続できるわけではありません。

そのため、RDBのデータを扱うためには、まずRDBと接続されたWeb APIのインターフェースを開発・用意して、クエステトラがアクセスできるパブリックなネットワークにエンドポイントを公開する必要があります。

今回はそのボトルネックを CData API Serverを使って解消します。

https://jp.cdata.com/apiserver/

CData API Server を使うことで、プログラミングの必要なく、RDBやNoSQLなどのインターフェースからAPIを自動生成することが可能です。

また、CData API Server はCloud Gatewayという機能を使って、クラウド上のSSHサーバーを土台にしてインターネット上にAPIを公開することができます。これにより、オンプレミス上でFirewall を調整したり、DMZに配置するといったことを気にする必要がありません。

これらの機能でオンプレミスのMySQL からAPIを公開し、クエステトラのAPIリクエスト機能を使ってデータを取得、マスタデータを更新するアプリを実現します。

手順

それでは実際の手順を紹介していきます。

必要なもの

  • クエステトラアカウント
  • CData API Server
  • MySQL
  • AWS EC2
  • Windows マシン

API Server・クラウドゲートウェイの環境構築

まず、CData API Serverをダウンロードし、MySQLがインストールされているサーバーでセットアップします。

以下のURLからWindow版をインストールしてください。

https://jp.cdata.com/apiserver/download/

また、クラウドゲートウェイも構成していきますが、詳しくは以下の記事を参照してみてください。

https://jp.cdata.com/blog/apiservercloudgateway

最終的にAWS EC2のURLから CData API Serverの画面にアクセスできればOKです。

なお、対象のRDBやデータがクラウド上に存在する場合は、AWS EC2にそのままAPI Serverを構成するのもOKです。

MySQLの接続の追加

続いて、API Server でMySQLに接続されたAPIを構成していきます。

CData API Server にログインし「設定」→「接続」の画面に移動し、データソース一覧の中から「MySQL」を選択します。

あらかじめ設定したLocalhost MySQLの接続情報を入力し、テスト接続で接続状況を確認した上で、設定を保存しましょう。

次にリソースを追加するために「設定」→「リソース」へ移動し、「リソースを追加」をクリックします。

接続先の一覧から先程登録したMySQL接続を選択すると

対象のテーブル一覧が出てきます。ここから任意のテーブルを選択してリソースとして定義します。

ここでポイントです。今回は選択肢マスタとして扱う関係上、予め対象項目を絞り込んでおきます。

選択肢IDになるカラムを「Id」、表示ラベルになるカラムを「Label」としてエイリアスを定義しておきます。

また、利用できる操作はデータの取得のみのため、「GET」だけ指定しました。

APIページに移動すると、テーブルリソースが追加され、API Reference を確認できます。

実際にエンドポイントにアクセスしてみると、GETリクエストが実行されて、データを取得できました。

最後にAPIアクセス用のユーザーを作成し、準備は完了です。

クエステトラでアプリを作る

API Server 側の準備が整ったので、クエステトラ側でマスタデータを同期するアプリを作成していきましょう。

最終的には以下のようなワークフローのアプリを作成します。

アプリの作成にあたっては、以下のクエステトラさんのBlogを参考にしました。

support.questetra.com

また、私が作成したアプリのテンプレートは以下のURLで公開しています。

CData API Server MySQLマスタ連携_ver_editing.qar

まずアプリ管理画面に移動して「アプリ新規作成」をクリックし

任意の名称でアプリを作成します。

続いてAPIから取得したデータや最終的にマスタデータとして登録するための箱となるデータ項目を以下のように作成します。

項目名 フィールド名 データタイプ フォームタイプ
正常応答 q_string0 文字 複数行
エラー q_string1 文字 複数行
ID一覧 q_string2 文字 複数行
ラベル一覧 q_string3 文字 複数行
選択肢マスタデータ q_select4 選択 ラジオボタン

ポイントは選択肢マスタデータの元になる項目です。

データタイプ「選択」で作成し、選択肢種別を「文字列データ項目」にした後、IDとラベルを別途作成しておいた項目と紐付けます。

これがマスタデータとして登録する際の元の項目として利用できます。

次にフローを作成していきましょう。

フローは以下のように構成します。ポイントは赤枠で示している3点です。

10. メッセージ送信中間イベント (HTTP):APIに接続

一番最初にAPI Serverからデータを取得するための「10. メッセージ送信中間イベント (HTTP)」を構成します。

アクセスURLにはEC2で公開したAPI ServerのURLをベースとしたMySQLのマスタデータを取得するリソースを指定します。

GETリクエストで、正常レスポンスとエラーレスポンスをそれぞれ予め作成しておいたデータ項目に紐付けましょう。

ヘッダには認証方法としてBasic認証を指定します。こちらもAPI Serverであらかじめ作成したユーザーのID・PWを指定します。

16: スクリプトタスク:応答の解析

次にスクリプトタスクを使って、取得したJSONデータをアプリのデータ項目に格納する処理を記述します。

以下のようなJavaScriptベースのコードを利用できます。ここでは予め定義しておいた「ID一覧」と「ラベル一覧」の項目それぞれに改行区切り(\n)で値を格納していくという処理になっています。

今回はAPIのレスポンス構造をAPI Server側で定義してしまっているので、そのままコピーアンドペーストで使用できます。

var text = engine.findDataByNumber("0");
var result = JSON.parse(text); // JSON 解析

var ids = "";
var labels = "";
for (var i = 0; i < result.value.length; i++) {
  var record = result.value[i];
  ids += record.Id + "\n"; // ID 取得
  labels += record.Label + "\n"; // Label 取得
}

engine.setDataByNumber("2", ids);
engine.setDataByNumber("3", labels);

もしラベルなどを調整したい場合は、スクリプトを調整してください。

2: サービスタスク (選択肢マスタ更新):マスタ更新

最後に選択肢マスタを更新するイベントを配置します。選択肢マスタの更新は「2: サービスタスク (選択肢マスタ更新)」で実行できます。

元データとなる項目は予め定義しておいた「選択肢マスタデータ」の項目です。この項目は先程のスクリプトでデータを格納した「ID一覧」と「ラベル一覧」を参照する形で構成されています。

あとは作成する選択肢マスタの名前を指定すればOKです。

実行してみる

それでは、実際にアプリを動かしてみましょう。

アプリの管理画面から「プロセスのデバック実行」をクリックすることで、実際に動かしてみることができます。

一番最初は確認プロセスなので、そのまま処理を進めます。

処理を進めて、状態が取得結果確認のプロセスになったら、取得結果を確認してみましょう。

以下のように値が格納できていることが確認できます。

最後まで正常に完了したら、アプリ共有アドオンの選択肢マスタが作成されているか確認します。

データを見てみると、正常にMySQLからデータが取り込めていることが確認できました!

おわりに

このようにAPI ServerでAPIを公開することで、クラウドサービスから既存のRDBなどがとても使いやすくなります。

今回はMySQLを対象にしましたが、PostgreSQLやSQL Server、Oracleといったデータソースにも対応できます。

https://jp.cdata.com/apiserver/#databases

また、SalesforceやSharePointなどのクラウドサービスも、部分的にAPI Server経由でAPI公開することができ、通常は複雑なAPIリクエストが必要なクラウドサービスにも手軽にAPIアクセスできるようになります。

ぜひ、いろんなシチュエーションで試してみてください。