1. Overview of the Advantages of Creating Addon XML (Packaging)
- a. Aspect of IT Skill Requirments (Compared with Script Task)
- A Flow Designer who does not have Script knowledge should be capable of promoting the automation of the process, as well
- b. Aspect of Modeling Cost (Compared with Script Task)
- There will be no need to write the same Script again and again
2. Determine the Package Name
- a. Aspect of Output of the Auto-step
- e.g.: Contents of Data to be stored, Contents of Auto-operation of external system, etc.
- b. Aspect of Input of the Auto-step
- e.g.: Business data to be inspected, Data name in external system to retrieve, etc.
- Name of 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 URL of help page in
<help-page-url>
element (250 characters max.)
3. Determine the Configuration Items Required
- a. Business Data Items which are to be referred 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)
- e.g.: Maximum value: “100”, Status:This Draft is on the stage of not yet approved, etc.
- Enumerate Configuration Items with
<config>
which is a child element of<configs>
- You can enumerate up to 20 configuration items
<config>
R4160 Addon-XML Attributes of config element
R2290 Embedding dynamic value by EL syntax
4. Determine the Behavior of Auto-processing
- 1. Write a Server-side Script
- Write in ECMA code available in Script Step (M230)
- Knowledge of ECMAScript (JavaScript) is required
- Parts of Java class are also available
- Use special methods of
configs.get("♦configName♦")
for retrieving config configs.get("♦configName♦")
:instanceof java.lang.String
- Use special methods of
data.get( ♦dataId♦ )
for retrieving Business Data (M230) - Use special methods of
retVal.put( ♦dataId♦, ♦value♦ )
for updating Business Data (M230)
<script><![CDATA[ var dataItemId = configs.get("conf_updateDataItem"); retVal.put( dataItemId, "Hello World" ); ]]></script>
R2300 Functions available in Script
5. Determine the Logo for the Step (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 web service for it
- 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="ja">Generador de Numeros aleatorios</label>
for Spanish Designers - en(default), ja, de, es, fr, ko, pt, zh_CN
[/column][/row]
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> <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, 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> <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, 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>
X. Workflow-Sample
- 2017-12-25 (Random number Generator): Episode 567: 2017, Dawn of Business Automization
- 2017-11-20 (Expense Report flow-Input Check): Episode 562: Reason for Not Using Cloud Expense Management System (4)
- 2017-09-04 (Weekly Sales Report-Feedback): Episode 551: Comments on Weekly Report SpreadSheet
- 2017-08-28 (Weekly Sales Report): Episode 550: Automation for the Task of Spreadsheet Filling in
- 2017-08-21 (Personnel Change Information Publication): Episode 549: Let Information Disclosure be Automatic!
- 2017-08-14 (Website Operation Report 3): Episode 548: Analytics API Request In Monday Morning (3)
- 2017-08-07 (Website Operation Report 2): Episode 547: Analytics API Request In Monday Morning (2)
- 2017-07-31 (Website Operation Report): Episode 546: Analystic API Request In Monday Morning
- 2017-07-10 (Information Material Request Correspondence): Episode 543: Easy Management of Mailing List by Cooperating with Google Group
- 2017-07-03 (PayPal Invoice Issuance-Cancellation notification): Episode 542: Easy Billing Operation by Connecting with PayPal Invoice (3)
- 2017-05-29 (Base flow of Request type process-Script): Episode 537: Visualizing the Status of Occurrence of Redoing Work
- 2017-04-24 (Invoice Issuance-Retention): Episode 532: Recording to External System, More Haste, Less Speed
- 2017-03-27 (Entry reception system-PayPal billing-Payment confirmation): Episode 528: Automatic Confirmation of PayPal Status at Automatic Step
- 2017-03-21 (Entry reception system): Episode 527: Calling PayPal Invoicing API at Auto-step
- 2017-03-13 (Certificate Issuance-Japanese Calendar): Episode 526: “Certificate Issuance Date” of Auto-generated PDF in Japanese Calendar! (Improvement ed.)
- 2017-03-06 (Invoice Submission): Episode 525: How to Send OAuth2 Request from Automatic Step
- 2017-01-16 (Order Reporting flow): Episode 518: What is Automation of Business Process? (Part 1)
- 2017-01-02 (Email Starting): Episode 516: Method of Starting Workflow by “Email”
- 2016-11-28 (Invoice Issuance flow): Episode 511: Automatically Generate Transfer Slip File (Excel-CSV)
- 2016-10-31 (Product Demo flow): Episode 507: Manage Schedules by “Federated Calendar”!
- 2016-10-24 (File Approval flow): Episode 506: Secure File Sharing with External Partner
- 2016-08-29 (Translation Process – OpenChat/Slack Post): Episode 498: Variations of Data Processing at Automated Step (Part 5)
- 2016-08-22 (Translation Process – Hash Value): Episode 497: Variations of Data Processing at Automated Step (Part 4)
- 2016-08-15 (Translation Process): Episode 496: Variations of Data Processing at Automated Step (Part 3)
- 2016-08-08 (Characters Number Counter): Episode 495: Variations of Data Processing at Automated Step (Part 2)
Y. Related Manuals
- M227 AUTOMATED STEP Auto Executing Data Binding, Arithmetic Operations
- M228 AUTOMATED STEP Auto Generating PDF File with Business data Inserted
- M229 AUTOMATED STEP Auto Backup to Google Drive
- M230 AUTOMATED STEP Auto Executing Complicated Data Processing (ECMAScript)
- M415 AUTOMATED STEP Adding an Auto-Step to be Used for Business Process Definition