LoginSignup
1
1

More than 1 year has passed since last update.

[intra-mart]IM-BPMのスクリプトタスクでの備忘録

Last updated at Posted at 2022-06-23

BPM変数の操作

BPM変数を追加、読み込み、更新、削除できます。
以下の様にスクリプトタスクのデフォルトの関数(run)の引数entityを使用します。

CRUD [intra-mart BPM スクリプトタスク]
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に変換して操作しました。

intra-mart BPM スクリプトタスク
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 email
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変数削除に関してはマジで見つけづらいと思います。
良いのか悪いのかも判断つけられないので、何かあったらコメントして教えてください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1