スクリプトタスク

機能概要

プロセスにおいて、システムが処理する自動工程を表します。
ECMAスクリプトを使用して、業務データ(各データ項目に保持されている値)を編集します。

現在、ベータ(Beta)機能として提供しています。
ベータ(Beta)機能に関する注意点は、「このマニュアルについて」-「ベータ(Beta)機能について」を参照してください。
アプリ管理権限を持つユーザが対象です。
ECMAスクリプトおよびJavaの使用経験者を対象としています。

機能一覧

ワークフロー図 ワークフロー図の作成を行います。
スイムレーンや各ノードを配置し、フローを作成して、作業の順序を定義します。
ヒューマンタスク プロセスにおいて、処理担当者が作業する手動工程を表します。
プロセス実行時に、データを入力するフォーム(タスク処理画面)が表示されます。
データ更新 プロセスにおいて、システムが処理する自動工程を表します。
数値型、日付型/日時型、文字型、選択型データ項目に、動的な値や演算結果を代入します。
PDF ファイル生成 プロセスにおいて、システムが処理する自動工程を表します。
業務データ(各データ項目に保持されている値)を埋め込んだPDF帳票を生成します。
選択肢マスタ更新 プロセスにおいて、システムが処理する自動工程を表します。
指定の選択型データ項目の内容を、アプリ共有アドオンまたはアドオンの[選択型データ項目で使用する選択肢マスタ]として更新します。
スクリプトタスク プロセスにおいて、システムが処理する自動工程を表します。
ECMAスクリプトを使用して、業務データ(各データ項目に保持されている値)を編集します。
受信タスク
(フォーム)
プロセスにおいて、システムが処理する自動工程を表します。
アカウントを持たないユーザに対して、プロセスの途中での入力フォームを提供します。
メッセージ開始イベント(フォーム)を使用してユーザにWeb入力フォームを提供したあとに、メールによる本人確認を経て、詳細情報を入力するようなWeb入力フォームを表示します。
受信タスク
(Webhook)
プロセスにおいて、システムが処理する自動工程を表します。
外部サービス側のWebhook通知の受信まで待機し、受信後にトークンが進みます。
サービスタスク
(アドオン)
プロセスにおいて、システムが処理する自動工程を表します。
ユーザ独自定義の自動処理タスクを実行します。
タイマー開始イベント プロセスにおいて、システムが処理する自動工程を表します。
設定した日時にプロセスを自動的に開始します。
タイマー中間イベント プロセスにおいて、システムが処理する自動工程を表します。
指定した日時まで待機し、指定日時を経過するとトークンが進みます。
メッセージ開始・
受信中間イベント(HTTP)
プロセスにおいて、システムが処理する自動工程を表します。
メッセージ開始イベント(HTTP): 外部システムまたはDataSpider BPMの他のプロセスから受け取ったメッセージをもとにプロセスを開始します。
メッセージ受信中間イベント(HTTP): プロセスの実行途中で、外部システムまたはDataSpider BPMの他のプロセスから受け取ったメッセージをもとにデータを入力できます。
メッセージ開始イベント
(フォーム)
プロセスにおいて、システムが処理する自動工程を表します。
Webページの入力フォームから受け取ったメッセージをもとにプロセスを開始します。
入力フォームは、データ項目のレイアウトをWebページに埋め込んで使用します。
メッセージ開始イベント
(Webhook)
プロセスにおいて、システムが処理する自動工程を表します。
外部サービス側のWebhook通知の受信を起点とし、プロセスを自動的に開始します。
メッセージ送信中間イベント
(HTTP)
プロセスにおいて、システムが処理する自動工程を表します。
指定したURLに、HTTPリクエストを送信します。
外部システムまたはDataSpider BPMの他のプロセスへのデータ送信が可能となります。
メッセージ送信中間イベント
(メール)
プロセスにおいて、システムが処理する自動工程を表します。
設定した内容でメールを送信します。
送信先は任意に設定できます。
メール本文に、データ項目の入力内容を埋め込むことができます。
メッセージ送信中間イベント
(DataSpider Servista)
プロセスにおいて、システムが処理する自動工程を表します。
指定したDataSpider Servistaのスクリプトを実行することができます。
イベントの実行時には、DataSpider BPM側のデータ項目の値を、DataSpider Servista側で定義されている入力変数へ渡すことができます。
スクリプト終了時には、DataSpider Servista側で定義されている出力変数の値を、DataSpider BPM側のデータ項目の値として受け取ることができます。
スクリプトの実行結果(結果の戻り値:ExitStatusおよびエラー内容)を受け取り、その後のタスクや条件分岐処理等で使用することができます。
分岐 ワークフロー図に分岐がある場合、分岐・遷移先の設定を行います。

項目説明

項目名 必須 説明
工程名 任意 タスクの名称を入力します。
メモ 任意 タスクの注意点や目的などに関するメモを入力します。
処理失敗時に、
トークンをエラー境界イベントに移動
任意 処理が失敗した際のフローを定義したい場合は、有効にします。
有効にした場合は、タスクの下部にエラー境界イベントが表示されます。
必須データ項目の
値をクリアすることを
許可する
任意 チェックを入れた場合、[必須]として設定したデータ項目に保持されている値を空(未入力)の状態にすることができます。
スクリプトエンジン 必須 スクリプトの実行エンジン(JavaScriptエンジン)を選択します。
  • GraalJS デフォルト
DataSpider BPM 2.6.1では、「GraalJS」のみとなります。
スクリプト 必須 スクリプトを記述する入力フィールドです。

操作メニュー説明

表示 操作メニュー 説明
[ヘルプ]アイコン このマニュアルページを表示します。
[プロセスログ]アイコン この工程に関するプロセスログを表示します。
[この工程のみデバッグ]ボタン 以下のワークフローが自動で作成され、この工程のみのデバッグプロセスを開始します。
  • 「開始イベント」→「ヒューマンタスク」→「デバッグ対象工程」→「終了イベント」
「デバッグ対象工程」の実行に必要なテストデータを入力するための、[テストデータを入力]という工程名が付いた「ヒューマンタスク」が用意されます。
[適用して閉じる]ボタン 設定した値を適用して、スクリプトタスクのプロパティ設定ダイアログを閉じます。
[適用する]ボタン 設定した値を適用します。
[キャンセル]ボタン 設定した値を適用せずに、スクリプトタスクのプロパティ設定ダイアログを閉じます。

