makotan _at_ gmail dot com

Javaからぶりを呼ぶ方法

Javaからぶりを呼びだすにはまず、ぶりに対してXPDLファイルの位置を教える必要があります。
buri2.diconにコメントアウトされたinitMethodでreadWorkFlowFromResourceを書いているところに似せてXPDLファイルを設定します。読み込ませるときの最初の引数はどういう名前でJavaからアクセスするかの名前です。
とりあえず、注文管理って言う名前で読み込ませたことにします。
#ちなみにUnitTestではreadWorkFlowFromResourceを直接使ったりしてテストしてます。
次にBaoのinterfaceを準備します。
とりあえず注文情報をあつかうBaoということで、OrderBaoをinterfaceとして作ります。

public interface OrderBao {
    public static String PROCESS = "注文管理.注文";
    
    public void order(OrderInfoDto dto);

    public static String cancel_ACTION = "cancel";
    public static String cancel_RESULT = "#cancelStatus";
    public String cancel(long orderID);
    
}

こんな感じ、
PROCESSはそのinterfaceがどのProcessを対象にしているかを示します。
cancelの所にあるACTIONはXPDL上で#actionとして扱われる情報です。RESULTは戻り値をOgnl式で表現したものです。
通常リンクのクリックのみみたいな情報はIDだけ受け渡せばOKのハズなのでcancelではOrderIDだけを引数として受け取るようになっています。
このOrderIDからDtoを作り出すためにCONVERTERを定義します

    public static BuriConvert CONVERTER[] = new BuriConvert[]{
        new BuriConvert(Long.class,"OrderInfoDao.getOrderInfo(#data)")
    };

これでLong型のデータであれば自動的にOrderInfoDao.getOrderInfo(#data)を実行してDtoを取得してそれをデータとして扱うようになります。
メソッド固有のコンバータも記述可能です(詳細はマニュアル参照)
ここまでで注文とcancelは処理可能になりました。
普通のアプリケーションでは注文中一覧の様にある状態の一覧を取得して表示する場合が非常に多いので、データの状態を取得するメソッドが必要になります。

    public static String getUnderWork_ACTIVITY = "出荷作業中";
    public List getUnderWork();
    
    public static String getEndShipping_ACTIVITY = "出荷終了";
    public List getEndShipping();

    public static String getOrderEnd_ACTIVITY = "終了";
    public List getOrderEnd();

    public static String getOrderCancelEnd_ACTIVITY = "キャンセル終了";
    public List getOrderCancelEnd();
    

データの状態を取得するメソッドは、List型を返すメソッドとして作ります。同時に、メソッド名_ACTIVITYの文字列にどの状態かを示すActivity名を定義します
これでフローへのデータのエントリーとデータの状態の取得が出来るようになります。
あとは注文後のフローの流れをこんな感じで作れば

    public void endShipping(long orderID);
    public void endBill(long orderID);

フロートデータの連係ができるようになります。
最後にこのBaoをdiconファイルに記述して、そのdiconファイル上でbao.diconをincludeしてbao.interceptorを記述すれば自動的にBaoがぶりを呼びだして処理するようになります。
これと同様にBaoをいくつか作ると完成です。フローの流れのテスト含めて出来るようになります。
次は複数フローの連携方法についての予感