IM-BPM for Accel Platform プログラミングガイド 第8版 2020-12-01

3.2. サービスタスク

サービスタスクは、javaプログラムを指定して実行できます。
../../../_images/servicetask_1.png
図:サービスタスク

3.2.1. javaプログラム

javaプログラムにはいくつかの制約があります。

コラム

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式の結果を変数に登録できます。
  • タスクタイプを「式」に設定し、EL式を定義します。
  • 結果変数名に任意の文字列を設定します。
../../../_images/servicetask_2.png
図:サービスタスク
${variable1 + variable2}
暗黙オブジェクトとして、executionが存在するため下記のように変数を設定することも可能です。
${execution.setVariable('key', 'value')}

コラム

タスクタイプの設定や結果変数名の設定の詳細は「IM-BPM プロセスデザイナ 操作ガイド」 - 「サービスタスク」を参照してください。

3.2.3. エラーハンドリング

javaプログラムから jp.co.intra_mart.activiti.engine.delegate.BpmnError をスローすることで、以下のイベントを動作させることが可能です。
  • エラー境界イベントでキャッチする。
  • イベントサブプロセスのエラー開始イベントを開始する。
../../../_images/servicetask_3.png
図:エラー境界イベント
../../../_images/servicetask_4.png
図:エラー開始イベント

コラム

エラー境界イベント、エラー開始イベントの設定の詳細は「IM-BPM プロセスデザイナ 操作ガイド」 - 「エラー境界イベント」「エラー開始イベント」を参照してください。
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");
        }
    }
}