スクリプトタスク

機能概要

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

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

機能一覧

ワークフロー図 ワークフロー図の作成を行います。
スイムレーンや各ノードを配置し、フローを作成して、作業の順序を定義します。
ヒューマンタスク プロセスにおいて、処理担当者が作業する手動工程を表します。
プロセス実行時に、データを入力するフォーム(タスク処理画面)が表示されます。
サービスタスク
(データ設定)
プロセスにおいて、システムが処理する自動工程を表します。
数値型、日付型/日時型、文字型、選択型データ項目に、動的な値や演算結果を代入します。
サービスタスク
(PDF生成)
プロセスにおいて、システムが処理する自動工程を表します。
業務データ(各データ項目に保持されている値)を埋め込んだPDF帳票を生成します。
サービスタスク
(選択肢マスタ更新)
プロセスにおいて、システムが処理する自動工程を表します。
指定の選択型データ項目の内容を、アプリ共有アドオンの[選択型データ項目で使用する選択肢マスタ]として更新します。
スクリプトタスク プロセスにおいて、システムが処理する自動工程を表します。
ECMAスクリプトを使用して、業務データ(各データ項目に保持されている値)を編集します。
受信タスク
(フォーム)
プロセスにおいて、システムが処理する自動工程を表します。
アカウントを持たないユーザに対して、プロセスの途中での入力フォームを提供します。
メッセージ開始イベント(フォーム)を使用してユーザにWeb入力フォームを提供したあとに、メールによる本人確認を経て、詳細情報を入力するようなWeb入力フォームを表示します。
受信タスク
(Webhook)
プロセスにおいて、システムが処理する自動工程を表します。
外部サービス側のWebhook通知の受信まで待機し、受信後にトークンが進みます。
サービスタスク
(Add-on)
プロセスにおいて、システムが処理する自動工程を表します。
ユーザ独自定義のサービスタスクを処理します。
タイマー開始イベント プロセスにおいて、システムが処理する自動工程を表します。
設定した日時にプロセスを自動的に開始します。
タイマー中間イベント プロセスにおいて、システムが処理する自動工程を表します。
指定した日時まで待機し、指定日時を経過するとトークンが進みます。
メッセージ開始・
受信中間イベント(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エンジン)を選択します。
  • RHINO
  • NASHORN デフォルト
前バージョン(DataSpider BPM 2.5以前)から使用しているスクリプトタスクのスクリプトエンジンは「RHINO」となります。
使用していたスクリプトエンジンを切り替えた場合は、使用できるクラスおよびメソッドが異なっていたり、同じ記述内容でもその挙動が異なる場合があります。
      十分な動作検証を行ってください。
スクリプト 必須 スクリプトを記述する入力フィールドです。

操作メニュー説明

表示
(HTML5版)
表示
(Flash版)
操作メニュー 説明
[ヘルプ]アイコン
[ヘルプ]ボタン
このマニュアルページを表示します。
[適用して閉じる]ボタン
[閉じる]ボタン
設定した値を適用して、スクリプトタスクのプロパティ設定ダイアログを閉じます。
- [適用する]ボタン 設定した値を適用します。
- [キャンセル]ボタン 設定した値を適用せずに、スクリプトタスクのプロパティ設定ダイアログを閉じます。

仕様制限

基本仕様

前提条件

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

使用可能なJavaScriptクラス

