Introduction
Variables are assigned constant values and expressions. This applies to:
- JS7 - Job Resources
- JS7 - Job Environment Variables
- JS7 - Order Variables
- Node Arguments
- Job Arguments
Expressions are a means to dynamically calculate values for variables. Consider that names of variables are case-sensitive.
Examples:
true1"some string"$variable$returnCode <= 3$number + 1
Data Types
Boolean
The following constant values are supported: true, false
Examples:
| Expression | true |
|---|---|
| JSON | "var": true |
| Expression | false |
|---|---|
| JSON | "var": false |
String
Strings are written in double quotes. The control characters \t (tab), \r (CR) and \n (NL) are literally written. To suppress its special meaning the $ character is written \$. No other characters are allowed to follow the \ escape character.
Examples:
| Expression | |
|---|---|
| JSON | "var": "\"some value\"" |
| Expression | |
|---|---|
| JSON | "var": "\"\\t means the TAB control character\"" |
| Expression | |
|---|---|
| JSON | |
| Expression | |
|---|---|
| JSON | |
| Expression | |
|---|---|
| JSON | "var": "\"\\$ means the literal character\"" |
Number
Numeric constants are implemented as Java BigDecimal values and allow integer and long values to be specified.
Example:
| Expression | |
|---|---|
| JSON | "var": 1 |
Operators
Comparison Operators
The operators <, <=, ==, !=, >=, > are supported.
The result of a comparison is the Boolean data type. Comparisons are available for strings and numbers. Both sides of a comparison have to use the same data type.
Should this rule not be considered and should e.g. a number be compared to a string then an Order will fail.
Example:
| Expression | |
|---|---|
| JSON | "isGreater": "$var >= 199" |
Arithmetic Operators
Addition and Subtraction of two numbers with: +, -
Examples:
| Expression | |
|---|---|
| JSON | "var": 1 + 1 |
| Expression | |
|---|---|
| JSON | "var": 100 - 210 |
String Operators
Concatenation of two strings with the ++ operator. Should operands of type Boolean or Number be used then they are converted to String.
Example:
| Expression | |
|---|---|
| JSON | "var": "\"abc\" ++ \"def\"" |
Conversion
Convert to Number
If a value of a variable with String data type represents a number then it can be converted. Otherwise an error is raised and the affected order fails.
Example:
| Expression | |
|---|---|
| JSON | "var": "\"123\".toNumber" |
Convert to String
Values of the Number data type can be converted to String.
Example:
| Expression | |
|---|---|
| JSON | "var": "123.toString" |
Reading Variables
Referencing Variables
The syntax $VARIABLE, $`VARIABLE`, ${VARIABLE} or ${`VARIABLE`} is used to read the value of a variable.
- Similar to a number of Unix shells a variable can be recalled with $ or with ${}.
- Variable names can include dots, however, not at the beginning and not at the end of the variable name and not as a sequence of dots.
- Variable names with dots have to be referenced like this:
$`mail.smtp.host`or${`mail.smtp.host`}
If the variable is unknown then an error is raised and the affected Order will fail.
Variable Function
Variables can be retrieved using the function
variable( NAME, label=LABEL, job=JOB, default=DEFAULT )
NAMEis a string expression for the name of the variable.label=LABEL(optional) is the label of an instruction for which the variable is recalled. Consider that the label is not quoted. Example:label=A.job=JOB(optional) is the name of a job for which the variable is recalled. Consider that the job name is not quoted. Example:job=MYJOB.default=DEFAULT(optional) specifies a default value should the variable not exist.
Consider that a call to the variable function will fail if the variable is unknown and no default value is specified.
Examples:
| Expression | |
|---|---|
| JSON | "variable( \"my_var\", job=my_job )" |
| Comment | The value of the variable my_var is returned as available with the job my_job in a workflow. If the variable is unknown then the function fails. |
| Expression | |
|---|---|
| JSON | "variable( \"my_var\", label=my_label, default=\"some value\" )" |
| Comment | The value of the variable my_var is returned as available with the job identified by the label my_label in a workflow. If the variable is unknown then the default value some value is returned. |
Built-in Variables
Built-in variables are available at the following scopes:
Workflow
$js7WorkflowPath- The unique name of a workflow. Consider that the name does not include the folder location of a workflow.
$js7WorkflowPosition- The position of an order in the workflow.
$js7Label- The label of the current instruction for which an order is executed.
$js7OrderId- The order identifier.
$js7ControllerId- The Controller's identifier.
Job
$js7JobName- The name of the current job for which an order is executed.
$epochMilli- The number of milliseconds since January 1st 1970 UTC.
$returnCode- The numeric exit code of the current job for which an order is executed.
Build-in Functions
env( "environment-variable", "default" )- The function reads the value of an existing OS environment variable. The name has to be specified in correct uppercase/lowercase spelling.
- If the environment variable does not exist then an error is raised and the Order fails. Alternatively a default value can be specified.
Examples:
Expression env( ('JS7_AGENT_CONFIG_DIR')JSON "env( 'JS7_AGENT_CONFIG_DIR' )"Sample Value /var/sos-berlin.com/js7/agent/var_4445/configExpression env( 'JAVA_HOME', '/usr/lib/jvm/java-1.8-openjdk' )JSON "env( 'JAVA_HOME', '/usr/lib/jvm/java-1.8-openjdk' )"Sample Value /usr/lib/jvm/java-1.8-openjdkExpression env( 'HOSTNAME', env( 'COMPUTERNAME' ) )JSON "env( 'HOSTNAME', env( 'COMPUTERNAME' ) )"Sample Value 2021-05-03 07:30:42 This example assumes the
$HOSTNAMEenvironment variable to be available for Agents running on Unix or the%COMPUTERNAME%environment variable to be available for Agents with Windows.
now( format='yyyy-MM-dd hh:mm:ss', timezone='Europe/Berlin' )- The job start date. This date can be formatted using Java date qualifiers. Optionally a time zone can be specified, by default the UTC time zone is used.
Examples:
Expression now( format='yyyy-MM-dd' )JSON "now( format='yyyy-MM-dd' )"Sample Value 2021-05-03 Expression now( format='yyyy-MM-dd hh:mm:ss' )JSON "now( format='yyyy-MM-dd hh:mm:ss' )"Sample Value 2021-05-03 07:30:42 Expression now( format='yyyy-MM-dd hh:mm:ssZ', timezone="Europe/Berlin" )JSON "now( format='yyyy-MM-dd hh:mm:ssZ', timezone=\"Europe/Berlin\" )"Sample Value 2021-05-03 09:30:42+02:00
scheduledOrEmpty( format='yyyy-MM-dd hh:mm:ss', timezone='Europe/Berlin' )- The date for which an orders is scheduled.
- The date formatting options are the same as explained with the
now()function.