クラウド型 ワークフロー

Questetra と Cacoo の連携プレー(その3)

Cacoo から成果物の図を、Questetra BPM Suite に取り込みます。

前回に引き続き、Questetra と Cacoo の連携についてです。一連の内容の最終回です。 Questetra BPM Suite には、複数人でタスクを処理することを意図した、チームタスクという機能を持っています。業務プロセス上の特定のチームタスクを Cacoo 上で行う、タスクの成果物として Cacoo 上で作成した図を Questetra BPM Suite に取り込むということを実現します。 「その1」「その2」で Cacoo 上に作業場となる図を新規作成し、Questetra BPM Suite のタスクの処理ユーザに対して案内するところまで実現しました。今回はQuestetra BPM Suiteでタスクを終了させた後、Cacoo 上で作成した図を、成果物として Questetra BPM Suite に自動的に取り込む部分について説明します。 qbpms-cacoo 今回はステップ5~8です。

5.メッセージ送信中間イベント (HTTP) から GAE を呼び出す

ステップ1でも使用していますが、メッセージ送信中間イベント (HTTP) は、Questetra BPM Suite から外部に対して HTTP リクエストを行う、自動処理機能です。Cacoo との処理を仲立ちするGAE のプログラムに対して、HTTP リクエストを送ります。その際、以下2つのパラメータを送ります。

  • processInstanceId: Questetra BPM Suite において、呼び出し元業務プロセスを示す ID。これが無いと、値の戻し先が解らない。ステップ8で使用。
  • diagramUrl: Cacoo から画像を取り込む対象の図を表す URL。ステップ2で作成し、ステップ4でQuestetra BPM Suite に取り込んだ URL。

6.Google App Engine 上で、次の Servlet に処理を引き渡す

GAE のプログラムを添付します。ステップ2と同じく、Apache Commons の Commons-Fileupload を使用してパラメータを解析します。解析したパラメータの値は、そのまま次の Servlet プログラムに引き渡します。図の画像を取り込む処理はあとに回します。次の Servlet プログラムへパラメータを引き渡す観点において、画像より 画像の URL の方が取り扱いが楽だからです。 次のServlet プログラムへの処理の引き渡しは、ステップ3と同じく、Google App Engine の「タスクキュー」の機能を利用します。いったん処理を完了して、別 Servlet に処理を引き渡す理由もステップ3と同じで、Questetra BPM Suite 上の業務プロセスを先に進ませるためです。

7.Cacoo から 画像を読み込む

ステップ7と8の GAE プログラムを添付します。以下が画像を読み込んでいる部分です。

URL url = new URL(diagramUrl + ".png");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
try {
  if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
    //画像読み込み
    try (InputStream input = conn.getInputStream()) {

Cacoo の API では、図の URL に “.png” とつけるだけで、PNG フォーマットで図を取得できます。本来は認証情報が必要なのですが、図のアクセスレベルをパブリックにしているので、認証情報無しで図を取得することができます。

8.画像を Questetra BPM Suite に渡す

ステップ8のプログラムは以下の部分です。今回はファイルを送信する必要があるので、multipart/form-data 形式で送信しています。multipart/form-data 形式のデータ作成には、Apache HttpComponents の HttpMime ライブラリを使用しています。またステップ4で使用した java.net.HttpURLConnection クラスを使用せず、GAE の低レベルAPIを使用しています。

URLFetchService service = URLFetchServiceFactory.getURLFetchService();

HTTPRequest request = new HTTPRequest(new URL(URL), HTTPMethod.POST);

Charset utf8 = Charset.forName("UTF-8");
MultipartEntity multipart = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, null, utf8);
multipart.addPart("key", new StringBody(KEY));
multipart.addPart("nodeNumber", new StringBody(NODE_NUMBER.toString()));
multipart.addPart("processInstanceId", new StringBody(processInstanceId));
multipart.addPart("data[1].upload", new InputStreamBody(input, "image/png", "test.png"));

ByteArrayOutputStream buffer = new ByteArrayOutputStream(256);
multipart.writeTo(buffer);
request.setPayload(buffer.toByteArray());
Header contentType = multipart.getContentType();
request.setHeader(new HTTPHeader(contentType.getName(), contentType.getValue()));
try {
  HTTPResponse response = service.fetch(request);

以上で Questetra BPM Suite と Cacoo の連携について完成です。かなり複雑で大変です。Google App Engine を介さずに、Questetra BPM Suite だけで同じこと、Cacoo との連携ができないかと考えています。 最後に、ブログにまったく関係ないですが、もうすぐ京都は祇園祭の山鉾巡行。以下はそこで使われる鉾(函谷鉾)を建設中の写真です。クエステトラは山鉾巡行をライブ中継します!特設ページはこちらです。

(7月10日:朝) 函谷鉾1 (7月11日:朝) 函谷鉾2
(7月11日:夜)
2013年7月11日夜
あわせて読みたい
15.野望・展望・志 の前の記事 BPMフォーラム2013 クエステトラ展示ブース編
15.野望・展望・志 の次の記事 電光掲示板で業務の状況をモニタリングする
Hatanaka Akihiro の他の記事 私、別れます。 インターネットエクスプローラーと。

アーカイブ

 RSS