
こんにちは。
今回は、簡単な JavaScript の実装についてお話します。
「メールを受け取ってメールの内容を元に業務を開始したい!」というご要望を良く聞きます。
[メッセージ開始イベント(メール)] で実現が可能です!

Questetra BPM Suite ユーザでは、比較的良く知られた機能です。
Questetra BPM Suite 以外のシステムからのメールを取り込めばシステム連携が簡単に実装できます。
「味気の無いメールを受け取って他のシステムへコピー&ペーストする」
なんていうつまらない作業からおさらばすることができます。
でも、Questetra BPM Suite ユーザからは
「基幹システムから受注通知メールを Questetra BPM Suite に自動的に取り込んで処理してる。便利なんだけど、メールの本文から顧客名とか受注金額とか何個も入力フォームにコピペするのがすごく面倒だ!なんとかならんか?」
なんて声も耳にします。
「なんとか」できます!
定型フォーマットなら比較的簡単な 「スクリプトタスク」で実現すればイイんです!
◆メール本文例
顧客名:鈴木商事
2019年5月4日に改装が完了しますので仕様に沿って 図面の作成をお願いします。
納期は、2018年12月20日までです。
—
株式会社クエステトラ(Questetra, Inc.)
山田太郎(Tarou YAMADA) <yamada@example.com>
支社名:京都支店
グループ名:工事担当グループ
メール本文が、
- 「顧客名:」のタイトル文字列に続いて顧客名がセットされている
- 「支店名:」のタイトル文字列に続いて支店名がセットされている
- 「グループ名:」のタイトル文字列に続いてグループ名がセットされている
という定型フォーマットの場合、タイトル文字列を探して後ろの文字列を取得し、プロセスデータ項目のフォームにセットすれば良いのです。
◆スクリプトタスク実装例
var text = engine.findDataByNumber("17");
text = text.replace("\r\n", "\n");
var sep = ":";
var line = new Array();
line = new String(text).split("\n");
var customerName = "";
var branchName = "";
var groupName = "";
// 「依頼内容」を1行づつ解析してプロセスデータ項目にセット
for(var i=0; i < line.length; i=i+1){
var pos = line[i].indexOf(sep);
var dat = line[i].slice(pos+sep.length);
if (line[i].slice(0,pos)=="顧客名"){
customerName = dat;
}
if (line[i].slice(0,pos)=="支社名"){
branchName = dat;
}
if (line[i].slice(0,pos)=="グループ名"){
groupName = dat;
}
}
engine.setDataByNumber("15",customerName);
engine.setDataByNumber("12",branchName);
engine.setDataByNumber("11",groupName);
プロセスデータ項目から取得したデータを文字列として扱う為に5行目のように
line = new String(text).split("\n");
明示的に文字列型のオブジェクトに変換する必要があります。(要注意!)

比較的容易ではないですか?スクリプトタスクで使用できるオブジェクトやメソッドはマニュアル(M230 自動工程 業務データの複雑なデータ加工が自動実行されるように設定する)に記載していますので参照の上、実装してください。
「スクリプトタスク」でもっともっと Questetra BPM Suite のご利用範囲が増えると幸いです!