M416 自動工程
Last updated Nov 09, 2017

業務プロセス定義で利用可能な自動工程を自作する

"文字数とハッシュ値を取得する" といった処理工程を自動化したい場合、[スクリプト工程]を使ってスクリプトを記述することになります。もし同様の[スクリプト工程]を何か所にも配置する必要があるなら[アドオンXML]としてパッケージ化しておくことを検討します。(Service-Task Addon)

M416-1


a. IT知識要求の視点(スクリプト工程と比較)
スクリプト知識が無いフロー設計者も工程の自動化を推進できるようになります
b. モデリングコストの視点(スクリプト工程と比較)
似たようなスクリプトを何度も記述する必要が無くなります
  • 情シス部門とプロセスオーナーの責任境界とする考え方も有効です
  • 作成した[アドオンXML]のインポート方法については M415 をご参照ください
  • コードサンプルは M416(本ページ)下部、もしくは M415 のダウンロードをご参照ください
a. 自動工程によるアウトプットの視点
格納されるデータ内容や外部システムの自動操作内容など
b. 自動工程へのインプットの視点
検査対象の業務データや参照する外部システムのデータ名など
  • 自動工程(サービスタスク)の抽象名は<label>要素にて定義します (最大64文字)
  • aの例: <label>Random Number Generator</label>
  • bの例: <label>Weather Info Getter</label>
  • 概要を<summary>要素にて定義できます (最大250文字)
  • ヘルプページのURLを<help-page-url>要素にて定義できます (最大250文字)
a. その工程が参照する業務データ項目 (SELECT)
データAに書き込むようにする、データBを読み込むようにする、など
b. その工程において利用される固定的な値 (TEXTFIELD, TEXTAREA)
最大値:”100″、ステータス:”承認されていない段階の原稿です”、など
  • コンフィグ項目は<configs>要素の子要素である<config>で列挙します
  • コンフィグ項目<config>は最大20件まで列挙できます

R4160 Addon-XML config 要素の各属性

1. サーバサイドスクリプトを記述する
スクリプト工程(M230)で利用できる ECMA コードで記述します
  • ECMAScript (JavaScript) の知識が必要となります
  • 一部の Java クラスを利用することも可能です
  • スクリプト部は <script><![CDATA[]]></script< の間に記述します
  • コンフィグ部の参照には、特別なメソッドconfigs.get("♦configName♦")を使用します
  • configs.get("♦configName♦"): instanceof java.lang.String
  • ワークフローデータの参照にはfindDataByNumber( "♦dataId♦" )等を使用します(M230)
  • 更新にはsetDataByNumber( "♦dataId♦", ♦value♦ )等を使用します(M230)
<script><![CDATA[
//// == Config Retrieving ==
var dataIdA = configs.get( "conf_DataIdA" ) + "";
var dataIdB = configs.get( "conf_DataIdB" ) + "";
var dataIdC = configs.get( "conf_DataIdC" ) + "";
// convert java.lang.String → javascript string

//// == Data Retrieving ==
var workflowDataA = engine.findDataByNumber( dataIdA ) + "";
var workflowDataB = engine.findDataByNumber( dataIdB ) + "";
// convert java.lang.String → javascript string

//// == Calculating ==
var newData = workflowDataA + workflowDataB;

//// == Data Updating ==
engine.setDataByNumber( dataIdC, newData ); 
]]></script>
R2300 利用可能な Java クラス
1. 画像ファイルを準備する
64px 以下の画像ファイルを用意します(JPEG, GIF, PNG のみ)
2. Base64 エンコードする
変換ソフトや変換サービスを利用します
  • アイコンデータ<icon>要素にて定義します
  • ロゴは、Drag&Dropで配置された際に表示されます
1. locale属性をもつlabel要素を追加する
ワークフロー設計者の想定言語の数だけ<label>を追加します
  • たとえば日本語設計者向けに<label locale="ja">乱数ジェネレータ</label>と設定します
  • en(default), ja, de, es, fr, ko, pt, zh_CN

M416-2M416-3


サンプルA1

<?xml version="1.0" encoding="UTF-8"?><service-task-definition>

<label>Random Number Generator</label>
<label locale="ja">乱数ジェネレータ</label>

<summary>A random number that does not exceed the config "A" (e.g.: 0 to 99) will be stored in the Data item selected in the config "B"
</summary>
<summary locale="ja">"A"でセットした上限値を超えない乱数が、"B"で選択した数値型データ項目に格納されます
</summary>

<help-page-url>https://www.questetra.com/tour/m4/m415/addon-random-number/</help-page-url>
<help-page-url locale="ja">https://www.questetra.com/ja/tour/m4/m415/addon-random-number/</help-page-url>

 

<configs>
  <config name="conf_MaxNum" required="true" form-type="TEXTFIELD">
    <label>A: Set Max Number (100 returns 0 - 99)</label>
    <label locale="ja">A: 乱数上限値をセットしてください (100: 0 - 99)</label>
  </config>
  <config name="conf_DataIdB" required="true" form-type="SELECT" select-data-type="DECIMAL">
    <label>B: Select NUMERIC DATA for Random Number (update)</label>
    <label locale="ja">B: 乱数が格納される数値型データを選択してください (更新)</label>
  </config>
