Business rules scripting
Python 3
MVEL
Groovy
JavaScript
| Scripting Language | Language Version | Scripting Engine | Scripting Engine Version |
|---|---|---|---|
| JavaScript | ECMAScript 15 (2024) | GraalJS | GraalVM 24.1.2 |
| Python 3 | 3.11.7 | GraalPy | GraalVM 24.1.2 |
| MVEL | 2 | org.mvel » mvel2 | 2.5.2.Final |
| Groovy | 3.0.21 | org.codehaus.groovy » groovy-jsr223 | 3.0.21 |
In version 4.7.2, we’ve deprecated the DMN (Decision Model and Notation) business rule actions. This change affects how business rules are configured on task/user task nodes in business processes.
Integration designer scripting
| Scripting Language | Language Version | Scripting Engine | Scripting Engine Version |
|---|---|---|---|
| JavaScript | ECMAScript 15 (2024) | GraalJS | GraalVM 24.1.2 |
| Python | 3.11.7 | GraalPy | GraalVM 24.1.2 |
Input and output
Scripts in FlowX receive data through bound variables. The available variables depend on the context.Available variables
| Variable | Type | Process business rules | Workflow scripts | Description |
|---|---|---|---|---|
input | Map (read-only copy) | ✅ | ✅ | Process instance data or workflow start node data |
output | Map (mutable) | ✅ | ✅ | Write results here — data is persisted after script execution |
additionalData | Map | ✅ | ✅ | Contains securityDetails and applicationConfiguration |
instanceMetadata | Map | ✅ | ❌ | Process instance metadata (not available in workflows) |
Writing to output
Assign values to theoutput variable to persist data. Both assignment and .put() syntax work.
- JavaScript
- Python
Reading from input
input is a deep copy of the process or workflow data. Changes to input are not persisted — always write to output.
- JavaScript
- Python
Accessing configuration parameters
Retrieve project-level configuration parameters throughadditionalData:
Common pitfalls
Output is empty ({})
Output is empty ({})
If your script runs without errors but output is
{}:- Check your variable names —
outputmust be spelled exactly, it’s case-sensitive - Check assignment syntax — in Python, use
output["key"] = value(bracket notation), notoutput.key = value - Don’t reassign output —
output = {"key": "value"}replaces the reference and won’t persist. Useoutput["key"] = "value"instead - Don’t use
return— scripts don’t need a return statement. Write directly tooutput.
Python import errors
Python import errors
Python scripts run in a sandboxed environment. Common modules like
uuid, re, and other standard library imports are not available.Python syntax limitations
Python syntax limitations
Some Python patterns behave differently in the GraalPy sandbox:
Java HashMap interop in JavaScript
Java HashMap interop in JavaScript
When accessing data returned by Java services (such as AI node output), values may be Java HashMaps rather than native JavaScript objects. Standard JS methods like
Object.keys() and spread syntax may not work as expected.Scripts in Integration Workflows
Script nodes in Integration Workflows use the sameinput and output variables as process business rules, but the data flow is different:
- In a process business rule,
outputwrites directly to the process instance data store. - In a workflow Script node,
outputbecomes theinputfor the next node in the workflow. The data stays within the workflow until the workflow completes at an End node.
If your workflow Script node produces an empty The
output ({}), subsequent nodes in the workflow receive no data. To pass all input data through to the next node while adding or modifying fields, copy the input to output first:output.put("", input) call copies all keys from input into the root of output.JavaScript
New in v4.7.1: JavaScript support has been upgraded from Nashorn (ECMAScript 5.1) to GraalJS (ECMAScript 15/2024), providing significantly improved performance and modern language features.
What is GraalJS?
GraalJS is an ECMAScript compliant JavaScript implementation built on GraalVM. It supports the latest ECMAScript features and offers high performance through the GraalVM’s JIT compiler.Properties
- Supports ECMAScript 15 (2024) features including modern syntax and APIs
- Provides consistent scripting across business rules and integration designer
- Runs in a secure sandboxed environment
Limitations
JavaScript scripts run in a sandboxed environment. Here is a list of JavaScript features not available in the sandbox:- import.meta (ES2020)
- top-level await (ES2022)
- set operations (ES2024)
- Array.fromAsync (ES2024)
Useful links
GraalJS Documentation
ECMAScript 2024 Language Specification
Python 3
Python is a high-level, interpreted programming language known for its simplicity and readability. FlowX.AI uses Python 3.11.7 via GraalPy for executing Python scripts.What is GraalPy?
GraalPy is an implementation of Python that runs on the GraalVM. It offers high compatibility with standard Python (CPython) while providing the ability to run within the Java ecosystem. GraalPy supports Python 3 and provides access to a large subset of the standard Python library.Properties
- Supports Python 3.11.7 with access to most common Python libraries
- Runs up to 3x faster than Python 2.7 via Jython
- Runs in a sandboxed environment for better security
Python Library Support
Python 3 support in FlowX comes with a subset of the standard Python library. Python runs in a sandboxed environment and the following modules are not available: “stringprep”, “sqlite3”, “plistlib”, “getpass”, “curses”, “curses.textpad”, “curses.ascii”, “curses.panel”, “xml.parsers.expat”, “xmlrpc.client”, “xmlrpc.server”, “turtle”, “tkinter”, “test.support”, “symtable”, “pyclbr”, “msvcrt”, “winreg”, “winsound”, “grp”, “termios”, “tty”, “pty”, “syslog”, “audioop”, “msilib”, “nis”, “ossaudiodev”, “smtpd”, “spwd”, “crypt”Useful links
Python 3.11 Documentation
GraalPy Documentation
MVEL
MVEL is an expression language for Java-based applications. It provides a plethora of features and is suited for everything from the smallest property binding and extraction, to full-blown scripts.- FlowX.AI uses mvel2 - 2.5.2.Final version
Useful links
MVEL Documentation
Maven repository: Mvel 2.5.2 Final
Groovy
Groovy is a multi-faceted language for the Java platform. The language can be used to combine Java modules, extend existing Java applications and write new applications We use and recommend Groovy 3.0.21 version, using groovy-jsr223 engine.Groovy has multiple ways of integrating with Java, some of which provide richer options than available with JSR-223 (e.g. greater configurability and more security control). JSR-223 is recommended when you need to keep the choice of language used flexible and you don’t require integration mechanisms not supported by JSR-223.
JSR-223 (spec) is a standard scripting API for Java Virtual Machine (JVM) languages . The JVM languages provide varying levels of support for the JSR-223 API and interoperability with the Java runtime.
Useful links
Groovy Language Documentation
[Java] Class GroovyScriptEngineImpl
groovy-jsr223
Academy courses
Exclusive Gateways course
Learn to configure conditions in JavaScript and DMN for gateway routing
Debug 101 course
Troubleshoot script execution errors, exceptions, and debugging patterns

