makotan _at_ gmail dot com

中途裏亞流

ハマチを作る前に考える事・・・そ〜れ〜は〜
どこにハマチを使うか
これがもっとも大事です(笑)
ハマチの用途の広さから考えれば一瞬どこにでも使えそうな気がするものの・・・ある程度の方向性が開発前から存在してます。

  1. 利用者がフローイメージを持っている場合
  2. フローで処理した方が便利なとき
  3. 単純な機能であってもあとから追加要求が出そうなところ

これらに対してハマチは効果覿面になるようにデザインされてます。すなわちバウンダリ層が要求するサービスでダイコンが提供するほぼすべてに対して適用可能です。
これを総合すると、仕様変更の強い味方(笑)
具体的な作業手順は・・・
将来の仕様変更に備えて使いたい場合はハマチAOP対応版であれば普通に作ってAOPで後から組み込めばいいので普通のS2の作り方でOKです。
フローが書ける部分を探します。フローが書ける部分については手書きでフローを描いてさくっと顧客確認しましょう。
#逆に顧客確認できない部分はハマチを使わないって事
次にJaWEにフローを記述していきます。
JaWEは一つのフローの固まりをProcessと表現しているので新規のファイルを作って、Processを配置してpropertyでプログラムから呼ぶために名前を変えます。
まず、そのフローに関係有る参加者を定義します。

  • フローの詳細を記述します。

次にフローに参加者を割り当てます
参加者自身がスタートさせる時にはSマークのアイコンを置いていきます。
次に開始させる為のActivity(活動)を配置します。
Activityは3種類使用可能です
まずGenericActivity:これはS2のコンポーネントを呼び出して実行可能です
つぎRuteActivity:単純にComponent呼び出しがないだけです
BlockActivity:ネストしたActivityです。一つのフローをここに書く事が可能です。再利用は出来ません
これらのActivityを選択してフローを描いていきます
#Tips:連続して同じ操作をする場合はツールバーをダブルクリックすると良い事が起きます
フローを描くときに各Activityに名前を付けましょう。可能な限りユニークに命名すると良いですが、基本方針は・・・

  1. 少なくとも参加者単位ではユニークになる事
  2. 外から呼び出す予定のないActivityはどうでも良い(w
  3. 名前は判りやすく付けましょう

Activityに名前を付けていくと同時に、実行を止めたい(orそこから実行したい)ActivityのStartModeをManualに変更しておきます。Automaticにするとそこは自動的に処理されて次へ進みます。
Activityを実行するときの引数等をここらあたりまでに決めましょう!
それぞれの矢印に条件を割り当てていきます。矢印の条件式はOGNLで書けます。引数の値を使ったり、参加者の情報を使ったりComponentが設定したあたいを使ったりと自由に変更が出来ます。
条件に一致しなかったときの分岐も書けます。
複数の線に同時に分岐するときはXORをANDに変更してください。
これをXPDLファイルに保存するとOKですが、保存時などにメッセージがでる事があります。これは論理的なエラーチェックをしているのでメッセージをきちんと見て理解して対処してください。
#大抵はしょーもないミスです
イメージを他のファイルで使いたい等の場合はJpeg/SVGで保存も出来ます
保存したらJaWEを終了するか、他のファイルを開いてください。JaWEは保存時点ではXMLで保存しない悪い癖があるので、エラーメッセージがでます。
できあがったXPDLファイルはクラスパス上に置いてプログラムが読み込めるようにdiconファイルに指定してください

  • サンプル

プログラムの基本パターンはあんな感じです

  • サンプル

ここのプロセスの名前は最初のProcessの名前と同じです。実行するとActivityもActivityを指定したときの名前を使えます。
結果はActivityResultで帰ってくるのでそれを好きに調理してください。
Activityの実行経路、次に実行すると宣言したActivityなど出来る限り返すようにしてあります。
BlockActivityを使っている場合、BlockActivityの中にあるActivityを実行する事があるので、その場合は名前をドットでつないで"BlockA.ChildA"みたいにしてください
これはActivityResultを使った方が簡単に正確に取得出来ます。

  • Processの継続のために・・・

一旦フロー処理から抜けて再度フロー処理をしたい場合はContextのみ再現する事が可能になっています。
methodは・・・
この引数にActivityResultのを使ってMapを取得して設定してください。Contextの内容のみ引き継いで実行を継続出来ます
#引数等は新しいのが設定されます