BPM変数の操作
BPM変数を追加、読み込み、更新、削除できます。
以下の様にスクリプトタスクのデフォルトの関数(run)の引数entity
を使用します。
function run (variables, execution, entity) {
// create
entity.setVariable("variable_name", "value");
// read
entity.getVariable("variable_name");
// update
entity.setVariable("varialbe_name", "update_value");
// delete
enttiy.removeVariable("variable_name");
}
entity
の中には様々な関数が入っています。
entityの中身については以下のリンクに書かれていると思います。
IM-BPM変数削除処理(removeVariable())を探すのに手間取ったので今回の記事を書きました。
サンプルとかでBPM変数を削除しているコードは見たことない。。
variablesにもBPM変数の情報が入っているようなのですが、使い分け方がわかりません。
BPM変数の日付型について
BPM変数には日付型があります。この日付型はJavaの日付型
でした。
なので、JavaScriptのnew Date()
ではsetVariable()する時に日付型で登録できませんでした。(serializable)ってなる。
そのため、どうにかしてJavaの日付型の日付をsetVariable()する必要があります。
intra-martのスクリプトタスクでは標準Javaクラスが呼び出せました。
標準Javaクラスとの連携方法
実際に標準Javaクラスを呼び出してBPM変数として登録するコードが以下になります。これで日付型となりました。
function run (variables, execution, entity) {
// new Date()ではなく java.util.Date()を使う
entity.setVariable("runDate", new java.util.Date());
}
Java標準クラスの日付を扱うにあたって
Dateのドキュメントを見るとgetMonth()などが非推奨になっています。
代わりにCalendarを使えとなっていますが、よくわからんでした。
せっかくのスクリプトタスクなので、スクリプトタスク内で操作する時は
JavaScriptのDateに変換して操作しました。
function run (variables, execution, entity) {
// runDateには日付型(Javaの)が入っている。
let runDate = entity.getVariable("runDate");
// runDateをミリ秒で取得してjsのDateに変換
let jsDate = new Date(runDate.getTime());
// これでgetMonthとか使える
Debug.print(jsDate.getMonth());
}
これが悪いのか良いのか分からないですができます。
imuiListTableのデータを扱う
ユーザタスクに設定した画面にlistTableがあるときのお話です。
listTableのデータについてもJavaの標準クラスを使用する必要があります。
以下のようなリストテーブルのデータを作るとき
id | name | |
---|---|---|
1 | unko | unko@example.com |
2 | test | test@example.com |
データとしては以下のようなデータを渡せばよいのですが、
JSで作った連想配列?オブジェクト?を渡してもうまく動きませんでした。
[
{
id: 1,
name: "unko",
email: "unko@example.com"
},
{
id: 2,
name: "test",
email: "test@example.com"
}
]
なので、スクリプトタスク内で標準Javaクラスを使用して作ります。
// [] の部分
let arr = new java.util.ArrayList();
// {}の部分
let map = new java.util.HashMap();
// 1行目のデータを作成
map.put("id", 1);
map.put("name", "unko");
map.put("email", "unko@example.com")
// データを入れた{}を配列に追加する
arr.add(map)
...省略
このarrを渡せばうまくデータが表示されるようになっているはず。
最後に
こんなの絶対躓くと思ったので書きました。特にBPM変数削除に関してはマジで見つけづらいと思います。
良いのか悪いのかも判断つけられないので、何かあったらコメントして教えてください。