If you want to automate a Processing step to, for example, obtain the number of characters and the hash value, you have to write scripts using a [Script Task]. If you need to use the same [Script Task] in different places you should consider packaging the script as an [Add-on XML]. (Service-Task Addon)
1. Overview of the Advantages of Creating Addon XML (Packaging)
- a. Aspects of IT skill requirements (compared with a Script Task)
- A flow designer who does not have script knowledge should be capable of process automation as well.
- b. Aspects of the modelling cost (compared with Script Task)
- There will be no need to write the same script repeatedly.
- The boundary between the IT Department's and the Process owner's responsibilities should be considered
- Go to M415 for more info on how to import a pre-existing [Addon XML]
- Go to M416 (Bottom of this page) or to "Download" in M415 for Sample codes
2. Determine the Package Name
- a. Aspects of output by auto-step
- E.g. contents of data to be stored, contents of external system auto-operation, etc.
- b. Aspects of input by auto-step
- E.g. business data to be inspected, data name in external system to be referenced, etc.
- You can set the file name of the package file (Add-on XML) with 52 characters or less.
- The name of the auto-step (Service Task) is defined in
<label>
element (64 characters max.) - Sample of a:
<label>Random Number Generator</label>
- Sample of b:
<label>Weather Info Getter</label>
- You can define an overview in
<summary>
element (250 characters max.) - You can define the URL of the help page in
<help-page-url>
element (250 characters max.) - You can define the last modified date in
<last-modified>
element (YYYY-MM-DD)
3. Determine the Configuration Items Required
- a. Business Data Items which are to be referenced by the Step (SELECT)
- E.g. To write to Data A, To read Data B. etc.
- b. Fixed values used in the Step (TEXTFIELD, TEXTAREA, QUSER, OAUTH2)
- E.g. Maximum value: "100", Status: This Draft is at the "not yet approved" stage, etc.
- List configuration items with
<config>
which is a child element of<configs>
- You can list up to 20 configuration items using
<config>
R4160: Addon-XML Attributes of config element
R2272: Output of Strings via EL syntax
4. Determine Automatic Processing Behavior
- 1. Write a server-side script
- Write in ECMA code that can be used in the script Step (M230).
- Knowledge of ECMAScript (JavaScript) is required
- Using parts of Java classes is also possible
- Script is described between
<script><![CDATA[
and]]></script>
- Use the special method
configs.getObject("♦configName♦")
andconfigs.get("♦configName♦")
for referring to configconfigs.getObject("♦configName♦")
will return the following objects :- form-type="QUSER" : QuserView object
- form-type="SELECT" : ProcessDataDefinitionView object
- If typing in a text field with the config defined as editable="true": null
- configs.get("♦configName♦") will return the strings entered in the text field
configs.get("♦configName♦")
will return java.lang.String object
- Use
findData( ♦dataDef♦ )
andfindDataByNumber( "♦dataId♦" )
, etc. for referring to Business Data (M230) - Use
setData( ♦dataDef♦, ♦value♦ )
andsetDataByNumber( "♦dataId♦", ♦value♦ )
, etc. for updating Business Data (M230) - When setting the processing engine to "GraalJS"
<engine-type> 2 </ engine-type>
is specified<engine-type> 1 </ engine-type>
: Nashron (Obsoleted (Ver. 14.0))
- HTTP requests must be up to 10 per one automatic Task
R2300: Java Classes available in Script Task
R2301: Script Data Retrieving / Updating
5. Determine the Process Logo (Optional)
- 1. Prepare an image file
- Prepare a image file of less than 64px (JPEG, GIF, PNG only)
- 2. Encode to Base64
- Use converter software or a web service
- Define using the icon data
<icon>
element - The logo will be displayed upon placement using Drag & Drop
6. Support Multiple Languages (Optional)
- 1. Add label elements with the locale attribute
- Add
<label>
for as many languages as you need for your Workflow designers
- E.g. Configure
<label locale="es">Generador de Numeros aleatorios</label>
for Spanish designers - en(default), ja, de, es, fr, ko, pt, zh_CN
A. Sample of Addon XML
Sample A1
<?xml version="1.0" encoding="UTF-8"?><service-task-definition> <label>Random Number Generator</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> <help-page-url>https://www.questetra.com/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> </config> <config name="conf_DataIdB" required="true" form-type="SELECT" select-data-type="DECIMAL"> <label>B: Select NUMERIC DATA for Random Number (update)</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; // convet 'java.lang.String' to 'javascript number' var dataIdB = configs.get( "conf_DataIdB" ) + ""; // convet '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> 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>
Sample A2
<?xml version="1.0" encoding="UTF-8"?><service-task-definition> <label>Random Number Generator (dynamic)</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> <help-page-url>https://www.questetra.com/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 (100 returns 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> </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" ) + ""; // convet 'java.lang.String' to 'javascript string' //// == Data Retrieving == var maxNum = engine.findDataByNumber( dataIdA ) - 0; // convet '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> 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>
Please also see each Add-on XML file that is publicly available.
Support site: Add Automatic Processing Process (Addon)
X. Blog Articles
- 2018-05-09: Using Log Output for Debugging of Script Task
Comments
0 comments
Please sign in to leave a comment.