"文字数とハッシュ値を取得する" といった処理工程を自動化したい場合、[スクリプト工程]を使ってスクリプトを記述することになります。もし同様の[スクリプト工程]を何か所にも配置する必要があるなら[アドオンXML]としてパッケージ化しておくことを検討します。(Service-Task Addon)
1. アドオンXML作成(パッケージ化)のメリットについて、概要を理解する
- a. IT知識要求の視点(スクリプト工程と比較)
- スクリプト知識が無いフロー設計者も工程の自動化を推進できるようになります
- b. モデリングコストの視点(スクリプト工程と比較)
- 似たようなスクリプトを何度も記述する必要が無くなります
- 情シス部門とプロセスオーナーの責任境界とする考え方も有効です
- 作成した[アドオンXML]のインポート方法については M415 をご参照ください
- コードサンプルは M416(本ページ)下部、もしくは M415 のダウンロードをご参照ください
2. パッケージ名称を決める
- a. 自動工程によるアウトプットの視点
- 格納されるデータ内容や外部システムの自動操作内容など
- b. 自動工程へのインプットの視点
- 検査対象の業務データや参照する外部システムのデータ名など
- パッケージファイル(アドオンXML)のファイル名は52文字以下で設定します
- 自動工程(サービスタスク)の抽象名は
<label>
要素にて定義します (最大64文字) - aの例:
<label>Random Number Generator</label>
- bの例:
<label>Weather Info Getter</label>
- 概要を
<summary>
要素にて定義できます (最大250文字) - ヘルプページのURLを
<help-page-url>
要素にて定義できます (最大250文字) - 最終更新日を
<last-modified>
要素にて定義できます (YYYY-MM-DD)
3. 配置した際に必要となるコンフィグ項目を決める
- a. その工程が参照する業務データ項目 (SELECT)
- データAに書き込むようにする、データBを読み込むようにする、など
- b. その工程において利用される固定的な値 (TEXTFIELD, TEXTAREA, QUSER, OAUTH2)
- 最大値:"100"、ステータス:"承認されていない段階の原稿です"、など
- コンフィグ項目は
<configs>
要素の子要素である<config>
で列挙します - コンフィグ項目
<config>
は最大20件まで列挙できます
R4160: Addon-XML config 要素の各属性
R2272: EL式による文字列としての出力(データ設定式)
4. 自動処理の挙動を決める
- 1. サーバサイドスクリプトを記述する
- スクリプト工程(M230)で利用できる ECMA コードで記述します
- ECMAScript (JavaScript) の知識が必要となります
- 一部の Java クラスを利用することも可能です
- スクリプト部は
<script><![CDATA[
と]]></script>
の間に記述します - コンフィグ部の参照には、特別なメソッド
configs.getObject("♦configName♦")
やconfigs.get("♦configName♦")
を使用しますconfigs.getObject("♦configName♦")
は次のオブジェクトを返します- form-type="QUSER" : QuserView オブジェクト
- form-type="SELECT" : ProcessDataDefinitionView オブジェクト
- editable="true" で、テキストフィールドへの入力の場合:null
- configs.get("♦configName♦") がテキストフィールドへの入力文字列を返します
configs.get("♦configName♦")
は java.lang.String オブジェクトを返します
- ワークフローデータの参照には、
findData( ♦dataDef♦ )
やfindDataByNumber( "♦dataId♦" )
等を使用します(M230) - 更新には
setData( ♦dataDef♦, ♦value♦ )
やsetDataByNumber( "♦dataId♦", ♦value♦ )
等を使用します(M230) - 処理エンジンを GraalJS にする場合
<engine-type>2</engine-type>
と指定します<engine-type>1</engine-type>
: Nashorn(廃止されました(Ver. 14.0))
- HTTPリクエストは1自動処理工程につき10回に制限されます
R2300: 利用可能な Java クラス
R2301: Scriptデータ取得/代入
5. 工程のロゴを決める (任意)
- 1. 画像ファイルを準備する
- 64px 以下の画像ファイルを用意します(JPEG, GIF, PNG のみ)
- 2. Base64 エンコードする
- 変換ソフトや変換サービスを利用します
- アイコンデータ
<icon>
要素にて定義します - ロゴは、Drag&Dropで配置された際に表示されます
6. 多言語ユーザに対応する (任意)
- 1. locale属性をもつlabel要素を追加する
- ワークフロー設計者の想定言語の数だけ
<label>
を追加します
- たとえば日本語設計者向けに
<label locale="ja">乱数ジェネレータ</label>
と設定します - en(default), ja, de, es, fr, ko, pt, zh_CN
A. アドオン XML のサンプル
サンプル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>
<engine-type>2</engine-type> <last-modified>2018-11-11</last-modified> <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, new java.math.BigDecimal( randNum ) ); ]]></script> <icon> iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEFU lEQVRYR8VXQVIbORT9X2bVXgROEDjBhBPE2YFEVcgJEk4w5ASB E4w5QewT4FQhwS7mBIETBE4wnkU3G7p/6mkkl1rT7ZhJqugqqg C1paf333v/m+mZH37m8+mXAezt7W0z80tc5OHh4XY+ny+ecqn/ DUBr/YmIPjDzdnqgiNwR0biqquk6YJ4MQGv9iojO84PzW4vITd M0766urgCo93kSANA9GAy+EdEmdhSRM6XU7OLiYo6/sa6U+kBE x8z8gojm1to3vw2A1vobM78SkX+IaOScuxmNRh5MSvfBwcFIRL 4GkLt4rw/E2gxorVHvz+mmOLwoCoDarOt6N6XbGCN4l5nfRIa6 QDwFwPdQ96m1FjRTBmrmnHuH/6cM1HW9s0oHawGA8JgZtad0w1 iSeDMIj5lhw1Fg6otz7vCXNaC1PmFm2O7WWgsXEOgfDod/h4Ou mfl1ZsfrqqoOf2bFlQzEkGHmcRDfmXPuOKe/LMutoiiQB/62YO Ly8nK2TiD1AtBaf2ZmX+v4pIIyxkyI6H2y/NFaO17n0NaeXR8I fv+er1lrl4Dz+od3fR4Q0cRaO8UvxhiARNlg33nTNNNUlJ0MGG NA818icu+ca0VtDioVaKYBeH+zKzFF5Ng5d+Zt2sWA1nrGzG+R L03TnIS63kfkaQNCmfCDVCSiRThwWRqEFjPPQo/Au75xEZEvWR 8AiO7P7EbLRNNa5+ut+kcG4Zq6rr0wlVJIzknUDgA553Y6AYSE AwveWriFc85HLp6O+o+bprlOlW+MucHhYC28v22t3drf3z9USp 1jH2hqpQ0TtK1AiTGbl09ETp1zvmS4BDIgyRBc5A6xDW2IyLVz brQSgNY6xu+S4vQGHfpZlGW5E8Mn757x/bSZ9QJIrSgiq+rfwi EiR6h1sKDPCrgphBT0AHGDiRmsmvoaovMxy8zw81aXFRNWugzk Z4SYlomd76qq2i2K4isSNWHilIPgWguZ+pcbpl2u63RQW1XVdl YCH2giAlEfBvrRtCDwBaeWAvogkqWP0+5njMGQ4TtdDwAvwijA 4JiWZSE+ERlHJwDAf4SGPo/BEqNVUk+fjhk7pygbQiumZhjLzp 1zu9ENw+FwLCIAjnREZ8Ve0MYXjpbCANnXwdLBA+FCRH9EH4cD sbEf0RKWOptTNsQcgQEfu2ihSqmPcXwK2ngd0Ebap3VdnwwGg9 io5nVdHyFsgmswsi1LJCKTpmlO47pS6j0zx2j/NwfCmD0PU2xf eVvqzhjp+sySpZ4Nb8uyHEGs3oYBBMTSmmrCh6fMPMkHSwRSGF RicwHIe4zleBcJmIznfqvgAHxpGUentIIING5sbPj2+/j4ePez LxURvFJqs2maRdf4jcthHe92TcdrDaW9dfkNC88O4AcIzqgZxW 8imAAAAABJRU5ErkJggg== </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>
<engine-type>2</engine-type> <last-modified>2018-11-11</last-modified> <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, new java.math.BigDecimal( randNum ) ); ]]></script> <icon> iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEFU lEQVRYR8VXQVIbORT9X2bVXgROEDjBhBPE2YFEVcgJEk4w5ASB E4w5QewT4FQhwS7mBIETBE4wnkU3G7p/6mkkl1rT7ZhJqugqqg C1paf333v/m+mZH37m8+mXAezt7W0z80tc5OHh4XY+ny+ecqn/ DUBr/YmIPjDzdnqgiNwR0biqquk6YJ4MQGv9iojO84PzW4vITd M0766urgCo93kSANA9GAy+EdEmdhSRM6XU7OLiYo6/sa6U+kBE x8z8gojm1to3vw2A1vobM78SkX+IaOScuxmNRh5MSvfBwcFIRL 4GkLt4rw/E2gxorVHvz+mmOLwoCoDarOt6N6XbGCN4l5nfRIa6 QDwFwPdQ96m1FjRTBmrmnHuH/6cM1HW9s0oHawGA8JgZtad0w1 iSeDMIj5lhw1Fg6otz7vCXNaC1PmFm2O7WWgsXEOgfDod/h4Ou mfl1ZsfrqqoOf2bFlQzEkGHmcRDfmXPuOKe/LMutoiiQB/62YO Ly8nK2TiD1AtBaf2ZmX+v4pIIyxkyI6H2y/NFaO17n0NaeXR8I fv+er1lrl4Dz+od3fR4Q0cRaO8UvxhiARNlg33nTNNNUlJ0MGG NA818icu+ca0VtDioVaKYBeH+zKzFF5Ng5d+Zt2sWA1nrGzG+R L03TnIS63kfkaQNCmfCDVCSiRThwWRqEFjPPQo/Au75xEZEvWR 8AiO7P7EbLRNNa5+ut+kcG4Zq6rr0wlVJIzknUDgA553Y6AYSE AwveWriFc85HLp6O+o+bprlOlW+MucHhYC28v22t3drf3z9USp 1jH2hqpQ0TtK1AiTGbl09ETp1zvmS4BDIgyRBc5A6xDW2IyLVz brQSgNY6xu+S4vQGHfpZlGW5E8Mn757x/bSZ9QJIrSgiq+rfwi EiR6h1sKDPCrgphBT0AHGDiRmsmvoaovMxy8zw81aXFRNWugzk Z4SYlomd76qq2i2K4isSNWHilIPgWguZ+pcbpl2u63RQW1XVdl YCH2giAlEfBvrRtCDwBaeWAvogkqWP0+5njMGQ4TtdDwAvwijA 4JiWZSE+ERlHJwDAf4SGPo/BEqNVUk+fjhk7pygbQiumZhjLzp 1zu9ENw+FwLCIAjnREZ8Ve0MYXjpbCANnXwdLBA+FCRH9EH4cD sbEf0RKWOptTNsQcgQEfu2ihSqmPcXwK2ngd0Ebap3VdnwwGg9 io5nVdHyFsgmswsi1LJCKTpmlO47pS6j0zx2j/NwfCmD0PU2xf eVvqzhjp+sySpZ4Nb8uyHEGs3oYBBMTSmmrCh6fMPMkHSwRSGF RicwHIe4zleBcJmIznfqvgAHxpGUentIIING5sbPj2+/j4ePez LxURvFJqs2maRdf4jcthHe92TcdrDaW9dfkNC88O4AcIzqgZxW 8imAAAAABJRU5ErkJggg== </icon> </service-task-definition>
公開されている各 Addon XML ファイルもご参照ください。
※サポートサイト『自動処理工程を追加する(アドオン)』
X. 業務アプリ
コメント
0件のコメント
サインインしてコメントを残してください。