M416 自動工程
Last updated Sep 21, 2017

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

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

M416-1


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

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


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

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


<configs>
  <config name="conf_MaxNum" required="true" form-type="TEXTFIELD">
    <label>Set MAX NUMBER (100 returns 0 - 99)</label>
    <label locale="ja">最大数をセットしてください (100: 0 - 99)</label>
  </config>
  <config name="conf_UpdateDataId" required="true" form-type="SELECT" select-data-type="DECIMAL">
    <label>Select RANDOM NUMBER DATA</label>
    <label locale="ja">乱数が格納される数値型データを選択してください</label>
  </config>
</configs>


<script><![CDATA[
var maxNum = configs.get( "conf_MaxNum" ); 
var dataId = configs.get( "conf_UpdateDataId" ); // (returns Number)
var tmpNum = Math.random() * maxNum; // Math.random() -> 0.00 ~ 0.99
var retNum = Math.floor( tmpNum );
retVal.put( dataId, java.math.BigDecimal( retNum ) );
]]></script>


<icon>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEFUlEQVRYR8VXQVIbORT9X2bVXgROEDjBhBPE2YFEVcgJEk4w5ASBE4w5QewT4FQhwS7mBIETBE4wnkU3G7p/6mkkl1rT7ZhJqugqqgC1paf333v/m+mZH37m8+mXAezt7W0z80tc5OHh4XY+ny+ecqn/DUBr/YmIPjDzdnqgiNwR0biqquk6YJ4MQGv9iojO84PzW4vITdM0766urgCo93kSANA9GAy+EdEmdhSRM6XU7OLiYo6/sa6U+kBEx8z8gojm1to3vw2A1vobM78SkX+IaOScuxmNRh5MSvfBwcFIRL4GkLt4rw/E2gxorVHvz+mmOLwoCoDarOt6N6XbGCN4l5nfRIa6QDwFwPdQ96m1FjRTBmrmnHuH/6cM1HW9s0oHawGA8JgZtad0w1iSeDMIj5lhw1Fg6otz7vCXNaC1PmFm2O7WWgsXEOgfDod/h4Oumfl1ZsfrqqoOf2bFlQzEkGHmcRDfmXPuOKe/LMutoiiQB/62YOLy8nK2TiD1AtBaf2ZmX+v4pIIyxkyI6H2y/NFaO17n0NaeXR8Ifv+er1lrl4Dz+od3fR4Q0cRaO8UvxhiARNlg33nTNNNUlJ0MGGNA818icu+ca0VtDioVaKYBeH+zKzFF5Ng5d+Zt2sWA1nrGzG+RL03TnIS63kfkaQNCmfCDVCSiRThwWRqEFjPPQo/Au75xEZEvWR8AiO7P7EbLRNNa5+ut+kcG4Zq6rr0wlVJIzknUDgA553Y6AYSEAwveWriFc85HLp6O+o+bprlOlW+MucHhYC28v22t3drf3z9USp1jH2hqpQ0TtK1AiTGbl09ETp1zvmS4BDIgyRBc5A6xDW2IyLVzbrQSgNY6xu+S4vQGHfpZlGW5E8Mn757x/bSZ9QJIrSgiq+rfwiEiR6h1sKDPCrgphBT0AHGDiRmsmvoaovMxy8zw81aXFRNWugzkZ4SYlomd76qq2i2K4isSNWHilIPgWguZ+pcbpl2u63RQW1XVdlYCH2giAlEfBvrRtCDwBaeWAvogkqWP0+5njMGQ4TtdDwAvwijA4JiWZSE+ERlHJwDAf4SGPo/BEqNVUk+fjhk7pygbQiumZhjLzp1zu9ENw+FwLCIAjnREZ8Ve0MYXjpbCANnXwdLBA+FCRH9EH4cDsbEf0RKWOptTNsQcgQEfu2ihSqmPcXwK2ngd0Ebap3VdnwwGg9io5nVdHyFsgmswsi1LJCKTpmlO47pS6j0zx2j/NwfCmD0PU2xfeVvqzhjp+sySpZ4Nb8uyHEGs3oYBBMTSmmrCh6fMPMkHSwRSGFRicwHIe4zleBcJmIznfqvgAHxpGUentIIING5sbPj2+/j4ePezLxURvFJqs2maRdf4jcthHe92TcdrDaW9dfkNC88O4AcIzqgZxW8imAAAAABJRU5ErkJggg==
</icon>

</service-task-definition>