makotan _at_ gmail dot com

xpdlの作り方

作る対象は

顧客が注文します。
注文は即出荷作業へ移り ※出荷作業中
出荷商品がすべて準備完了したとき請求処理に入ります。 ※出荷終了
この時点で顧客は注文の取り消しが出来なくなります。
請求処理をした後、入金確認した地点で注文は終了になります。※終了
顧客はいつでも注文の状態を知ることが出来ます。

これです。Goyaの手順に沿って作業を進めればプログラミングの直前でERDと業務フローはあるはずなので、既にERDと業務フローが存在していることを前提に進めます。
まずは準備としてDaoとDaoの入ったdiconファイルを準備。s2buriから使うためにDaoには必ず名前を付けてください。
JaWEで新規にXPDLを作ります。JaWEで新規にXPDLを作るとIDを聞かれるのでここは適当に付けます。デフォルトではそのファイル名で保存しようとします。
プロセスの作成は必ず1種類のデータ(Dto)に対して一つのプロセスを割り当てるようにします。
注文のエントリーと状態の管理の為のProcessを作成します。
次に出荷に関する状態の管理のためのProcessを作成します。
出荷する商品を個別に管理するためのProcessを作成します。
最後は請求に関する状態管理のためのProcessを作成します。
次に、このXPDLでの登場人物をXPDLに保存します。
PackageのParticipantsでNewをしてNameに登場人物の種類(顧客とか出荷担当者とか)を設定します。このフローではTypeをRoleにします
注文のProcessでは顧客が注文をすると、出荷作業中になり、出荷すると出荷終了、入金が確認すると終了になるような流れを作ります
更に顧客は出荷作業中にはcancelが可能なので注文をcancelのフローを出荷作業中に作り、出荷終了してからはcancelできないので注文cancelがエラーになったことを設定します。
それぞれの状態として扱いたいところと、フローの最後のActivityのFinish modeをManualに変更します。これで注文したときは出荷作業中へ自動的に移動して停止します。
#これで大雑把な注文のフローは完成
このままでは出荷作業中の次の状態が複数ある為に注文cancelかどうかの識別が出来ないので出荷作業中から出荷終了の矢印のCondignのExpressionには「#action==null」を、出荷作業中からcancelへの矢印のCondignのExpressionには「#action=="cancel"」を定義します。
同様に出荷終了から終了への矢印のCondignのExpressionには「#action==null」を、出荷終了から注文cancelエラーの矢印のCondignのExpressionには「#action=="cancel"」を定義します。
これだけだとcancelに成功したのか失敗したのか不明なのでcancelの結果を戻せるように設定しましょう
まず、注文Processの画面を閉じてPackageのApplicationsでNewしてNameにOgnlInvokerと設定します。ここで意味不明でももう一つAfterOgnlInvokerも作ってしまいましょう。
#この二つは普通に使うはずだから
もう一回注文Processの画面を開いて、注文cancelが成功したときのActivityを開いてToolsタブに切り替えてNewしてApplicationからOgnlInvokerを選択、その画面にあるExtended attributesのところでNewしてNameに「ognl」をValueに「#cancelStatus ="success"」を設定します。
これでCancelしたときの戻り値として#cancelStatusを見れば成功か失敗か判ります
同様に注文のcancelが失敗したときには「#cancelStatus ="NG"」を記述しておきます。
これで注文フローの設計がほぼ終わりました。
注文データを渡して注文フローを流すためにはデータの処理方法をぶりに教える必要があります。
PackageのWorkflow relevant dataを表示して、Newします。IDにDtoの名前をPackage名付きで入れます。
Extended attributesには
name=pkey
value=「主キーのプロパティー名」,「有効なデータがあることを判定する式」
orderTitleID,orderTitleID != 0
name=insert
value=「Ognl式でデータをInsertする方法」
OrderInfoDao.insert(#data)
name=update
value=「Ognl式でデータをUpdateする方法」
OrderInfoDao.update(#data)
name=select
value=「Ognl式でデータを取得する方法」
OrderInfoDao.getOrderInfo(#data.orderTitleID)
name=slectMany
value=「Ognl式でIDのListから複数のデータを取得する方法」
name=findMany
value=「Ognl式でIDのListと条件のDtoから複数のデータを取得する方法」
という記述をします、ちなみに後ろの二つはオプションです
insert等の場合には#dataで呼びだしたときのデータを処理できます。
詳細はマニュアルを参照してください
これでぶりは渡されたデータを認識して状態の情報と共に保存等の処理を行います
あとのフローもこの調子でどんどん書いていくとXPDLの準備はとりあえず終わりです。
次はJavaからぶりを呼びだす方法へ進む予感