仕様制限

基本仕様

前提条件

記述したスクリプトは、「JavaScriptエンジン」によって処理されます。
DataSpider BPMに搭載されているJavaScriptエンジン(GraalJS)は、一般的なJavaScriptクラスと一部のJavaクラスを使用することができます。

使用可能なJavaクラス

以下に記載されているJavaクラス以外は使用することができません。
クラス メソッド メソッド説明
com.questetra.bpms.core.event.scripttask.WorkflowEngine
(ワークフロー情報)
参照名: engine で参照します。
String getTimeZoneId() システムのタイムゾーンIDを取得します。
int getTimeZoneOffsetInMinutes() システムのタイムゾーンのオフセット時間を分単位で取得します。
void log(String message) デバッグを目的とした、処理ログを出力します。
出力した内容は、プロセス詳細画面の[処理記録]にて、[自動処理ログ]ボタン押下で確認することができます。
List<ProcessDataDefinitionView> findDataDefinitions() データ項目の一覧を取得します。
ProcessDataDefinitionView findDataDefinitionByName(String name) データ項目を名前で検索します。
同じ名前のデータ項目が複数存在する場合は、最初のデータ項目を返します。
ProcessDataDefinitionView findDataDefinitionByNumber(String dataDefNum) データ項目をデータ項目番号で検索します。
ProcessDataDefinitionView findDataDefinitionByNumber(Long dataDefNum) データ項目をデータ項目番号で検索します。
ProcessDataDefinitionView findDataDefinitionByVarName(String fieldName) データ項目をフィールド名で検索します。
Object findDataByNumber(String number) データ項目番号でデータ項目の値を取得します。
Object
または
List<Object>
findDataByVarName(String fieldName) フィールド名でデータ項目の値を取得します。
Object
または
List<Object>
findDataByName(String name) データ項目名でデータ項目の値を取得します。
Object
または
List<Object>
findDataByNumber(String dataDefNum) データ項目番号でデータ項目の値を取得します。
Object
または
List<Object>
findDataByNumber(Long dataDefNum) データ項目番号でデータ項目の値を取得します。
Object
または
List<Object>
findData(ProcessDataDefinitionView pocket) データ定義オブジェクトで指定されたデータ項目に格納されているオブジェクトを取得します。
  • 文字型: java.lang.String
  • 数値型: java.math.BigDecimal
  • 選択型: List<com.questetra.bpms.core.event.scripttask.ItemView>
  • 日付型: com.questetra.bpms.util.AddableDate
  • 日時型: com.questetra.bpms.util.AddableTimestamp
  • ファイル型: List<com.questetra.bpms.core.event.scripttask.QfileView>
  • ユーザ型: com.questetra.bpms.core.event.scripttask.QuserView
  • 組織型: com.questetra.bpms.core.event.scripttask.QgroupView
  • テーブル型: com.questetra.bpms.core.event.scripttask.ScriptListArray
void setDataByVarName(String fieldName, Object value) フィールド名でデータ項目の値を設定します。
void setDataByName(String name, Object value) データ項目名でデータ項目の値を設定します。
void setDataByNumber(String dataDefNum, Object value) データ項目番号でデータ項目の値を設定します。
void setDataByNumber(Long dataDefNum, Object value) データ項目番号でデータ項目の値を設定します。
void setData(ProcessDataDefinitionView pocket, Object value) データ定義オブジェクトで指定されたデータ項目に値(データオブジェクト)を設定します。
com.questetra.bpms.core.event.scripttask.ProcessDataDefinitionView
(データ項目情報)
String getName() データ項目名を取得します。
long getNumber() データ項目番号を取得します。
String getVarName() フィールド名を取得します。
List<SubDataDefinitionView> getSubDataDefinitions() テーブル型の場合にて、テーブル内データ項目の一覧を取得します。
ScriptListArray createListArray() テーブル型の場合に、空のテーブル(空のScriptListArrayオブジェクト)を生成します。
boolean matchDataType(String dataType) データ型を調べます。
dataTypeには以下の値を指定します。
  • STRING: 文字型
  • STRING_TEXTFIELD: 文字型(単一行)
  • STRING_TEXTAREA: 文字型(複数行)
  • DECIMAL: 数値型
  • DATE: 日付型
  • DATE_Y: 日付型(年)
  • DATE_YM: 日付型(年月)
  • DATE_MD: 日付型(月日)
  • DATE_YMD: 日付型(年月日)
  • DATETIME: 日時型
  • SELECT: 選択型
  • SELECT_SINGLE: 選択型(単一選択)
  • SELECT_CHECKBOX: 選択型(チェックボックス)
  • QUSER: ユーザ型
  • QGROUP: 組織型
  • LIST: テーブル型
  • FILE: ファイル型
  • DISCUSSION: 掲示板型
com.questetra.bpms.core.event.scripttask.SubDataDefinitionView
(テーブル内データ項目情報)
String getName() テーブル内データ項目名を取得します。
String getVarName() テーブル内データ項目のフィールド名を取得します。
long getNumber() テーブル内データ項目番号を取得します。
boolean matchDataType(String dataType) テーブル内データ項目のデータ型を調べます。
dataTypeには以下の値を指定します。
  • STRING: 文字型
  • DECIMAL: 数値型
  • DATE: 日付型
  • SELECT: 選択型
com.questetra.bpms.core.event.scripttask.ProcessInstanceView
(プロセス属性情報)
参照名: processInstance で参照します。
Long getProcessModelInfoId() アプリ番号を取得します。
String getProcessModelInfoName() アプリの名称を取得します。
String getProcessModelInfoCategory() アプリのカテゴリを取得します。
Long getProcessModelVersion() プロセスが開始されたときのアプリのバージョンを取得します。
Long getProcessInstanceId() プロセスIDを取得します。
Long getParentProcessInstanceId() 親プロセスのプロセスIDを取得します。
String getProcessInstanceState() プロセスの状態を取得します。
  • STARTED: 未終了
  • ENDED: 終了
  • FAILED: 異常終了
