Introduction
JS7 offers an API for jobs that are executed in the Agent's Java Virtual Machine:
- JS7 - Java Jobs
- Such jobs are operated in the Java Virtual Machine used with the related JS7 Agent.
- JS7 - JavaScript Jobs
- Such jobs require use of the Oracle® GraalVM Java Virtual Machine with the related JS7 Agent.
JS7 offers an API to such jobs that serves the purpose of
- accessing arguments available to the job from various sources such as JS7 - Order Variables, job and node arguments, JS7 - Job Resources,
- allowing to specify the outcome of a job including return values that are passed to subsequent jobs from order variables.
Support for Java Jobs and JavaScript Jobs is available starting from the following releases:
FEATURE AVAILABILITY STARTING FROM RELEASE 2.5.4
FEATURE AVAILABILITY STARTING FROM RELEASE 2.6.1
Argument Sources
Arguments to jobs originate from a number of sources:
- Workflow Variables
- They are declared with the workflow and can hold default values. If no default value is specified then an order has to carry the variable and to assign a value. Otherwise an order optionally can assign a value to the variable.
- Declared Variables include all variables declared with the workflow, optionally holding default values.
- Order Variables include the variables specified with the order. This is a subset of the Declared Variables as carried by the order:
- Orders are forced to specify variables for which no default value is declared.
- Orders can specify any Declared Variables optionally over-ruling the variable's default value.
- Job Arguments
- The arguments are specified as key/value pairs with the given job. In case of multiple occurrence of the same job in a workflow the same arguments are used.
- Node Arguments
- The arguments are specified as key/value pairs with the job's node that is specific for the occurrence of a job in a workflow. Node Arguments allow to specify different argument sets if the same job is used a number of times in the workflow.
- Job Resource Variables
- The variables are specified as key/value pairs from JS7 - Job Resources.
- Job Resources can be assigned individually per job or to all jobs in a workflow.
Access to arguments by a job includes to read arguments from a specific source or to read all arguments.
Classes
Class js7.Job
The js7.Job class is an abstract class that is implemented by the JS7Job class in the job:
Methods
| Method | Argument | Return Value |
|---|---|---|
processOrder() | [object] js7Step | n/a |
Objects
| Object | Purpose | ||
|---|---|---|---|
js7Step | The built-in object js7Step provides a number of methods | ||
| Area | Method | Argument | Return Value |
| Argument | getAllArguments | n/a | [object[]] arguments |
getAllArgumentsAsNameValueMap | n/a | [map] argumentMap | |
getAllDeclaredArguments | n/a | [object[]] arguments | |
getDeclaredArgument | [string] argumentName | [object] argument | |
getDeclaredArgumentValue | [string] argumentName | [string|int|bool] argumentValue | |
getJobResourcesArgumentsAsNameDetailValueMap | n/a | [map] arguments | |
getOrderArgumentsAsNameValueMap | n/a | [map] arguments | |
| Job | getAgentId | n/a | [string] agentId |
getJobEnvironment | n/a | [object] jobEnvironment | |
getJobEnvironment().getJobKey | n/a | [string] jobKey | |
getJobEnvironment().getEncoding | n/a | [string] encoding | |
getJobEnvironment().getDeclaredArguments | n/a | [object[]] jobArguments | |
getJobInstructionLabel | n/a | [string] label | |
getJobName | n/a | [string] jobName | |
getControllerId | n/a | [string] controllerId | |
getOrderId | n/a | [string] orderId | |
getWorkflowName | n/a | [string] workflowName | |
getWorkflowPath | n/a | [string] workflowPath | |
getWorkflowPosition | n/a | [string] position | |
getWorkflowVersionId | n/a | [string] versionId | |
| Outcome | getLastFailedOutcomes | n/a | [object[]] outcomes |
getLastSucceededOutcomes | n/a | [object[]] outcomes | |
getOutcome | n/a |
| |
getOutcome().putVariable | [string] name,[string|int|bool] value | n/a | |
getOutcome().setReturnCode | [int] returnCode | n/a | |
| Logging | getLogger().info | [string] message | n/a |
getLogger().warn | [string] message | n/a | |
getLogger().error | [string] message | n/a | |
getLogger().debug | [string] message | n/a | |
Examples
The following examples are straightforward. Find further examples from JS7 - How to read arguments in JavaScript Jobs.
Example: Implementing a basic Job
A job is implemented by a class with the name JS7Job as from the below JavaScript example:
class JS7Job extends js7.Job {
processOrder(js7Step) {
js7Step.getLogger().info( 'hello world' );
// do some stuff
}
}
Explanation:
- The implementation class
JS7Jobis required. - The
processOrder()method is required to be implemented by the job.- The method is parameterized by the
js7Stepobject provided by the Job API. - The
js7Stepobject is used with itsgetLogger()method to write output to the job's log.
- The method is parameterized by the
Example: Reading specific Arguments
class JS7Job extends js7.Job {
processOrder(js7Step) {
// access argument by name
js7Step.getLogger().info('[getAllArgumentsAsNameValueMap] by name:');
var colorBlue = js7Step.getAllArgumentsAsNameValueMap()['color_blue'];
js7Step.getLogger().info('argument color_blue=' + colorBlue);
}
}
Explanation:
- The implementation class
JS7Jobis required. - The
processOrder()method is required to be implemented by the job.- The method is parameterized by the
js7Stepobject. - The
js7Stepobject is used with itsgetLogger()method to write output to the job's log. - The
getAllArgumentsAsNameValueMap()method provides a map of all arguments. The map allows to read a single argument from the argument name.
- The method is parameterized by the
Example: Reading the list of Arguments
class JS7Job extends js7.Job {
processOrder(js7Step) {
// get list of all arguments
var args = js7Step.getAllArguments();
js7Step.getLogger().info('[getAllArguments]:');
js7Step.getLogger().info('all arguments: ' + args);
for (var arg in args) {
js7Step.getLogger().info('argument: ' + arg + '=' + args[arg].getValue());
}
}
}
Class js7.JobArgument
The js7.JobArgument class can optionally be used to access declared variables.
- Users implement a class for arguments with an arbitrary name that creates objects for declared arguments.
- Users instantiate the class for arguments in their
JS7Jobclass implementation.
Constructor
| Constructor | Argument | Explanation |
|---|---|---|
js7.JobArgument() |
| Specifies the name of the argument from a string. Argument names are case-sensitive. |
[bool] isRequired | Optionally specifies if the argument is required. If required and the argument is not declared with the workflow and no default value is provided then an error will be raised. | |
[string|int|bool] defaultValue | Optionally specifies a default value using one of the indicated data types. | |
[enum] displayMode | Optionally specifies the js7.DisplayMode.MASKED enumeration value that prevents argument values from being logged. |
Examples
The following examples are straightforward. Find further examples from JS7 - How to read arguments in JavaScript Jobs.
Example: Reading specific Declared Arguments
class JobArguments {
workflowPath = new js7.JobArgument('js7Workflow.path', true);
}
class JS7Job extends js7.Job {
declaredArguments = new JobArguments();
processOrder(js7Step) {
// option 1: access declared argument
// option 1.a: access declared argument by name
js7Step.getLogger().info('[GetDeclaredArgument] by name:');
var declaredArg1a = js7Step.getDeclaredArgument('js7Workflow.path');
js7Step.getLogger().info('declaredArgument: ' + declaredArg1a.getName() + '=' + declaredArg1a.getValue());
// option 1.b: access declared argument by object name
js7Step.getLogger().info('[GetDeclaredArgument] by object name:');
var declaredArg1b = js7Step.getDeclaredArgument(this.declaredArguments.workflowPath.name);
js7Step.getLogger().info('declaredArgument: ' + declaredArg1b.getName() + '=' + declaredArg1b.getValue());
// option 2: access declared argument value
// option 2.a: access declared argument value by name
js7Step.getLogger().info('[GetDeclaredArgumentValue] by name:');
js7Step.getLogger().info(js7Step.getDeclaredArgumentValue('js7Workflow.path'));
// option 2.b: access declared argument value by object name
js7Step.getLogger().info('[GetDeclaredArgumentValue] by object name:');
js7Step.getLogger().info(js7Step.getDeclaredArgumentValue(this.declaredArguments.workflowPath.name));
}
}
Explanation:
- The example suggests the following ways how to access declared arguments:
- Accessing the argument object: offers using the
getName()andgetValue()methods of the argument object. - Accessing the argument value: directly returns the argument value.
- Accessing the argument object: offers using the
- Argument names can be specified by strings or by using the
declaredArgumentsinstance of theJobArgumentclass and the argument objects included.
Example: Reading the list of Declared Arguments
class JobArguments {
// arguments with string data type
colorBlue = new js7.JobArgument('color_blue', true, 'blue');
colorRed = new js7.JobArgument('color_red', true, 'red');
colorOrange = new js7.JobArgument('color_orange', true, 'orange');
// arguments with numeric data type
numOfDays = new js7.JobArgument('num_of_days', true, 5);
// arguments with Boolean data type
isEndOfMonth = new js7.JobArgument('is_end_of_month', true, true);
// arguments with masked output that prevents value from being logged
password = new js7.JobArgument('password', true, 'secret', js7.DisplayMode.MASKED);
}
class JS7Job extends js7.Job {
declaredArguments = new JobArguments();
processOrder(js7Step) {
// get list of all declared arguments
var allArgs = js7Step.getAllDeclaredArguments();
js7Step.getLogger().info('[getAllDeclaredArguments]:');
js7Step.getLogger().info('all declared arguments: ' + allArgs);
for (var arg in allArgs) {
js7Step.getLogger().info('declared argument: ' + arg + '=' + allArgs[arg]);
}
}
}
Explanation:
- The example declares a number of arguments with default values of different data types.
- The
getAllDeclaredArguments()method returns the list of arguments for iteration.