はじめに
現在、IT業界ではSOAに注目が集められており、ビジネスプロセスの記述言語としてBPMが主に使用されています。そのためのツールとして、AquaLogic BPM Studioが有名です。一方、スクリプト言語であるRubyが注目を浴びており、エンタープライズ領域にRuby on Railsが適用されてきています。
このような背景の中、BPM Studioで定義したモデルや画面を、Ruby on Railsなど他のフレームワークのアプリケーションへ変換したいといった要求が出てきています。その要求に対応するために本稿では、AquaLogic BPM Studioで作成したBPM Object変数定義とRoR scaffoldを連携させることにより、BPMからRoRのマスタメンテナンスアプリケーションを自動生成する方法に関して説明し、AquaLogic BPM StudioとRuby on Railsの連携に関する検討の第一段階としてお役に立てていただければと思います。
対象読者
- Rubyプログラマー
- SOAに興味のあるSEやSEマネージャ
必要な環境
本稿が対象とする開発環境は、次のとおりです。
- Ruby 1.86以降
- Ruby on Rails 2.0.0以降
- AquaLogic BPM Studio 6.0.3の評価版
(リンク先ページ下部、「Oracle Business Process Management Studio 6.0 MP4」よりダウンロード可能)
完成図
解説内容
図1に示されるように、AquaLogic BPM Studioで設計したBPMNに関連する変数定義を使用して、最終的にメンテナンスアプリケーションを自動生成します。AquaLogic BPM Studioで作成した変数定義は、XCDLファイルに格納されています。XCDLファイルのエレメントに変数が定義されており、このエレメントを解析することで、マイグレーションファイルとデータアクセスクラスを生成することができます。この生成を行うプログラムをBPM Scaffoldと呼びます。
生成されたマイグレーションファイルを使用してマイグレーションを実行し、エレメントで定義した変数を格納するテーブルをデータベース上に作成します。ConditionScaffoldでBPM Scaffoldで作成したデータアクセスクラスを読み込み、そのデータアクセスクラスが繋がっているテーブルをメンテナンスするアプリケーションを作成します。
- まず、BPM Scaffoldでエレメントを解析する方法に関して説明します。
- 次に、マイグレーションの実行に関して説明します。
- 最後に、ConditionScaffoldでメンテナンスアプリケーションを自動生成する方法に関して説明します。
BPM Scaffoldによるファイルの生成
BPM Scaffoldは図2に示されるように、doc配下のxcdlファイルを一覧で表示します。一覧で表示された中の一つをクリックすることでbpm_migrationが起動され、マイグレーションファイルとデータアクセスが生成されます。ここではまず、doc配下のxcdlファイルを一覧で表示する方法を説明します。次に、bpm_migrationの起動方法に関して、最後に、bpm_migrationのソースコードに関して、解説していきます。
doc配下のxcdlファイルの一覧表示
下記のコードにより、doc配下のxcdlファイルを一覧表示します。
<div class="title" style="margin-bottom: 10px;"> <h2>AquaLogic BPM Scaffold</h2> </div> <p> AquaLogic BPM Scaffold とは、AquaLogic BPM Studioで作成したプレゼンテーション画面を 構成する XCDL ファイルを解析し、migrate ファイルと model クラスを生成するためのものです。 </p> <p> このプログラムでは、「#{RAILS_ROOT}/doc/」の配下に AquaLogic BPM Studio で作成した プロジェクトがあると仮定しています。 </p> <ul> <% require "find" Find.find("#{RAILS_ROOT}/doc") { |path| element = path.split("/") model_name = element.pop if model_name =~ /.xcdl/ %> <li> <%= link_to "#{path}", :action=>'generate', :path=>"#{path}" %> </li> <% end %> <% } %> </ul>
Find.find
により「#{RAILS_ROOT}/doc」ディレクトリ配下のファイルを読み込みます。- 「
=~
」のパターンマッチングにより、拡張子がxcdlになっているかを確認し、そうであればlink_to
によりリンクを生成します。