String getProcessInstanceTitle() プロセスの件名を取得します。
QuserView getProcessInstanceInitQuser() プロセス開始ユーザを取得します。
Long getProcessInstanceInitQuserId() プロセス開始ユーザのIDを取得します。
String getProcessInstanceInitQuserName() プロセス開始ユーザの名称を取得します。
QgroupView getProcessInstanceInitQgroup() プロセス開始組織を取得します。
Long getProcessInstanceInitQgroupId() プロセス開始組織のIDを取得します。
String getProcessInstanceInitQgroupName() プロセス開始組織の名称を取得します。
AddableTimestamp getProcessInstanceStartDatetime() プロセス開始日時を取得します。
Long getProcessInstanceSequenceNumber() プロセス連番を取得します。
void setProcessInstanceTitle(String title) プロセスの件名を設定します。
boolean getProcessInstanceDebug() デバッグプロセスかどうかを取得します。
com.questetra.bpms.core.event.scripttask.ItemView
(選択肢マスタの選択肢情報)
String getValue() 選択肢IDを取得します。
String getDisplay() 表示ラベルを取得します。
com.questetra.bpms.core.event.scripttask.ItemDaoWrapper
(選択肢マスタ情報)
参照名: itemDao で参照します。
List<ItemView> findAll(String fileName, boolean isSharedFile) 選択肢マスタの全選択肢を取得します。
List<ItemView> findAll(ProcessDataDefinitionView dataDef) 選択肢マスタの全選択肢を取得します。
選択肢種別が「HTTP 経由で取得した選択肢」の場合はエラーとなります。
ItemView findByValue(String fileName, boolean isSharedFile, String value) 選択肢マスタから特定の値(選択肢ID)を持つ選択肢を取得します。
ItemView findByValue(ProcessDataDefinitionView dataDef, String value) 選択肢マスタから特定の値(選択肢ID)を持つ選択肢を取得します。
選択肢種別が「HTTP 経由で取得した選択肢」の場合はエラーとなります。
com.questetra.bpms.util.AddableDate
(日付情報)
AddableDate AddableDate() 呼び出された時のDateを取得します。
AddableDate AddableDate(long time) 1970-01-01 00:00:00 UTCからのミリ秒数(time)で指定されたDateを取得します。
long getTime() 1970-01-01 00:00:00 UTCからのミリ秒数を取得します。
AddableDate addDays(int days) 指定した日数を加えたDateを取得します。
AddableDate addMonths(int months) 指定した月数を加えたDateを取得します。
AddableDate getFirstDateInMonth() その月の最初の日を取得します。
1日
AddableDate getFirstTimeInMonth() その月の最初の時刻を取得します
AddableDate getLastDateInMonth() その月の最後の日を取得します。
翌月1日の1日前
AddableDate getLastTimeInMonth() その月の最後の時刻を取得します。
AddableTimestamp getFirstTimeInDate() その日の最初の時刻を取得します。
String toString() 日付のサブタイプに応じた形式の文字列を取得します。
  • 年月日: yyyy-MM-dd
  • 月日: MM-dd
  • 年月: yyyy-MM
  • 年: yyyy
com.questetra.bpms.util.AddableTimestamp
(日時情報)
AddableTimestamp AddableTimestamp() 呼び出された時のTimestampを取得します。
AddableTimestamp AddableTimestamp(long time) 1970-01-01 00:00:00 UTCからのミリ秒数(time)で指定されたTimestampを取得します。
long getTime() 1970-01-01 00:00:00 UTCからのミリ秒数を取得します。
AddableTimestamp addMinutes(int minutes) 指定した分を加えたTimestampを取得します。
AddableTimestamp addHours(int hours) 指定した時間を加えたTimestampを取得します。
AddableTimestamp addDays(int days) 指定した日数を加えたTimestampを取得します。
AddableTimestamp addMonths(int months) 指定した月数を加えたTimestampを取得します。
AddableTimestamp getFirstTimeInDate() その日の最初の時刻を取得します。
AddableTimestamp getFirstTimeInMonth() その月の最初の時刻を取得します。
1日の0時0分0秒0ミリ秒
AddableTimestamp getLastTimeInMonth() その月の最後の時刻を取得します。
翌月1日の1ミリ秒前
String toString() 「yyyy-MM-dd HH:mm」形式の文字を取得します。
com.questetra.bpms.core.event.scripttask.QuserView
(ユーザ情報)
Long getId() ユーザIDを取得します。
String getName() ユーザ名を取得します。
String getEmail() ユーザのメールアドレスを取得します。
boolean isDeletedInFuture() 削除予定かどうかを取得します。
com.questetra.bpms.core.event.scripttask.QuserDaoWrapper
(ユーザマスタ情報)
参照名: quserDao で参照します。
QuserView findByEmail(String email) メールアドレスでユーザを取得します。
QuserView findById(Long id) ユーザIDでユーザを取得します。
List<QuserView> findByQgroup(QgroupView qgroup) 組織に所属しているユーザ一覧を取得します。
List<QuserView> findByQgroupAndPosition(QgoupView qgroup, boolean isLeader) 組織にリーダ(true)またはスタッフ(false)として所属しているユーザ一覧を取得します。
List<QuserView> findByQrole(QroleView qrole) ロールに所属しているユーザ一覧を取得します。
com.questetra.bpms.core.event.scripttask.QgroupView
(組織情報)
Long getId() 組織IDを取得します。
String getName() 組織名を取得します。
String getEmail() 組織のメールアドレスを取得します。
boolean isDeletedInFuture() 削除予定かどうかを取得します。
com.questetra.bpms.core.event.scripttask.QgroupDaoWrapper
(組織マスタ情報)
参照名: qgroupDao で参照します。
QgroupView findById(Long id) IDで組織を取得します。
QgroupView findByName(String name) 名称で組織を取得します。
QgroupView findParentQgroup(QgroupView qgroup) 組織の親組織を取得します。
QgroupView findPrimaryQgroup(QuserView quser) ユーザの主として所属する組織を取得します。
List<QgroupView> findByQuser(QuserView quser) ユーザが所属している組織一覧を取得します。
List<QgroupView> findByQuserAndPosition(QuserView quser, boolean isLeader) ユーザがリーダ(true)またはスタッフ(false)として所属している組織一覧を取得します。
com.questetra.bpms.core.event.scripttask.QroleView
(ロール情報)
Long getId() ロールIDを取得します。
String getName() ロール名を取得します。
boolean isDeletedInFuture() 削除予定かどうかを取得します。
com.questetra.bpms.core.event.scripttask.QroleDaoWrapper
(ロールマスタ情報)
参照名: qroleDao で参照します。
QroleView findById(Long id) ロールIDでロールを取得します。
QroleView findByName(String name) ロール名でロールを取得します。
List<QroleView> findByQuser(QuserView quser) ユーザが所属しているロール一覧を取得します。
com.questetra.bpms.core.model.formdata.ListArray
(テーブル情報)
String get(int row_index, int col_index) セルデータを取得します。
  • row_index: 行番号0始まり
  • col_index: 列番号0始まり