</configs>

 

<script><![CDATA[
// Random Number Generator (ver. 20181018)
// (c) 2017, Questetra, Inc. (the MIT License)

//// == Config Retrieving / 工程コンフィグの参照 ==
var maxNum = configs.get( "conf_MaxNum" ) - 0;
// convert 'java.lang.String' to 'javascript number'
var dataIdB = configs.get( "conf_DataIdB" ) + "";
// convert 'java.lang.String' to 'javascript string'

//// == Data Retrieving / ワークフローデータの参照 ==
// (none)

//// == Calculating / 演算 ==
var randNum = Math.floor( Math.random() * maxNum );
// Math.random(): 0.00 to 0.99

//// == Data Updating / ワークフローデータへの代入 ==
engine.setDataByNumber( dataIdB, java.math.BigDecimal( randNum ) );
]]></script>

 

<icon>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEFUlEQVRYR8VXQVIbORT9X2bVXgRO
EDjBhBPE2YFEVcgJEk4w5ASBE4w5QewT4FQhwS7mBIETBE4wnkU3G7p/6mkkl1rT7ZhJqugqqgC1
paf333v/m+mZH37m8+mXAezt7W0z80tc5OHh4XY+ny+ecqn/DUBr/YmIPjDzdnqgiNwR0biqquk6
YJ4MQGv9iojO84PzW4vITdM0766urgCo93kSANA9GAy+EdEmdhSRM6XU7OLiYo6/sa6U+kBEx8z8
gojm1to3vw2A1vobM78SkX+IaOScuxmNRh5MSvfBwcFIRL4GkLt4rw/E2gxorVHvz+mmOLwoCoDa
rOt6N6XbGCN4l5nfRIa6QDwFwPdQ96m1FjRTBmrmnHuH/6cM1HW9s0oHawGA8JgZtad0w1iSeDMI
j5lhw1Fg6otz7vCXNaC1PmFm2O7WWgsXEOgfDod/h4Oumfl1ZsfrqqoOf2bFlQzEkGHmcRDfmXPu
OKe/LMutoiiQB/62YOLy8nK2TiD1AtBaf2ZmX+v4pIIyxkyI6H2y/NFaO17n0NaeXR8Ifv+er1lr
l4Dz+od3fR4Q0cRaO8UvxhiARNlg33nTNNNUlJ0MGGNA818icu+ca0VtDioVaKYBeH+zKzFF5Ng5
d+Zt2sWA1nrGzG+RL03TnIS63kfkaQNCmfCDVCSiRThwWRqEFjPPQo/Au75xEZEvWR8AiO7P7EbL
RNNa5+ut+kcG4Zq6rr0wlVJIzknUDgA553Y6AYSEAwveWriFc85HLp6O+o+bprlOlW+MucHhYC28
v22t3drf3z9USp1jH2hqpQ0TtK1AiTGbl09ETp1zvmS4BDIgyRBc5A6xDW2IyLVzbrQSgNY6xu+S
4vQGHfpZlGW5E8Mn757x/bSZ9QJIrSgiq+rfwiEiR6h1sKDPCrgphBT0AHGDiRmsmvoaovMxy8zw
81aXFRNWugzkZ4SYlomd76qq2i2K4isSNWHilIPgWguZ+pcbpl2u63RQW1XVdlYCH2giAlEfBvrR
tCDwBaeWAvogkqWP0+5njMGQ4TtdDwAvwijA4JiWZSE+ERlHJwDAf4SGPo/BEqNVUk+fjhk7pygb
QiumZhjLzp1zu9ENw+FwLCIAjnREZ8Ve0MYXjpbCANnXwdLBA+FCRH9EH4cDsbEf0RKWOptTNsQc
gQEfu2ihSqmPcXwK2ngd0Ebap3VdnwwGg9io5nVdHyFsgmswsi1LJCKTpmlO47pS6j0zx2j/NwfC
mD0PU2xfeVvqzhjp+sySpZ4Nb8uyHEGs3oYBBMTSmmrCh6fMPMkHSwRSGFRicwHIe4zleBcJmIzn
fqvgAHxpGUentIIING5sbPj2+/j4ePezLxURvFJqs2maRdf4jcthHe92TcdrDaW9dfkNC88O4AcI
zqgZxW8imAAAAABJRU5ErkJggg==
</icon>

</service-task-definition>
サンプルA2

<?xml version="1.0" encoding="UTF-8"?><service-task-definition>

<label>Random Number Generator (dynamic)</label>
<label locale="ja">乱数ジェネレータ (上限変動版)</label>

<summary>A random number that does not exceed the number in the Data item selected config "A" (e.g.: 0 to 99) will be stored in the Data item selected in the config "B"
</summary>
<summary locale="ja">"A"で選択した数値型データに格納されている数を超えない乱数が、"B"で選択した数値型データ項目に格納されます
</summary>

<help-page-url>https://www.questetra.com/tour/m4/m415/addon-random-number-2/</help-page-url>
<help-page-url locale="ja">https://www.questetra.com/ja/tour/m4/m415/addon-random-number-2/</help-page-url>

 

