3.2. サービスタスク¶
サービスタスクは、javaプログラムを指定して実行できます。
3.2.1. javaプログラム¶
javaプログラムにはいくつかの制約があります。
jp.co.intra_mart.activiti.engine.delegate.JavaDelegate インタフェース、または、 jp.co.intra_mart.activiti.engine.impl.pvm.delegate.ActivityBehavior インタフェースを実装している必要があります。 デフォルトコンストラクタが存在しなければなりません。 サービスタスクにフィールドを設定した場合、そのフィールド名の jp.co.intra_mart.activiti.engine.delegate.Expression のクラス変数を宣言している必要があります。コラム
javaプログラムの設定やフィールドの設定の詳細は「IM-BPM プロセスデザイナ 操作ガイド」 - 「サービスタスク」を参照してください。package sample; import jp.co.intra_mart.activiti.engine.delegate.DelegateExecution; import jp.co.intra_mart.activiti.engine.delegate.Expression; import jp.co.intra_mart.activiti.engine.delegate.JavaDelegate; public class SampleJavaDelegate implements JavaDelegate { protected Expression param1; protected Expression param2; @Override public void execute(DelegateExecution execution) throws Exception { // 変数を取得する。 Object variable1 = execution.getVariable("variable1"); Object variable2 = execution.getVariable("variable2"); // 変数を更新する。変数が存在する場合は更新される。 execution.setVariable("variable1", ((int) variable1) + (Integer.parseInt((String) param1.getValue(execution)))); // 変数を追加する。変数が存在しない場合は追加される。 execution.setVariable("variable3", ((int) variable2) + (Integer.parseInt((String) param2.getValue(execution)))); } }
3.2.2. EL式¶
サービスタスクは、EL式の結果を変数に登録できます。
暗黙オブジェクトとして、executionが存在するため下記のように変数を設定することも可能です。
${execution.setVariable('key', 'value')}コラム
タスクタイプの設定や結果変数名の設定の詳細は「IM-BPM プロセスデザイナ 操作ガイド」 - 「サービスタスク」を参照してください。
3.2.3. エラーハンドリング¶
javaプログラムから jp.co.intra_mart.activiti.engine.delegate.BpmnError をスローすることで、以下のイベントを動作させることが可能です。
エラー境界イベントでキャッチする。 イベントサブプロセスのエラー開始イベントを開始する。図:エラー境界イベント図:エラー開始イベントコラム
package sample; import jp.co.intra_mart.activiti.engine.delegate.DelegateExecution; import jp.co.intra_mart.activiti.engine.delegate.JavaDelegate; import jp.co.intra_mart.activiti.engine.delegate.BpmnError; public class SampleJavaDelegate implements JavaDelegate { @Override public void execute(DelegateExecution execution) throws Exception { try { ... } catch (Exception e) { // エラーイベントに設定しているエラーコードを指定し、BpmnErrorをスローする。 throw new BpmnError("error_code"); } } }