ListArray.ListRow getRow(int row_index) 指定行を取得します。
List<ListArray.ListRow> getRows() 全行を取得します。
int size() 行数を取得します。
void setRows(List<ListArray.ListRow> rows) 全行を設定します。
void addRow( ListArray.ListRow row ) 行を追加します。
ListArray.ListRow removeRow(int row_index) 行を削除します。
ListArray.ListRow getSummary() サマリ行を取得します。
void setSummary(ListArray.ListRow summary) サマリ行に値を設定します。
void clearSummary(int col_index) サマリ行の内容を指定列数の空の内容で初期化します。
String toXmlString() XML文字列でテーブルを取得します。
com.questetra.bpms.core.event.scripttask.ScriptListArray
(テーブル情報)
String get(int row_index, int col_index) セルデータを取得します。
  • row_index: 行番号0始まり
  • col_index: 列番号0始まり
Object getObject(int row_index, int col_index) セルデータのオブジェクトを取得します。
  • row_index: 行番号0始まり
  • col_index: 列番号0始まり
Object getObject(int row_index, String varName) セルデータのオブジェクトを取得します。
  • row_index: 行番号0始まり
  • varName: フィールド名
ScriptListArray.ScriptListRow getRow(int row_index) 指定行を取得します。
List<ScriptListArray.ScriptListRow> getRows() 全行を取得します。
int size() 行数を取得します。
ScriptListArray.ScriptListRow addRow() 空の行を追加します。
void setRows(List<ListArray.ListRow> rows) 全行を設定します。
void addRow( ListArray.ListRow row ) 行を追加します。
ScriptListArray.ScriptListRow removeRow(int row_index) 行を削除します。
ScriptListArray.ScriptListRow getSummary() サマリ行を取得します。
void setSummary(ListArray.ListRow summary) サマリ行に値を設定します。
void clearSummary(int col_index) サマリ行の内容を指定列数の空の内容で初期化します。
String toXmlString() XML文字列でテーブルを取得します。
com.questetra.bpms.core.model.formdata.ListArray.ListRow
(テーブル情報: 行単位)
List<String> getCols() 全列を取得します。
String getCol(int col_index) 指定列を取得します。
int size() 列数を取得します。
void setCols(List<String> cell_strings) 全列を上書きします。
void addCol(String cell_string) 列を追加します。
void setCol(int col_index, String cell_string) 指定列を上書きします。
com.questetra.bpms.core.event.scripttask.ScriptListArray.ScriptListRow
(テーブル情報: 行単位)
String get(String field_name) フィールド名で指定した列を取得します。
String getCol(int col_index) 指定列を取得します。
List<String> getCols() 全列を取得します。
Object getObject(int col_index) 指定列のオブジェクトを取得します。
  • 文字型: java.lang.String
  • 数値型: java.math.BigDecimal
  • 選択型: com.questetra.bpms.core.event.scripttask.ItemView
  • 日付型: com.questetra.bpms.util.AddableDate
Object String field_name フィールド名で指定したオブジェクトを取得します。
int size() 列数を取得します。
void setCols(List<String> cell_strings) 全列を上書きします。
void addCol(String cell_string) 列を追加します。
String put(String field_name, String cell_string) フィールド名で指定した列を上書きし、元の値を取得します。
cell_stringの書式は以下のとおりです。
  • 文字型 :(入力された文字列)
  • 数値型 : 標準形式(小数点ピリオド、桁区切り文字なし)
  • 選択型 : 選択肢ID
  • 日付型 : yyyy-mm-dd