<configs>
  <config name="conf_DataIdA" required="true" form-type="SELECT" select-data-type="DECIMAL">
    <label>A: Select NUMERIC DATA for Max Number</label>
    <label locale="ja">A: 乱数上限値が格納されている数値型データを選択してください (100: 0 - 99)</label>
  </config>
  <config name="conf_DataIdB" required="true" form-type="SELECT" select-data-type="DECIMAL">
    <label>B: Select NUMERIC DATA for Random Number (update)</label>
    <label locale="ja">B: 乱数が格納される数値型データを選択してください (更新)</label>
  </config>
</configs>

 

<script><![CDATA[
// Random Number Generator - Dynamic (ver. 20181020)
// (c) 2017, Questetra, Inc. (the MIT License)

//// == Config Retrieving / 工程コンフィグの参照 ==
var dataIdA = configs.get( "conf_DataIdA" ) + "";
var dataIdB = configs.get( "conf_DataIdB" ) + "";
// convert 'java.lang.String' to 'javascript string'

//// == Data Retrieving / ワークフローデータの参照 ==
var maxNum = engine.findDataByNumber( dataIdA ) - 0;
// convert 'java.math.BigDecimal' to 'javascript number'

//// == Calculating / 演算 ==
var randNum = Math.floor( Math.random() * maxNum );
// Math.random(): 0.00 to 0.99

//// == Data Updating / ワークフローデータへの代入 ==
engine.setDataByNumber( dataIdB, java.math.BigDecimal( randNum ) );
]]></script>

 

<icon>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEFUlEQVRYR8VXQVIbORT9X2bVXgRO
EDjBhBPE2YFEVcgJEk4w5ASBE4w5QewT4FQhwS7mBIETBE4wnkU3G7p/6mkkl1rT7ZhJqugqqgC1
paf333v/m+mZH37m8+mXAezt7W0z80tc5OHh4XY+ny+ecqn/DUBr/YmIPjDzdnqgiNwR0biqquk6
YJ4MQGv9iojO84PzW4vITdM0766urgCo93kSANA9GAy+EdEmdhSRM6XU7OLiYo6/sa6U+kBEx8z8
gojm1to3vw2A1vobM78SkX+IaOScuxmNRh5MSvfBwcFIRL4GkLt4rw/E2gxorVHvz+mmOLwoCoDa
rOt6N6XbGCN4l5nfRIa6QDwFwPdQ96m1FjRTBmrmnHuH/6cM1HW9s0oHawGA8JgZtad0w1iSeDMI
j5lhw1Fg6otz7vCXNaC1PmFm2O7WWgsXEOgfDod/h4Oumfl1ZsfrqqoOf2bFlQzEkGHmcRDfmXPu
OKe/LMutoiiQB/62YOLy8nK2TiD1AtBaf2ZmX+v4pIIyxkyI6H2y/NFaO17n0NaeXR8Ifv+er1lr
l4Dz+od3fR4Q0cRaO8UvxhiARNlg33nTNNNUlJ0MGGNA818icu+ca0VtDioVaKYBeH+zKzFF5Ng5
d+Zt2sWA1nrGzG+RL03TnIS63kfkaQNCmfCDVCSiRThwWRqEFjPPQo/Au75xEZEvWR8AiO7P7EbL
RNNa5+ut+kcG4Zq6rr0wlVJIzknUDgA553Y6AYSEAwveWriFc85HLp6O+o+bprlOlW+MucHhYC28
v22t3drf3z9USp1jH2hqpQ0TtK1AiTGbl09ETp1zvmS4BDIgyRBc5A6xDW2IyLVzbrQSgNY6xu+S
4vQGHfpZlGW5E8Mn757x/bSZ9QJIrSgiq+rfwiEiR6h1sKDPCrgphBT0AHGDiRmsmvoaovMxy8zw
81aXFRNWugzkZ4SYlomd76qq2i2K4isSNWHilIPgWguZ+pcbpl2u63RQW1XVdlYCH2giAlEfBvrR
tCDwBaeWAvogkqWP0+5njMGQ4TtdDwAvwijA4JiWZSE+ERlHJwDAf4SGPo/BEqNVUk+fjhk7pygb
QiumZhjLzp1zu9ENw+FwLCIAjnREZ8Ve0MYXjpbCANnXwdLBA+FCRH9EH4cDsbEf0RKWOptTNsQc
gQEfu2ihSqmPcXwK2ngd0Ebap3VdnwwGg9io5nVdHyFsgmswsi1LJCKTpmlO47pS6j0zx2j/NwfC
mD0PU2xfeVvqzhjp+sySpZ4Nb8uyHEGs3oYBBMTSmmrCh6fMPMkHSwRSGFRicwHIe4zleBcJmIzn
fqvgAHxpGUentIIING5sbPj2+/j4ePezLxURvFJqs2maRdf4jcthHe92TcdrDaW9dfkNC88O4AcI
zqgZxW8imAAAAABJRU5ErkJggg==
</icon>

</service-task-definition>