ECMAスクリプト(ECMA-262)に関する詳細は、「Standard ECMA-262 ECMAScript(R) Language Specification」
      (https://www.ecma-international.org/publications/standards/Ecma-262.htm)を参照してください。
browserオブジェクトは使用することができません。

使用可能なJavaクラス

以下に記載されているJavaクラス以外は使用することができません。
クラス メソッド メソッド説明
com.questetra.bpms.core.select.Item
(選択型の選択肢情報)
String getValue() 選択肢IDを取得します。
String getDisplay() 表示ラベルを取得します。
com.questetra.bpms.util.AddableDate
(日付情報)
AddableDate addDays(int days) 指定した日数を加えたDateを返します。
AddableDate addMonths(int months) 指定した月数を加えたDateを返します。
AddableDate getFirstDateInMonth() その月の最初の日を返します。
1日
AddableDate getFirstTimeInMonth() 非推奨
AddableDate getLastDateInMonth() その月の最後の日を返します。
翌月1日の1日前
AddableDate getLastTimeInMonth() 非推奨
com.questetra.bpms.util.AddableTimestamp
(日時情報)
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.ProcessInstanceView
(プロセス属性情報)
参照名: processInstance で参照します。
Long getProcessModelInfoId() アプリ番号を取得します。
String getProcessModelInfoName() アプリの名称を取得します。
String getProcessModelInfoCategory() アプリのカテゴリを取得します。
Long getProcessModelVersion() プロセスが開始されたときのアプリのバージョンを取得します。
Long getProcessInstanceId() プロセスIDを取得します。
String getProcessInstanceTitle() プロセスの件名を取得します。
Long getProcessInstanceInitQuserId() プロセス開始ユーザのIDを取得します。
String getProcessInstanceInitQuserName() プロセス開始ユーザの名称を取得します。
Long getProcessInstanceInitQgroupId() プロセス開始組織のIDを取得します。
String getProcessInstanceInitQgroupName() プロセス開始組織の名称を取得します。
AddableTimestamp getProcessInstanceStartDatetime() プロセス開始日時を取得します。
Long getProcessInstanceSequenceNumber() プロセス連番を取得します。
void setProcessInstanceTitle(String title) プロセスの件名を設定します。
com.questetra.bpms.core.event.scripttask.QuserView
(ユーザ情報)
Long getId() ユーザIDを取得します。
String getName() ユーザ名を取得します。
String getEmail() ユーザのメールアドレスを取得します。
com.questetra.bpms.core.event.scripttask.QgroupView
(組織情報)
Long getId() 組織IDを取得します。
String getName() 組織名を取得します。
String getEmail() 組織のメールアドレスを取得します。
com.questetra.bpms.core.event.scripttask.QroleView
(ロール情報)
Long getId() ロールIDを取得します。
String getName() ロール名を取得します。
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.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.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) サマリ行の内容を指定列数の空の内容で初期化します。
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.ItemView
(選択肢マスタの選択肢情報)
String getValue() 選択肢IDを取得します。
String getDisplay() 表示ラベルを取得します。
com.questetra.bpms.core.event.scripttask.ItemDaoWrapper
(選択肢マスタ情報)
参照名: itemDao で参照します。
List<ItemView> findAll(String fileName, boolean isSharedFile) 選択肢マスタの全選択肢を検索します。
ItemView findByValue(String fileName, boolean isSharedFile, String value) 選択肢マスタから特定の値(選択肢ID)を持つ選択肢を検索します。
com.questetra.bpms.core.event.scripttask.QfileView
(ファイル情報)
String getName() ファイル名を取得します。
Long getLength() ファイルサイズを取得します。
String getContentType() ファイルのContent-Typeを取得します。
com.questetra.bpms.core.event.scripttask.NewQfile
(新規ファイル情報)
(NewQfile) NewQfile(String fileName, String contentType, String text) テキストデータから文字コード変換した上でファイルを新規に作成します。
ファイル型データ項目やオープンチャットへ格納する場合のファイルのサイズは、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を取得します。
com.questetra.bpms.core.event.scripttask.FileRepositoryWrapper
(ファイル内容情報)
参照名: fileRepository で参照します。
void readFile(QfileView file, String encoding, org.mozilla.javascript.Function function) テキストファイルを指定の文字コードで読み込み、1行ずつ指定した関数(function)に渡します。
10行のテキストファイルでは、10回functionが呼ばれます。
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) メールの本文を設定します。
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() メールを送信します。
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リクエストを作成します。
String getOAuth2Token(String configName) OAuth2トークンを取得します。
int getRequestingLimit() HTTPリクエスト数の上限を取得します。
com.questetra.bpms.core.event.scripttask.HttpClientWrapper.HttpRequestWrapper
(HTTPクライアント情報: HTTPリクエスト)
HttpRequestWrapper queryParam(String name, String value) リクエストクエリーに、パラメータを追加します。
HttpRequestWrapper basic(String userName, String password) リクエストヘッダに、Basic認証情報(ユーザ名およびパスワード)を追加します。
HttpRequestWrapper bearer(String token) リクエストヘッダに、OAuth2トークンを追加します。
HttpRequestWrapper header(String name, String value) リクエストヘッダに、カスタムヘッダを追加します。
追加できるカスタムヘッダは以下のとおりです。
  • BoxApi
  • Dropbox-API-Arg
  • 以下を除く「X-」で始まるHTTPヘッダ
    • X-Requested-With
    • X-Forwarded-For
    • X-Forwarded-Host
    • X-Forwarded-Proto
    • X-Csrf-Token