void setCol(int col_index, String cell_string) 指定列を上書きします。
com.questetra.bpms.core.event.scripttask.QfileView
(ファイル情報)
String getName() ファイル名を取得します。
Long getLength() ファイルサイズを取得します。
String getContentType() ファイルのContent-Typeを取得します。
String getCharset() getContentType()で取得される値のうち、charsetの値のみを取得します。
com.questetra.bpms.core.event.scripttask.NewQfile
(新規ファイル情報)
(NewQfile) NewQfile(String fileName, String contentType, String text) テキストデータから文字コード変換した上でファイルを新規に作成します。
ファイル型データ項目やオープンチャットへ格納する場合のファイルのサイズは、100MB以下にしてください。
(NewQfile) NewQfile(String fileName, String contentType, String charset, String text) Content-Type、文字コード(charset)を指定して、テキストデータからファイルを新規に作成します。
ファイル型データ項目やオープンチャットへ格納する場合のファイルのサイズは、100MB以下にしてください。
(NewQfile) NewQfile(String fileName, String contentType, ByteArrayWrapper data) バイナリデータからファイルを新規に作成します。
ファイル型データ項目やオープンチャットへ格納する場合のファイルのサイズは、100MB以下にしてください。
(NewQfile) NewQfile(String fileName, String contentType, QfileView copyFrom) 既存のファイルから複製してファイルを新規に作成します。
ファイル型データ項目やオープンチャットへ格納する場合のファイルのサイズは、100MB以下にしてください。
String getName() ファイル名を取得します。
Long getLength() ファイルサイズを取得します。
String getContentType() ファイルのContent-Typeを取得します。
String getCharset() getContentType()で取得される値のうち、charsetの値のみを取得します。
com.questetra.bpms.core.event.scripttask.FileRepositoryWrapper
(ファイル内容情報)
参照名: fileRepository で参照します。
String readFile(QfileView file, String encoding) テキストファイルを指定の文字コードで読み込みます。
読み込めるファイルのサイズは1MBまでとなります。
void readFile(QfileView file, String encoding, org.mozilla.javascript.Function function) テキストファイルを指定の文字コードで読み込み、1行ずつ指定した関数(function)に渡します。
10行のテキストファイルでは、10回functionが呼ばれます。
ByteArrayWrapper readFile(QfileView file) ファイルをバイト配列として読み込みます。
void readFile(QfileView file, int size, java.util.function.Consumer<ByteArrayWrapper> function) ファイルを指定したサイズずつバイト配列として読み込み、指定した関数(function)に渡します。
com.questetra.bpms.core.event.scripttask.Base64UtilsWrapper
(Base64エンコード・デコード)
参照名: base64 で参照します。
String encodeToString(ByteArrayWrapper bytes) Base64エンコードします。(RFC 4648)
String encodeToString(String src) UTF-8文字として、Base64エンコードします。(RFC 4648)
String encodeToUrlSafeString(String src) UTF-8文字として、Base64エンコードします。(RFC 4648: URL and Filename Safe Alphabet)
String decodeFromString(String src) UTF-8文字に、Base64デコードします。(RFC 4648)
String decodeFromUrlSafeString(String src) UTF-8文字に、Base64デコードします。(RFC 4648: URL and Filename Safe Alphabet)
ByteArrayWrapper decodeFromUrlSafeStringToByteArray(String src) バイナリデータに、Base64デコードします。(RFC 4648: URL and Filename Safe Alphabet)
com.questetra.bpms.core.event.scripttask.DigestUtilsWrapper
(ダイジェスト値)
参照名: digest で参照します。
ByteArrayWrapper md5(ByteArrayWrapper bytes) MD5のハッシュ値を計算します。
ByteArrayWrapper md5(QfileView qfile) MD5のハッシュ値を計算します。
ByteArrayWrapper sha1(ByteArrayWrapper bytes) SHA1のハッシュ値を計算します。
ByteArrayWrapper sha1(QfileView qfile) SHA1のハッシュ値を計算します。
ByteArrayWrapper sha256(ByteArrayWrapper bytes) SHA256のハッシュ値を計算します。
ByteArrayWrapper sha256(QfileView qfile) SHA256のハッシュ値を計算します。
ByteArrayWrapper sha384(ByteArrayWrapper bytes) SHA384のハッシュ値を計算します。
ByteArrayWrapper sha384(QfileView qfile) SHA384のハッシュ値を計算します。
ByteArrayWrapper sha512(ByteArrayWrapper bytes) SHA512のハッシュ値を計算します。
ByteArrayWrapper sha512(QfileView qfile) SHA512のハッシュ値を計算します。
com.questetra.bpms.core.event.scripttask.StringEscapeUtilsWrapper
(文字エスケープ)
参照名: escaper で参照します。
String escapeEcmaScript​(String input) EcmaScript向けにエスケープします。
String escapeJson​(String input) JSON向けにエスケープします。
String escapeHtml​(String input) HTML向けにエスケープします。
String escapeXml​(String input) XML向けにエスケープします。
com.questetra.bpms.core.event.scripttask.FeedServiceWrapper
(オープンチャット情報)
参照名: feedService で参照します。
FeedMessageWrapper begin() オープンチャットの投稿メッセージを作成します。
int getPostingLimit() メッセージ投稿数の上限を取得します。
com.questetra.bpms.core.event.scripttask.FeedServiceWrapper.FeedMessageWrapper
(オープンチャット情報: 投稿メッセージ)
FeedMessageWrapper setMessage(String message) 投稿メッセージの本文を設定します。
FeedMessageWrapper setShareQgroup(QgroupView qgroup) 投稿メッセージの共有範囲組織を設定します。
FeedMessageWrapper attachFile(QfileView file) 投稿メッセージにファイルを添付します。
ファイルのサイズは、100MB以下にしてください。
FeedMessageWrapper attachLink(String url) 投稿メッセージにURLリンクを添付します。
Webページへアクセスし、ページタイトルを取得しません。
リンクURLの文字数は、1,000文字以下にしてください。
Long post() オープンチャットにメッセージを投稿します。
com.questetra.bpms.core.event.scripttask.HttpClientWrapper
(HTTPクライアント情報)
参照名: httpClient で参照します。
HttpRequestWrapper begin() HTTPリクエストを作成します。
AuthSettingWrapper findAuthSetting(String authSettingName, boolean sharedOrNot) HTTP認証設定のオブジェクトを取得します。
String getOAuth2Token(String authSettingName) HTTP認証設定を参照し、Tokenを取得します。
  • トークン直接指定の場合: 設定されている文字列を取得します。
  • Basic認証の場合: エラーとなります。
String getOAuth2Token(AuthSettingWrapper authSetting) HTTP認証設定を参照し、Tokenを取得します。
  • トークン直接指定の場合: 設定されている文字列を取得します。
  • Basic認証の場合: エラーとなります。
int getRequestingLimit() HTTPリクエスト数の上限を取得します。
com.questetra.bpms.core.event.scripttask.HttpClientWrapper.HttpRequestWrapper
(HTTPクライアント情報: HTTPリクエスト)
HttpRequestWrapper queryParam(String name, String value) リクエストクエリーに、パラメータを追加します。
HttpRequestWrapper authSetting(String authSettingName) HTTP認証設定を参照し、Authorizationヘッダを追加します。
  • トークン直接指定の場合: Authorization: Bearer <設定されている文字列>
  • Basic認証の場合: Authorization: Basic <BASE64エンコードされたユーザ名:パスワード>
HttpRequestWrapper authSetting(AuthSettingWrapper authSetting) HTTP認証設定を参照し、Authorizationヘッダを追加します。
  • トークン直接指定の場合: Authorization: Bearer <設定されている文字列>
  • Basic認証の場合: Authorization: Basic <BASE64エンコードされたユーザ名:パスワード>
HttpRequestWrapper basic(String userName, String password) リクエストヘッダに、Basic認証の認証情報を設定します。
HttpRequestWrapper bearer(String token) リクエストヘッダに、OAuth2トークンを追加します。
HttpRequestWrapper header(String name, String value) リクエストヘッダに、カスタムヘッダを追加します。
追加できるカスタムヘッダは以下のとおりです。
  • BoxApi
  • Content-Range
  • Dropbox-API-Arg
  • Digest
  • Stripe-Version
  • 以下を除く「X-」で始まるHTTPヘッダ
    • X-Requested-With
    • X-Forwarded-For
    • X-Forwarded-Host
    • X-Forwarded-Proto
    • X-Csrf-Token
