第524話:サーバサイド JavaScript による業務の自動化

2017年2月27日

プログラミング知識の活用

「スクリプト工程」とは、業務プロセス内にある「自動工程」の一種です。

たとえば、
  • 上流工程で入力された『出勤時刻』と『帰宅時刻』を参照して、
  • 自動的に『勤務時間』( {帰宅時刻} - {出勤時刻} )を算出する
といった「プログラム処理」を自動的に実行させるための工程です。

逆に言えば、その様なスクリプト工程を日報フローに組み込めばすれば、社員に『勤務時間』を記入してもらう必要が無くなります。

何が出来るのか?

ワークフロー基盤側で行われる自動処理は、いわゆる『サーバサイド処理』です。

つまり、業務プロセスを流れてきた案件が「スクリプト工程」に到達すれば、自動的にデータが参照され、また書き換えられます。全ての処理は人間の関知しないところで実行されます。

そこにセットされるプログラムコードは
  • 「業務データの参照」に始まり、
  • 「様々な演算処理」を経て、
  • 「業務データの書き換え」で終わる
といった構成になるでしょう。

どの様な「演算」が可能なのか?

たとえばクラウド型ワークフロー製品である『Questetra BPM Suite』の場合、「サーバサイド JavaScript (ECMA Script) をセットできる」(※)という仕様となっています。そして、以下のような演算が可能です。
  • 基本的な数値データ演算(四則演算、平方根、指数、四捨五入、乱数…)
  • 基本的な文字列データ操作(結合、分割、整形、抜き出し、置換、検索…)
  • 基本的な日時データ操作(加算、減算、経過計算、曜日判定、和暦変換…)
  • JSON データの生成や解析
  • XML データの生成や解析
  • HTTPリクエストの送信(データGET、データPOST、OAuth2通信、Basic認証…)
  • SMTPリクエストの送信(メール送信、添付ファイル生成、文字コード変換…)
※ Rhino エンジンで処理できる Java メソッドや Questetra 拡張メソッドも利用できます[R2300]
※ 詳細情報はコチラコチラ

[出退勤報告フロー-時分表示]

プログラムコードの例

このワークフローにある『勤務時間計算』というスクリプト工程には、たとえば以下のようなプログラムコードがセットされます。

社員による『2.退勤時刻の報告』が完了すると、案件が『勤務時間計算』の工程に到達し、「8.11 (h)」や「7.96 (h)」といった『勤務時間』(数値型データ)が自動的に追加される仕組みです。

//// == ワークフローデータの参照 / Retrieving ==
var workStart = data.get("6"); 
var workEnd = data.get("7"); 
// com.questetra.bpms.util.AddableTimestamp
var workBreak = data.get("8") - 0; // (h) number

//// == 演算 / Calculating ==
// java.sql.Timestamp: long getTime()
// Returns the number of milliseconds since Jan 1, 1970 GMT
var intervalMilliSec = workEnd.getTime() - workStart.getTime() ; 
var intervalHour = Math.ceil( intervalMilliSec / 10 / 3600 ) / 100 ;
// 小数第二位 / two places of decimals
var workHour = intervalHour - workBreak ;

//// == ワークフローデータへの代入 / Updating ==
retVal.put("9", java.math.BigDecimal( workHour ) );

スクリプト工程のメンテナンス

もし「8.11 (h)」や「7.96 (h)」といった数値型だけでなく、「8:07」や「7:58」といった文字列型のデータも算出されるように改めたくなった場合には、プログラムコードを編集する必要があります。

(「15~18行目」と「22行目」が追加されたコード)

//// == ワークフローデータの参照 / Retrieving ==
var workStart = data.get("6"); 
var workEnd = data.get("7"); 
// com.questetra.bpms.util.AddableTimestamp
var workBreak = data.get("8") - 0; // (h) number

//// == 演算 / Calculating ==
// java.sql.Timestamp: long getTime()
// Returns the number of milliseconds since Jan 1, 1970 GMT
var intervalMilliSec = workEnd.getTime() - workStart.getTime() ; 
var intervalHour = Math.ceil( intervalMilliSec / 10 / 3600 ) / 100 ;
// 小数第二位 / two places of decimals
var workHour = intervalHour - workBreak ;

var h = Math.floor( workHour );
var m = Math.floor( (workHour - Math.floor( workHour ) ) * 60 );
var mm = ( "0" + m ).slice(-2);
var workHourStr = h + ":" + mm;

//// == ワークフローデータへの代入 / Updating ==
retVal.put("9", java.math.BigDecimal( workHour ) );
retVal.put("12", workHourStr );


スクリプト工程を使用する際の注意

「業務工程の自動化」は、生産性向上に大きく寄与します。

しかし一方で、スクリプト工程のメンテナンスには、どうしてもプログラミング知識が必要となります。

スクリプト工程の利用例などを参考にして、業務プロセスにスクリプト工程を活用する際には、「メンテナンスを含めた運用体制」について、しっかり議論しておくことが重要だと言えます。

[出退勤報告フロー-時分表示:「1.出勤時刻の報告」画面]

<データ項目一覧画面>


[雛形ダウンロード (無料)]
<類似プロセス>
≪関連記事≫

[英文記事 (English Entry) ]

0 件のコメント :

コメントを投稿