

スクリプトタスクでは、ケース上のデータ項目(業務データ)をスクリプトから自由に読み書きできます。この記事では、データ項目への基本的なアクセス方法をサンプルコードとともに解説します。
スクリプトの実行環境
スクリプトタスクのスクリプトは EcmaScript(JavaScript)をベースとしていますが、ブラウザではなくワークフローエンジン上で実行されます。
documentやfetchなどのブラウザ固有 API は利用できませんjava.math.BigDecimalやjava.util.ArrayListなど、エンジンが提供する Java クラスをスクリプト内で直接使えます
各データ型のメソッド詳細・全データ型のサンプルについては、リファレンス「R2301: スクリプトタスクでのデータ取得/更新」を参照してください。
データ項目を「参照」するには
engine.findDataByVarName() を使うのが最もわかりやすい方法です。引数には、データ項目に設定した フィールド名 を指定します。
const value = engine.findDataByVarName("フィールド名");フィールド名のルール
フィールド名は必ず q_ で始まり、それ以降は半角英数字とアンダースコア(_)だけが使えます(例:q_amount、q_item_name)。日本語やハイフン、記号などは使えません。
フィールド名のかわりに、日本語のデータ項目名や定義番号でも指定できます。
const value = engine.findDataByName("データ項目名"); // データ項目名(日本語可)
const value = engine.findDataByNumber("3"); // データ項目番号(文字列)
const value = engine.findDataByNumber(3); // データ項目番号(数値)どれを使えばいい?
フィールド名は設計者が自分でつける識別子なので、わかりやすい名前をつけておけばコードが読みやすくなります。データ項目番号は変わりませんが可読性が下がります。チームの運用に合わせて選択してください。
参考:フィールド名と同名の変数で直接参照できる
フィールド名が設定されたデータ項目は、同名の変数としてそのままスクリプト内で参照 できます。engine.findDataByVarName() を呼ばずに済むので、短く書きたい場合に便利です。
// engine.findDataByVarName("q_customer") と等価
const text = q_customer;ただし、これは 参照のみ です。次のように代入してもローカル変数を書き換えるだけで、データ項目は更新されません。
q_customer = "新しい値"; // ← データ項目は更新されない!(よくある間違い)データ項目を更新したい場合は、必ず後述の engine.setDataByVarName() などを使ってください。
データ項目を「更新」するには
engine.setDataByVarName() を使います。第1引数にフィールド名、第2引数に設定する値を指定します。
engine.setDataByVarName("フィールド名", 値);同様に、データ項目名や定義番号でも指定できます。
engine.setDataByName("データ項目名", 値);
engine.setDataByNumber(3, 値);データ型によって扱い方が変わる
第2引数に渡す「値」の形式は、データ項目のデータ型によって異なります。単純な文字列が使える型もあれば、特定の Java クラスのオブジェクトが必要な型もあります。
文字型(よく使うので覚えておこう)
取得値の型:java.lang.String
設定値の型:java.lang.String
// 参照
const text = engine.findDataByVarName("q_summary");
// 更新
engine.setDataByVarName("q_summary", "新しい内容");
engine.setDataByVarName("q_memo", "1行目\n2行目"); // 複数行は \n で改行数値型
取得値の型:java.math.BigDecimal
設定値の型:java.math.BigDecimal
// 参照
const amount = engine.findDataByVarName("q_amount"); // BigDecimal で取得される
// 更新
engine.setDataByVarName("q_amount", new java.math.BigDecimal(1000));
engine.setDataByVarName("q_price", new java.math.BigDecimal("9.99")); // 小数はString指定が安全選択型(チェックボックス・セレクト)
取得値の型:com.questetra.bpms.core.event.scripttask.ItemView の java.util.List
設定値の型:選択肢の値(String)の java.util.List
// 参照
const items = engine.findDataByVarName("q_category");
for (let i = 0; i < items.size(); i++) {
const item = items.get(i);
// item.getValue() → 選択肢の値(例:"JP")
// item.getDisplay() → 選択肢の表示ラベル(例:"日本")
}
// 更新(複数選択の場合)
const selected = new java.util.ArrayList();
selected.add("JP");
selected.add("US");
engine.setDataByVarName("q_category", selected);
// 更新(単一選択の場合も ArrayList で)
const single = new java.util.ArrayList();
single.add("JP");
engine.setDataByVarName("q_country", single);他のデータ型(日付型・日時型・ファイル型・ユーザ型・組織型・テーブル型など)のサンプルは R2301 を参照してください。
件名はアクセス方法が異なる
ケースの 件名 は特別なデータ項目であり、他のデータ項目のように engine.findDataByVarName() や engine.setDataByVarName() ではアクセスできません。件名の参照・更新には、processInstance オブジェクトの専用メソッドを使います。
// 参照
const title = processInstance.getProcessInstanceTitle();
// 更新
processInstance.setProcessInstanceTitle("新しい件名");更新できないケース属性・データ型がある
件名を除き、他のケース属性(ケースID・ケース連番・開始日時など)は参照のみ可能で、スクリプトから更新することはできません。
また、次のデータ型はスクリプトからアクセスできません(参照・更新とも不可)。
- 掲示板型
- ガイドパネル型
実践例:複数のデータ項目を組み合わせて使う
品名(文字型)・単価(数値型)・数量(数値型)を読み取り、合計金額を計算して備考欄(文字型)に書き込む例です。
// 各データ項目を取得
const itemName = engine.findDataByVarName("q_item_name"); // 文字型
const unitPrice = engine.findDataByVarName("q_unit_price"); // 数値型
const quantity = engine.findDataByVarName("q_quantity"); // 数値型
// 必須でないデータ項目は型に関わらず未入力の場合 null になる
if (itemName === null || unitPrice === null || quantity === null) {
throw new Error("品名・単価・数量のいずれかが未入力です");
}
// 合計金額を計算(BigDecimal の multiply を使う)
const total = unitPrice.multiply(quantity);
// 数値を桁区切り付きの文字列に整形(例:1,000.00)
const formatter = new java.text.DecimalFormat("#,##0.00");
const totalText = formatter.format(total);
// 結果を文字型の備考欄に書き込む
const summary = itemName + ":" + totalText + " 円";
>engine.setDataByVarName("q_memo", summary);ポイントをまとめると、文字型はそのまま文字列として扱えますが、数値型は java.math.BigDecimal オブジェクトとして取得されるため、文字列に変換する際は java.text.DecimalFormat を使うのが便利です。桁区切りや小数桁数を制御でき、丸め処理も内部で行われます。また、必須でないデータ項目はデータ型に関わらず未入力の場合 null になるため、値を使う前に null チェックを入れるのが安全です。
シンプルに変換するだけなら
桁区切りなどの整形が不要なら、BigDecimal#toPlainString() で素の文字列(例:1000 や 9.99)に変換することもできます。
関連リファレンス
- R2301: スクリプトタスクでのデータ取得/更新 — 全データ型のメソッドとサンプルコードの一覧
- R2300: スクリプトタスクで利用できる Java クラス — engine オブジェクト以外のクラス(quserDao など)の一