boolean containsHeader(String name) 指定したヘッダが既にリクエストに設定されているかどうかを確認します。
HttpRequestWrapper body() ボディ部を空にセットします。(Content-Type無し)
HttpRequestWrapper body(QfileView file) リクエストボディに、ファイルを設定します。
HttpRequestWrapper body(QfileView file, String contentType) リクエストボディに、Content-Typeを指定してファイルを設定します。
HttpRequestWrapper body(String content, String contentType) リクエストボディに、Content-Typeを指定してテキストを設定します。
HttpRequestWrapper body(ByteArrayWrapper content, String contentType) リクエストボディに、Content-Typeを指定してバイナリデータを設定します。
HttpRequestWrapper formParam(String name, String value) リクエストボディに、パラメータを追加します。
(application/x-www-form-urlencoded)
HttpRequestWrapper multipart(String name, String value) リクエストボディに、パラメータを追加します。
(multipart/form-data)
HttpRequestWrapper multipart(String name, QfileView file) リクエストボディに、ファイルを追加します。
(multipart/form-data)
HttpRequestWrapper multipart(String name, String fileContent, String contentType, String fileName) リクエストボディに、テキストデータを文字コード変換した上でファイルを追加します。
(multipart/form-data)
HttpResponseWrapper get(String url) GETメソッドでHTTPリクエストを送信します。
HttpResponseWrapper post(String url) POSTメソッドでHTTPリクエストを送信します。
HttpResponseWrapper patch(String url) PATCHメソッドでHTTPリクエストを送信します。
HttpResponseWrapper put(String url) PUTメソッドでHTTPリクエストを送信します。
HttpResponseWrapper delete(String url) DELETEメソッドでHTTPリクエストを送信します。
com.questetra.bpms.core.event.scripttask.HttpClientWrapper.HttpResponseWrapper
(HTTPクライアント情報: HTTPレスポンス)
int getStatusCode() レスポンスのステータスコードを取得します。
ByteArrayWrapper getResponse() レスポンスをバイナリデータとして取得します。
String getResponseAsString() レスポンスを文字列として取得します。
String getContentType() レスポンスのContent-Typeを取得します。
String getCharset() レスポンスの文字コードを取得します。
List<String> getHeaderNames() レスポンスのヘッダ一覧を取得します。
List<String> getHeaderValues(String headerName) レスポンスのヘッダのうち、指定されたヘッダの値の一覧を取得します。
com.questetra.bpms.core.event.scripttask.AuthSettingWrapper
(HTTP認証設定の情報)
String getName() HTTP認証設定の名前を取得します。
String getToken() トークン直接指定の場合、トークンの設定値を取得します。
String getBasicUserName() Basic認証の場合、ユーザ名の設定値を取得します。
String getBasicUserName() Basic認証の場合、パスワードの設定値を取得します。
com.questetra.bpms.core.event.scripttask.EmailServiceWrapper
(メール情報)
参照名: emailService で参照します。
EmailMessageWrapper begin() メールのメッセージを作成します。
int getSendingLimit() メール送信数の上限を取得します。
com.questetra.bpms.core.event.scripttask.EmailServiceWrapper.EmailMessageWrapper
(メール情報: メールメッセージ)
EmailMessageWrapper addTo(String emailAddress, String fullName) メールのToアドレスを追加します。
EmailMessageWrapper addCc(String emailAddress, String fullName) メールのCcアドレスを追加します。
EmailMessageWrapper addBcc(String emailAddress, String fullName) メールのBccアドレスを追加します。
EmailMessageWrapper setFrom(String emailAddress, String fullName) メールのFromアドレスを設定します。
EmailMessageWrapper setReplyTo(String emailAddress, String fullName) メールのReplyToアドレスを設定します。
EmailMessageWrapper setSubject(String subject) メールの件名を設定します。
EmailMessageWrapper setBody(String body) メールの本文を設定します。(setTextBody()と同様)
EmailMessageWrapper setTextBody(String textBody) テキストでメールの本文を設定します。
EmailMessageWrapper setHtmlBody(String htmlBody) HTMLでメールの本文を設定します。
EmailMessageWrapper addAttachment(QfileView qfile) メールにファイルを添付します。
ファイルのサイズ制限は、設定ファイル(qbpms.config)の「qbpms.smtp.sizeLimit」の値に依存します(初期値: 10MB)。
EmailMessageWrapper addAttachment(String fileName, String contentType, String fileContent) テキストデータを文字コード変換した上でメールにファイルを添付します。
ファイルのサイズ制限は、設定ファイル(qbpms.config)の「qbpms.smtp.sizeLimit」の値に依存します(初期値: 10MB)。
void send() メールを送信します。
java.lang.String 標準のJavaクラス - -
java.lang.Long 標準のJavaクラス - -
java.lang.Math 標準のJavaクラス - -
java.util.ArrayList 標準のJavaクラス - -
java.util.Date 標準のJavaクラス - -
java.util.HashMap 標準のJavaクラス - -
java.util.Locale 標準のJavaクラス - -
java.util.regex.Pattern 標準のJavaクラス - -
java.util.regex.Matcher 標準のJavaクラス - -
java.math.BigDecimal 標準のJavaクラス - -
java.text.SimpleDateFormat 標準のJavaクラス - -
java.text.DecimalFormat 標準のJavaクラス - -
java.sql.Date 標準のJavaクラス - -
java.sql.Timestamp 標準のJavaクラス - -

データ項目の参照方法

各データ項目の値の取得および設定は以下の構文となります。

デバッグプロセスの判定方法

デバッグプロセスかどうかを判定するには、以下のスクリプトを記述します。

 if (processInstance.getProcessInstanceDebug() === true) { 
   <デバッグプロセスだった場合の処理>
 }

サンプル

文字型 文字型データ項目に対する値の取得と設定
数値型 数値型データ項目に対する値の取得と設定
選択型 選択型データ項目に対する値の取得と設定
日付型 日付型データ項目に対する値の取得と設定
日時型 日時型データ項目に対する値の取得と設定
ファイル型 ファイル型データ項目に対する値の取得と設定
ユーザ型 ユーザ型データ項目に対する値の取得と設定
組織型 組織型データ項目に対する値の取得と設定
テーブル型 テーブル型データ項目に対する値の取得と設定
[その他] プロセス属性 全プロセス共通のプロセス属性に対する値の取得と設定
[その他] 部門検索 「本部-部-課」という構造をもった組織における、所属する本部の取得と設定
[その他] JSON解析 文字型(複数行)に保持されているJSON形式の文字列を解析
[その他] HTTPリクエスト 入力したデータをもとに、HTTPリクエストを送信
掲示板型およびガイドパネル型の取得および設定には対応していません。

