選択型データ項目は、登録されているリストから選択する形で入力できるデータ項目です。登録されているリストが、例えば「社員情報」であれば、個々の社員には氏名の他にメールアドレスや所属チームといった情報が付帯していることがあります。

本記事では、選択型(検索セレクト)データ項目で選択指定すると選択肢に関連する情報が他のデータ項目に自動でセットされる仕組みについて考察します。

具体的には、

  • 処理担当者が選択型データ項目で社員を指定する
  • 指定された社員の[メールアドレス][氏名][チーム名]がそれぞれ文字型データ項目にデータが自動入力される

といった動作を実現します。

Questetra Advanced エディションで実現する場合

選択型データ項目は[表示ラベル]と[選択肢ID]の2つの項目を持ちます。しかし「氏名」に対して「メールアドレス」「所属チーム」のように複数の項目がある場合は、外部(例えば Google スプレッドシート)にそれらの情報を保存して利用する方法が考えられます。

具体的な実現方法は「Google スプレッドシートの社員情報をワークフローアプリで管理する」の「社員取得/更新」のフローを参照してください。

この記事のアプリでは、ビルトイン自動工程[Google スプレッドシート: 行取得]が使用されています。自動工程の「取得した行のデータを列ごとにデータ項目を指定して保存する」機能を利用して[メールアドレス][氏名][チーム名]の各データ項目に値がセットされるようになっています。

ただし、取得対象の社員を選択して、[メールアドレス][氏名][チーム名]に値がセットされるには次のヒューマン工程[確認/編集]まで待つことになります。

なお、スプレッドシートの列を追加すれば、「電話番号」や「住所」などの情報も登録できます。また、社員情報に限らず顧客情報や備品の貸出記録など、スプレッドシートで管理している情報であれば幅広く応用できます。

  • 1回の [Google スプレッドシート: 行取得]工程の実行で最大10項目(列)まで自動セットできます
  • 11項目以上の場合は自動工程を複数個設置して取得項目を別けてください

Questetra Professional エディションで実現する場合

Professional エディションでは、データ項目の設定で[説明]欄に<script>タグを指定できます。ここで、処理フォーム上でデータ項目に値が自動セットされるようにスクリプトを記述します。

Questetra Form JavaScript API

Questetra BPM Suite バージョン 13.2(2021年10月)より、Questetra Form JavaScript API が公開され利用できるようになりました。

Form JavaScript API は、タスク処理画面で動作します。スクリプトでは以下の動作を実現するForm JavaScript API を呼び出します。

  • 処理担当者が選択型データ項目で選択肢を指定すると作動
  • 指定された選択肢の表示ラベルを解析
  • 解析した文字列をそれぞれの文字型データ項目にセット

前述の「Google スプレッドシートの社員情報をワークフローアプリで管理する」で作成したサンプルアプリにスクリプトを設置して自動入力を実現します。

このアプリでは

  • 「チーム名 / 氏名 /メールアドレス」という表示ラベルを持つ選択肢マスタが作成されている
  • [社員マスタ(参照用)]データ項目で上記の選択肢マスタが参照されている
  • [メールアドレス][氏名][チーム名]の文字型データ項目がある

となっています。

このアプリのタスク処理画面で処理担当者が社員を選択した瞬間に、スクリプトによって[メールアドレス][氏名][チーム名]に値がセットされるようになります。

Form JavaScript API の設定

設定を入力する場所

スクリプトを設定するのは、データ項目設定画面にある[説明]欄です。対象となるタスク処理画面で[編集可]となっているデータ項目、あるいは[表示のみ]となっているガイドパネル型データ項目であれば、いずれのデータ項目に設定しても同じ動作をします。

サンプルアプリでは[社員マスタ(参照用)](選択型、検索セレクト)の[説明]欄に設定することにします。

設定内容

[説明]欄に以下のコードを記述します。

<script>
function user_qbpmsFormSet() {
  const choice = qbpms.form.get("q_staff");
  let displayLabel = choice[0].display ;
  let info = displayLabel.split(" / ") ;
  qbpms.form.set("q_staff_team", info[0]) ;
  qbpms.form.set("q_staff_name", info[1]) ;
  qbpms.form.set("q_staff_email", info[2]) ;
}

qbpms.form.on('change', 'q_staff', user_qbpmsFormSet);
</script>

各行について説明します。

function user_qbpmsFormSet() {  

イベントが発火したときに動作する関数(function)の名前を定義します。ワークフロー基盤で定義されているものと区別するために user_ から始まる名称が推奨されています。

choice = qbpms.form.get("q_staff");

変数 choice を定義し、内容に q_staff ([社員マスタ(参照用)])で選択された選択肢を指定します。

 displayLabel = choice[0].display ;

変数 displayLabel を定義し、内容に choice の[表示ラベル]を指定します。[0] は最初に選択された選択肢を指定するためで、選択型のデータが対象の場合に必要となります。

info = displayLabel.split(" / ") ;

変数 info を定義し、内容は displayLabel を ” / ” で分割したものです。[表示ラベル]は、チーム名 / 氏名 /メールアドレス となっているので、それぞれに分割します。”/” の前後にスペースが入っているので、区切り文字にスペースを含めることで配列からスペースを除去しています。

qbpms.form.set("q_staff_team", info[0]) ;
qbpms.form.set("q_staff_name", info[1]) ;
qbpms.form.set("q_staff_email", info[2]) ;

q_staff_team([チーム名]文字型)、q_staff_name([氏名]文字型)、q_staff_email([メールアドレス]文字型)の各データ項目に info の配列をそれぞれセットします。

qbpms.form.on('change', 'q_staff', user_qbpmsFormSet);

イベントハンドラを登録します。[社員マスタ(参照用)](q_staff )で選択が行われる(change イベントが発火)と定義された処理(user_qbpmsFormSet)が実行される、という内容になっています。

[社員番号]に関して、今回利用したサンプルアプリで利用している選択肢マスタで扱っていなかったので自動セットの対象としませんでした。選択肢マスタに登録するようにすれば、その他の情報も自動セットできるようになります。


このように、ご利用のエディションによって方法は異なりますが、処理フォームでの自動入力が実現できます。

自動入力は工程の作業者の労力を軽減し、作業効率の向上につながります。ぜひ、導入をご検討ください。

%d人のブロガーが「いいね」をつけました。