"文字数とハッシュ値を取得する" といった処理工程を自動化したい場合、[スクリプト工程]を使ってスクリプトを記述することになります。もし同様の[スクリプト工程]を何か所にも配置する必要があるなら[アドオン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) - 廃止予定アイテムかどうかを
<deprecated>
要素にて定義できます(true / false)
3. 配置した際に必要となるコンフィグ項目を決める
- a. その工程が参照する業務データ項目 (SELECT)
- データAに書き込むようにする、データBを読み込むようにする、など
- b. その工程において利用される固定的な値 (TEXTFIELD, TEXTAREA, QUSER, OAUTH2)
- 最大値:"100"、ステータス:"承認されていない段階の原稿です"、など
- コンフィグ項目は
<configs>
要素の子要素である<config>
で列挙します - コンフィグ項目
<config>
は最大20件まで列挙できます - 必須要素
<configs>
は親要素<tab>
でグルーピングすることも可能です(v15.0~) - グルーピング要素
<tab>
を利用する場合は、親要素(ルート要素)<tabs>
が必要です -
<config>
要素にdepends-on
属性を指定して、他の設定項目の値に応じて表示/非表示を切り替えることができます
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>3</engine-type>
と指定します(<engine-type>
要素は必須) - 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 のサンプル
<?xml version="1.0" encoding="UTF-8"?><service-task-definition>
<label>#Number: Generate Random</label>
<label locale="ja">#数値: 乱数生成</label>
<summary>Generates a random number. When a token reaches this automated step, a numerical value within the specified range is generated each time. The decimal part is rounded down toward 0 according to the workflow data definition.</summary>
<summary locale="ja">乱数を生成します。案件トークンがこの自動工程に到達すると、都度、指定範囲内の数値が生成されます。小数点以下はワークフローのデータ定義に応じて0へ近づく方向で切り捨てられます。</summary>
<license>(C) Questetra, Inc. (MIT License)</license>
<help-page-url>https://support.questetra.com/addons/number-generate-random-2021/</help-page-url>
<help-page-url locale="ja">https://support.questetra.com/ja/addons/number-generate-random-2021/</help-page-url>
<configs>
<config name="conf_Lower" required="true" el-enabled="true" form-type="TEXTFIELD">
<label>A: Set Lower Limit (e.g. "0", "-0.5")</label>
<label locale="ja">A: 下限値をセットしてください (例 "0", "-2.5")</label>
</config>
<config name="conf_Upper" required="true" el-enabled="true" form-type="TEXTFIELD">
<label>B: Set Upper Limit (e.g. "10", "0.5")</label>
<label locale="ja">B: 上限値をセットしてください (例 "10", "2.5")</label>
</config>
<config name="conf_DataIdC" required="true" form-type="SELECT" select-data-type="DECIMAL">
<label>C: Select NUMERIC DATA for Generated Number (update)</label>
<label locale="ja">C: 生成された乱数が格納される数値型データを選択してください (更新)</label>
</config>
</configs>
<engine-type>3</engine-type>
<last-modified>2023-08-08</last-modified>
<script><![CDATA[// GraalJS Script (engine type: 3)
// GraalJS Script (engine type: 2)
// (c) 2021, Questetra, Inc. (the MIT License)
//////// START "main()" ////////
main();
function main(){
//// == Config Retrieving / 工程コンフィグの参照 ==
const lower = configs.get( "conf_Lower" ) + ""; // config required
const upper = configs.get( "conf_Upper" ) + ""; // config required
const dataIdC = configs.get( "conf_DataIdC" ) + ""; // config required
// 'java.lang.String' (String Obj) to javascript primitive 'string'
// Design-time Config Format Check
const numLower = parseFloat( lower );
engine.log( " AutomatedTask Lower Limit: " + numLower );
const numUpper = parseFloat( upper );
engine.log( " AutomatedTask Upper Limit: " + numUpper );
if( isNaN(numLower) ){
throw new Error( "\n AutomatedTask ConfigError:" +
" Config {Lower} is not a number \n" );
}
if( isNaN(numUpper) ){
throw new Error( "\n AutomatedTask ConfigError:" +
" Config {Upper} is not a number \n" );
}
if( numLower > numUpper ){
throw new Error( "\n AutomatedTask ConfigError:" +
" Config {Lower} is greater than {Upper} \n" );
}
//// == Data Retrieving / ワークフローデータの参照 ==
// nothing (This Service Task is a CREATE type)
//// == Calculating / 演算 ==
let numDiff = numUpper - numLower;
let mathRand = Math.random(); // Math.random(): 0.00 to 0.99
engine.log( " AutomatedTask Math.random(): " + mathRand );
let numRand = mathRand * numDiff + numLower;
engine.log( " AutomatedTask Generated Random: " + numRand );
//// == Data Updating / ワークフローデータへの代入 ==
engine.setDataByNumber( dataIdC, new java.math.BigDecimal( numRand ) );
} //////// END "main()" ////////
]]></script>
<icon>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEWUlEQVRYR8WXXUiUWRjHf6+ObuOo
la6uYuuKKVvrGrkiSazlst4UBCFetH4QKjaTGKwgLN0UBIHSxm5B23jhepFpX7vQVbFiH7hLElIG
4SaOJbVKZq7fHzM5vss59uY4vvPO2O7iEW9mnuc8//M8////nFFY46UEXL+eMFTyUfgKlQwUkoCN
b/NHUelH4SEqt1H4FSszgeztH0Ajcbj4DrAB6wLZFJgD7IRSRykvjXKMAdixofA9YAmwsHfYNCo1
2LD7yvcNoJ6fgMPvWdg77TxWKvX20gdgpxmFb/6j4ovbqLRgo9B7z5UAAjh5xZYKCpILiAuLY8I1
wdWnVzn7+GwgeFd0YjmAxZmf97VTREgEjbmN7E/aT7AS/C5MRaX1r1YKWguYfDNpDETlsCcnlgAs
st1hRLjT2ac58vkRQoJCVhRxq24u9l7k4J2D/joxTSgpmjqWANTzA/Ctr+ysmCxavm5hc+RmnwWG
ZocovVPKjRc3/IH4ESvVImgRgDAZGDHSeVVaFbU7auXpxb/yNlWkz8zP8GTsCSmRKZx5fIZjncf8
ARA+ES3MahGAnWIULhhl1efUU7G1graBNnZ+tJMwk8AMrgUX155e4/nUc8q3lHNr4BYH2g74AyBU
UYKNJq0DDUCZUdap7FPsjt+NSTHJDlhCLAQpQYg/QTzRBVOQifuv7mNtt/oHAD9jpVzrwAMUMryz
smOzObT1EJf7LnM04yi74nfJkNn5WQTptCWAiI6IsTwaecT2X7aTE5dD10iXb1WoPMTGF1oH/va4
WN5tXJJawrkvz+Fyu+if6ifzw0z5XfdoN60DrWyL2oZjwkF6VDoCrPadkGh8WDxVf1RxodfnZEex
EqUBUPV6tufjPVL34mQNPQ0UpRSRGJ4oQ+fccwxODxJrjiU8JFx+Njw3TFNvE8WpxYQGhVL5eyXN
jmbf47CiGAKQAsmppyi1iLuDd4kxxzDqHJUk1IpqKrg3dE+ak3PBSW58Lu0v28n/Ld/YmDwA6I5A
g77Jsom8hDzqdtQRvS6avok+esZ6JOnGnGOyG3sT90oeCDMym8zcfHGTS32XjMjoMQI7uiQU2WWf
lnEy66QknZCcOLnQ/IK6gMVkIcGSIO8E0ZnO4U6SI5OlH/h1Ri8S6srQ0/2Ey4mZJ0UkseGDDZIX
AoRQgLbmF+Z5PfeaWfes5Mq4axxbu01eVjprmQx1jUhTgTi1qqrLihn1VpxegBMdq+mowd6t8x7x
MiJdKxYduJJ3RZ76fdazyWcUthXS8arDO93LiiXd9S+j45nHqU6vZn3o+lVhEP4gTn+9/7pentdl
JEIMrmOhgn2f7MP2mY20jWlyFFNvpjAHm6USvJdwyhMPTlDbVatX3Md1LEL9PEi8dxMeIUxHyM/p
dsqZizvBMe7A/qddmtKK5fNBokUG8CRb1SyWB/t5kmnBa/oo/X86scpn+VIn1vCHiQZiTX+aeRJo
zX6c/gvKB5L6D2XHtzBjw0oRAAAAAElFTkSuQmCC
</icon>
</service-task-definition>
公開されている各 Addon XML ファイル(アドオンサンプル)もご参照ください。
※サポートサイト『自動処理工程を追加する(アドオン)』
X. 業務アプリ
コメント
0件のコメント
サインインしてコメントを残してください。