文字型: 文字型データ項目に対する値の取得と設定

シナリオ

  1. 文字型(単一行)データ項目に固定値を設定します。
  2. 文字型(複数行)データ項目に固定値を設定します。

実装


 engine.setDataByNumber("0", "HelloWorld!!");
 engine.setDataByNumber("1", "Hello\nWorld!!");

シナリオ

  1. 新しいアジェンダの内容を保持した文字型(単一行)データ項目から値を取得します。
  2. アジェンダのリストを保持した値の最後に、改行コードおよび新しいアジェンダの内容を連結します。
  3. アジェンダのリストを保持した文字型(複数行)データ項目に新しい内容を含めたすべての値を設定します。

実装


 var newAgenda = engine.findDataByNumber("0");
 var agendaList = engine.findDataByNumber("1");

 agendaList += '\n';
 agendaList += newAgenda;

 engine.setDataByNumber("1", agendaList);

数値型: 数値型データ項目に対する値の取得と設定

シナリオ

  1. 数値型データ項目に固定値を設定します。
  2. 数値型データ項目にランダム値を設定します。

実装


 engine.setDataByNumber("2", new java.math.BigDecimal(123));
 engine.setDataByNumber("3", new java.math.BigDecimal(Math.random()));

シナリオ

  1. 数量を保持した数値型データ項目から値を取得します。
  2. 単価を保持した数値型データ項目から値を取得します。
  3. 数量×単価の値を計算し金額を求めます。
  4. 文字型データ項目に、金額の値をフォーマット変換して設定します。

実装


 var quantity = engine.findDataByNumber("4");
 var unitPrice = engine.findDataByNumber("5");

 var price = quantity * unitPrice;

 engine.setDataByNumber("6", new java.text.DecimalFormat('#,##0円').format(price));

選択型: 選択型データ項目に対する値の取得と設定

選択肢リストすべてではなく、選択された値のみが取得できます。
選択肢を1つしか選べないフォームタイプ(ラジオボタン、セレクトボックス、検索セレクトボックス)にて、2つ以上の選択肢を設定した場合は、スクリプト実行時にエラーとなります。
選択肢リストにない選択肢IDを設定した場合は、エラーとならずに設定した値は無視されます。

シナリオ

  1. 選択したい値のリスト(「JP」および「US」)を設定します。
  2. 選択型データ項目(チェックボックス)にて、複数の値を設定します(チェックを入れます)。

実装


 var selects = new java.util.ArrayList();

 selects.add("JP");
 selects.add("US");

 engine.setDataByNumber("7", selects);

シナリオ

  1. 選択型データ項目(チェックボックス)で現在選択されている複数の値を取得します。
  2. 選択されている値の選択肢IDおよび表示ラベルを取得し、改行コードとともに文字列連結します。
  3. 連結した値を文字型(複数行)データ項目に設定します。

実装


 var text = "";
 var selects = engine.findDataByNumber("7");

 for (var i=0; i < selects.size(); i++){
     var select = selects.get(i);
     text += select.getValue() + ":" + select.getDisplay();
     text += '\n';
 }

 engine.setDataByNumber("8", text);

日付型: 日付型データ項目に対する値の取得と設定

シナリオ

  1. 日付型データ項目に固定値を設定します。

実装


 engine.setDataByName("設立日付", java.sql.Date.valueOf("2015-03-15"));

シナリオ

  1. 日付型データ項目の値を取得します。
  2. 取得した値を年月日のフォーマット変換(年号YYYY年MM月DD日)を行います。
  3. フォーマット変換した値を文字型データ項目に設定します。

実装


 var text = "";
 var requestDate = engine.findDataByName("請求日入力");

 var dateFormatter = new java.text.SimpleDateFormat("GGGGyyyy年MM月dd日", new java.util.Locale("ja", "JP", "JP"));

 text += dateFormatter.format(requestDate);

 engine.setDataByName("請求日付", text);

日時型: 日時型データ項目に対する値の取得と設定

シナリオ

  1. 日時型データ項目に固定値を設定します。

実装


 engine.setDataByVarName("q_birthDateTime", java.sql.Timestamp.valueOf("2015-03-15 12:34:56"));

シナリオ

  1. 製造日時を保持した日時型データ項目の値を取得します。
  2. 取得した値から2か月後の日時を、消費日時を保持する日時型データ項目に設定します。

実装


 var manufactureDate = engine.findDataByVarName("q_manufactureDate");

 engine.setDataByVarName("q_consumptionDate", manufactureDate.addMonths(2));

ファイル型: ファイル型データ項目に対する値の取得と設定

ファイルは、QfileViewのリスト配列(List<QfileView>)として保持されます。

シナリオ

  1. ファイル型データ項目に保持された複数ファイルの値を取得します。
  2. テーブル型データ項目に保持された複数行の値を取得します。
  3. 取得したテーブル型の値を、CSV形式(カンマ区切り)のファイルとして生成します。
  4. ファイル型データ項目にファイルが1つも添付されていない場合は、リスト配列を新規に生成します。
  5. 生成したCSV形式(カンマ区切り)のファイルをファイル型データ項目に追加します。

実装


 var csvText = "";
 var quoteFiles = engine.findDataByNumber("13");
 var tableData = engine.findDataByNumber("14");

 for (var i=0; i < tableData.size(); i++) {
     csvText += tableData.get(i, 0) + ",";
     csvText += tableData.get(i, 1) + ",";
     csvText += tableData.get(i, 2) + ",";
     csvText += tableData.get(i, 3) + "\n";
 }

 if (quoteFiles == null) {
     quoteFiles = new java.util.ArrayList();
 }
 quoteFiles.add(new com.questetra.bpms.core.event.scripttask.NewQfile("QuoteDetails.csv", "text/csv", csvText));

 engine.setDataByNumber("13", quoteFiles);

ユーザ型: ユーザ型データ項目に対する値の取得と設定

シナリオ

  1. DataSpider BPMに登録されているユーザ情報から、指定のメールアドレスを持つユーザを取得します。
  2. 取得した値を、担当者を保持するユーザ型データ項目に設定します。

実装


 var repUser = quserDao.findByEmail("Ito@localhost.localdomain");

 engine.setDataByNumber("14", repUser);