HttpRequestWrapper body(QfileView file) リクエストボディに、ファイルを設定します。
HttpRequestWrapper body(String content, String contentType) リクエストボディに、テキストを設定します。
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() レスポンスの文字コードを取得します。
com.questetra.bpms.core.event.scripttask.WorkflowEngine
(ワークフロー情報)
参照名: engine で参照します。
ProcessDataDefinitionView findDataDefinitionByName(String name) データ項目を名前で検索します。
同じ名前のデータ項目が複数存在する場合は、最初のデータ項目を返します。
ProcessDataDefinitionView findDataDefinitionByNumber(Long number) データ項目をデータ項目番号で検索します。
ProcessDataDefinitionView findDataDefinitionByNumber(String number) データ項目をデータ項目番号で検索します。
ProcessDataDefinitionView findDataDefinitionByVarName(String varName) データ項目をフィールド名で検索します。
List<ProcessDataDefinitionView> findDataDefinitions() データ項目の一覧を取得します。
String getTimeZoneId() システムのタイムゾーンIDを取得します。
int getTimeZoneOffsetInMinutes() システムのタイムゾーンのオフセット時間を分単位で取得します。
Object findDataByNumber(String number) データ項目番号でデータ項目の値を取得します。
Object findDataByNumber(Long number) データ項目番号でデータ項目の値を取得します。
Object findDataByName(String name) データ項目名でデータ項目の値を取得します。
Object findDataByVarName(String varName) フィールド名でデータ項目の値を取得します。
void setDataByNumber(String number, Object value) データ項目番号でデータ項目の値を設定します。
void setDataByNumber(Long number, Object value) データ項目番号でデータ項目の値を設定します。
void setDataByName(String name, Object value) データ項目名でデータ項目の値を設定します。
void setDataByVarName(String varName, Object value) フィールド名でデータ項目の値を設定します。
void log(String message) デバッグを目的とした、処理ログを出力します。
出力した内容は、プロセス詳細画面の[処理記録]にて、[自動処理ログ]ボタン押下で確認することができます。
com.questetra.bpms.core.event.scripttask.ProcessDataDefinitionView
(データ項目情報)
String getName() データ項目名を取得します。
long getNumber() データ項目番号を取得します。
String getVarName() フィールド名を取得します。
List<SubDataDefinitionView> getSubDataDefinitions() テーブル型の場合にて、テーブル内データ項目の一覧を取得します。
boolean matchDataType(String dataType) データ型を調べます。
com.questetra.bpms.core.event.scripttask.SubDataDefinitionView
(テーブル内データ項目情報)
String getName() テーブル内データ項目名を取得します。
long getNumber() テーブル内データ項目番号を取得します。
boolean matchDataType(String dataType) テーブル内データ項目のデータ型を調べます。
java.lang.String - - -
java.lang.Long - - -
java.lang.Math - - -
java.util.ArrayList - - -
java.util.Date - - -
java.util.HashMap - - -
java.util.Locale - - -
java.util.regex.Pattern - - -
java.util.regex.Matcher - - -
java.math.BigDecimal - - -
java.text.SimpleDateFormat - - -
java.text.DecimalFormat - - -
java.sql.Date - - -
java.sql.Timestamp - - -

データ項目の参照方法

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

サンプル

文字型 文字型データ項目に対する値の取得と設定
数値型 数値型データ項目に対する値の取得と設定
選択型 選択型データ項目に対する値の取得と設定
日付型 日付型データ項目に対する値の取得と設定
日時型 日時型データ項目に対する値の取得と設定
ファイル型 ファイル型データ項目に対する値の取得と設定
ユーザ型 ユーザ型データ項目に対する値の取得と設定
組織型 組織型データ項目に対する値の取得と設定
テーブル型 テーブル型データ項目に対する値の取得と設定
[その他] プロセス属性 全プロセス共通のプロセス属性に対する値の取得と設定
[その他] 部門検索 「本部-部-課」という構造をもった組織における、所属する本部の取得と設定
[その他] 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());
 }