3.XPDLを読み解く〜Process編〜
前回の続き。今回はProcessの中身を見ていきます。
フロー定義
JaWEでFurnitureManagement.xpdlファイルを開いたときに最初に出てくる青い四角形がProcessです。これを右クリックして、「Edit」を選択するとこんな画面が出てきます。
矢印と四角形がならんでます。フロー定義ですね〜。
では、表示されているものを1つ1つ見ていきますか。
まず、目立つ色をしているのがStartとEnd。これはフローの開始点と終了点を表してますね。
そしてStartとEndの間に灰色の四角形がずらずらと並んでます。この四角形が、フロー中の1ステップにあたる模様。JaWE(っていうかXPDL?)ではこれをActivityと呼んでます。UMLのActivity図のActivityね。そういやこの図って一見Activity図とほとんど一緒ね。縦横が違うくらい。ま、どっちも図の役割が同じようなもんだから、似て当然か。
さて、Activityの中身へ。「備品登録」Activityを右クリックして「Property」を選択すると、詳細を見ることが出来ます。中身が書いてあるGeneralタブとPostconditionタブだけイメージ貼っておきます。
Generalタブのほうは、IDとか名前とかが載ってます。そして、Postconditionの方には、「利用中」ところから考えて、次に実行するActivity書いてるんだろなー……と考えて、他のActivityを覗くと……、やっぱり。「利用中」Activityの場合は、「期間終了」。「期間終了」Activityの場合は「償却期間終了」「リース終了」の2つが載ってます。この「期間終了」ActivityのPostconditionタブの部分は他とは違って、下のConditionのところに記述があります。これは、分岐の条件を表してるっぽいですね。2つの遷移先と条件を並べてみると、こうなってます。
遷移 | 条件 |
---|---|
期間終了→償却期間終了 | #data.isBuying == true |
期間終了→リース終了 | #data.isLease == true |
isBuying、isLeaseというのはメソッドぽい名前。そこでソースを「isBuying」で検索してみると……、FurnitureItemDto.javaがヒット!もちろん?isLeaseメソッドもこのクラスにありました。このFurnitureItemDtoってのは前回Workflow relevant dataのところで出てきたクラス。Workflow relevant dataのところに書いたオブジェクトは、「#data」と書くと参照できるっていうことかな?ま、そのへんはそのうち分かるか……。
この分岐しているものを除けば、他のActivityはみんな名前と遷移先が違うだけ……、かと思ったんですがよく見たら他にも違いを発見。「General」タブで、finish modeがautomaticのものとmanualのもの2種類ありました。分類はこうなってます。
- automatic
- 備品登録
- 期間終了
- 廃棄処分済み
- 返却済み
- manual
- 利用中
- 償却期間終了
- リース終了
これはどういう違いかというと……。推測ですが、automaticのものは、フローがそのActivityに到達したら自動的に次のActivityに遷移してしまうもの、manualのほうは、自動的には遷移せず待ち状態に移るものかな?完全にあてずっぽうで語幹だけでの憶測(;・∀・)。ま、真実はいずれ解き明かされよう。
さて、その他のActivityはみんな一緒なのでスルーかな……、と思ったら。あとは、フローを囲ってる部分をまだ見てなかったので、そっちをみてみる。一番左に「備品管理担当 - rol」と書かれてます。これは前回出てきた、Participantsで定義されていたやつですね。この例だとParticipantsが1つしかないですが、複数ある場合はこの下に追加されていくようです。やっぱりActivity図と一緒。スイムレーンってやつですね。
フロー以外の定義
これでProcessのところに定義されている内容のうち主立ったものは一通り説明終了?一応確認のためにXPDLの中身をざざっとみると……。2つほど抜けがあるのを発見。やれやれ。
まず1つめはこんなの。
<DataFields> <DataField Id="java.lang.Long" IsArray="FALSE"> <DataType> <BasicType Type="STRING"/> </DataType> <ExtendedAttributes> <ExtendedAttribute Name="preprocess" Value="FurnitureItemDao.getFurnitureItem(#data)"/> </ExtendedAttributes> </DataField> </DataFields>
JaWE内をうろついてたら、Processの方から「Workflow relevant data」のプロパティを開いたところに載ってるのを発見。このProcess独自に定義されたデータってところ?んー、Packageの方に書いた場合との違いは何なのかしら……。って、これが分かんないのは、そもそもPackageとProcessの関係をちゃんと理解してないからだな。調べておこう……。
で、話を戻して、抜けてたもう一つはこんなの。
<Implementation> <Tool Id="FurnitureManagement_App1" Type="APPLICATION"> <ExtendedAttributes> <ExtendedAttribute Name="ognl" Value="InnerContext InnerContext.UserContext BuriDataDaoUtil #callPath //#data = BuriDataDaoUtil.getDtoFromDataKey(#callPath)"/> </ExtendedAttributes> </Tool> </Implementation>
これはBuriとか書いてあるので、JaWEが自動生成したわけじゃなく、明らかに手で打った情報だと思われる……。でも、どこにもJaWEで各種プロパティ見てみても、該当箇所は出てこないなぁ……。謎。チュートリアルでも一言も触れられてないし……。そのうち分かるのかしら。
これでJaWE使ってXPDLの中身をなめ回した結果は以上。次回からはこれを実際に動かしてみますか〜。