シナリオ

  1. 担当者を保持するユーザ型データ項目から値を取得します。
  2. 承認者を保持するユーザ型データ項目から値を取得します。
  3. 取得した値を改行を含んだ「担当者: <担当者名>[<メールアドレス>]」および「承認者: <承認者名>[<メールアドレス>]」に変換します。
  4. 変換した値を関係者情報を保持する文字型(複数行)データ項目に設定します。

実装


 var text = "";
 var repUser = engine.findDataByNumber("15");
 var appUser = engine.findDataByNumber("16");

 text  = '担当者: ' + repUser.getName() + '[' + repUser.getEmail() + ']\n';
 text += '承認者: ' + appUser.getName() + '[' + appUser.getEmail() + ']';

 engine.setDataByNumber("17", text);

組織型: 組織型データ項目に対する値の取得と設定

シナリオ

  1. 担当部署を保持した組織型データ項目から値を取得します。
  2. DataSpider BPMに登録されている組織情報から、担当部署の親組織を取得します。
  3. 取得した値を、承認部署を保持する組織型データ項目に設定します。

実装


 var repGroup = engine.findDataByNumber("18");
 var appGroup = qgroupDao.findParentQgroup(repGroup);

 engine.setDataByNumber("19", appGroup);

テーブル型: テーブル型データ項目に対する値の取得と設定

シナリオ

  1. 購入商品リストを保持したテーブル型データ項目から値を取得します。
  2. 取得した値に1行もデータがなければ、空のデータを生成します。
  3. 空のデータ行を生成し、初期値として以下の商品リストを1行生成します。
    • 商品名:「PRODUCT-01」
    • 数量:「10」
    • 単価:「1200」
    • 金額:「12000」
  4. 生成した行データを、テーブル型データ項目に追加します。
  5. テーブル型データ項目に値を設定します。

実装


 var productList = engine.findDataByNumber("20");

 if (productList == null) {
     productList = new com.questetra.bpms.core.model.formdata.ListArray();

     var row = new com.questetra.bpms.core.model.formdata.ListArray.ListRow();

     row.addCol("PRODUCT-01");
     row.addCol("10");
     row.addCol("1200");
     row.addCol("12000");

     productList.addRow(row);

     engine.setDataByNumber("20", productList);
 }

[その他] プロセス属性: 全プロセス共通のプロセス属性に対する値の取得と設定

シナリオ

  1. プロセス属性から、プロセス連番の値を取得します。
  2. 取得した値を使用し、以下の値を件名に設定します。
    • 第<プロセス連番> 回 定例ミーティング開催

実装


 var seqNum = processInstance.getProcessInstanceSequenceNumber();

 processInstance.setProcessInstanceTitle("第" + seqNum + "回 定例ミーティング開催");

[その他] 部門検索: 「本部-部-課」という構造をもった組織における、所属する本部の取得と設定

シナリオ

  1. プロセス属性から、プロセス開始組織の値を取得します。
    ここでは、課が取得されているものとします。
  2. 取得したプロセス開始組織から、本部組織を検索します。
    • 組織名の最後に「本部」と名のつく親組織を、組織階層を遡りながら検索します。
  3. 検索した本部組織を担当本部を保持する組織型データ項目に設定します。

実装


 var qGroup = qgroupDao.findById(processInstance.getProcessInstanceInitQgroupId());

 var division = findDivision(qGroup);

 engine.setDataByNumber("21", division);


 function findDivision(aGroup){
     while (aGroup != null && aGroup.getName().endsWith('本部') == false) {
        aGroup = qgroupDao.findParentQgroup(aGroup);
     }
     return aGroup;
 }

[その他] JSON解析: 文字型(複数行)に保持されているJSON形式の文字列を解析

シナリオ

  1. APIのレスポンスデータ(JSON)が保持されている文字型(複数行)データ項目から値を取得します。
    上記のデータは、DataSpider BPMが提供しているマイタスクの一覧を取得するAPIのレスポンスデータ(JSON)とします。
    マイタスクの一覧を取得するAPIに関する詳細は、
    「ワークフローAPI: マイタスクの一覧を取得する」を参照してください。
  2. 取得した値をJSON形式にパースします。
  3. 保持されている複数のマイタスク情報から、以下の値を取得します。
  4. 変換した値を作業リストを保持する文字型(複数行)データ項目に設定します。

実装


 var jsonText = engine.findDataByNumber("22");
 var myTasks = JSON.parse(jsonText);

 var taskList = "";

 for (var i in myTasks.workitems){
     taskList += '[プロセス]: ' + myTasks.workitems[i].processModelInfoName + ' [タスク]: ' + myTasks.workitems[i].nodeName;
     taskList += '\n';
 }

 engine.setDataByNumber("23", taskList);

[その他] HTTPリクエスト: 入力したデータをもとに、HTTPリクエストを送信

シナリオ

  1. [ユーザ名]に入力した値を取得します。
  2. [メールアドレス]に入力した値を取得します。
  3. [パスワード]に入力した値を取得します。
  4. Basic認証情報のユーザ名(ここでは[メールアドレス])およびパスワード(ここでは[APIパスワード])を設定します。
  5. 送信するHTTPリクエストに必要なクエリーパラメータを設定します(ここでは、名前、メールアドレス、パスワード)。
  6. POSTメソッドで指定のHTTPリクエストを送信します。
    ここでは、DataSpider BPM が提供しているユーザを追加するAPIを呼び出しています。
    ユーザを追加するAPIに関する詳細は、
    「システム設定API: ユーザを追加する」を参照してください。
  7. ステータスコードを取得します。

実装


 var userName = engine.findDataByNumber("24");
 var userEmail = engine.findDataByNumber("25");
 var userPwd = engine.findDataByNumber("26");

 var httpReq = httpClient.begin();
 httpReq.basic("Admin@localhost.localdomain", "MfZ91kYAPljyRhdmFAIEDxELp2uzi9pv");
 httpReq.queryParam("name", userName);
 httpReq.queryParam("email", userEmail);
 httpReq.queryParam("password", userPwd);

 var httpRes = httpReq.post("http://xxx.xxx.xxx.xxx:18080/userweb/API/UGA/Quser/add");

 if (httpRes.getStatusCode() == 200) {
     engine.setDataByNumber("27", "正常にユーザが登録されました。");
 } else {
     engine.setDataByNumber("27", "エラーが発生しユーザが登録できませんでした。\n" +
     "レスポンスコード: " + httpRes.getStatusCode() + "\n" +
     "エラー内容: \n" +
     httpRes.getResponseAsString());
 }