Class Process
- All Implemented Interfaces:
HasHandlers,HasFinishedHandlers,HasTraceElementHandlers
- Direct Known Subclasses:
Tour
- user interactions
- calls to DataSources (hence: any database or web service)
- arbitrary code
- other Processes
state across the different tasks that are executed. This allows you to maintain context as you walk a user through a multi-step business process in your application, which may involve multiple operations on multiple entities. Each Task that executes can use the Process state as inputs, and can output a result which is stored in the Process state - see TaskIO. A Process can have multiple branches, choosing the next Task to execute based on Criteria - see DecisionTask and MultiDecisionTask.
Because a Process may return to a previous Task in various situations, the data model of a Process is strictly speaking a graph (a set of nodes connected by arbitary interlinks). However, most processes have sequences of several tasks in a row, and the definition format allows these to be represented as simple Arrays called "sequences", specified via sequences. This reduces the need to manually specify IDs and interlinks for Tasks that simply proceed to the next task in a sequence.
Processes follow all the standard rules for encoding as ComponentXML, however, note that the <Process> tag allows any kind of ProcessElement (tasks, decisions and sequences) to appear as a direct subelement of the <Process> tag without the need for an intervening <elements> or <sequences> tag. The example below demonstrates this shorthand format.
<Process ID="processId">
<DSRequestTask ID="dsRequestTaskId" nextElement="sequenceId" ..>
<inputFieldList>
<value>order.countryName</value>
</inputFieldList>
<outputFieldList>
<value>order.countryName</value>
<value>order.continent</value>
<outputFieldList>
</DSRequestTask>
<sequence ID="sequenceId" >
<StateTask ../>
<StateTask ../>
<StateTask ../>
<StateTask nextElement="userTaskId" ../>
</sequence>
<UserTask ID="userTaskId" ../>
...
</Process>
NOTE: you must load the standard DataBinding module before you can use Process.-
Field Summary
Fields inherited from class com.smartgwt.client.core.BaseClass
config, configOnly, factoryCreated, factoryProperties, id, scClassName -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionaddFinishedHandler(FinishedHandler handler) Add a finished handler.Add a traceElement handler.voidafterTaskCommit(Task task, Map outputs) Notification hook invoked after a Task's outputs have been committed to state and history recorded, but before routing to the next element.voidapplyStateUpdates(Map stateUpdates) Apply the state updates specified bysetStateVariable()to the process state.voidapplyStateUpdates(Map stateUpdates, Map inputRecord) voidapplyStateUpdates(Map stateUpdates, Map inputRecord, Boolean strict) Apply the state updates specified bysetStateVariable()to the process state.beforeTaskCommit(ProcessElement task, Map outputs) Override point invoked after a Task completes successfully, but before any of the Task's outputs are committed tostateand before next-task routing proceeds.create()voidProgrammatically signal that this Process has hit an infrastructure failure and should terminate through itsfailed()channel rather than completing normally.voidSeefail()voidProgrammatically signal that this Process has hit an infrastructure failure and should terminate through itsfailed()channel rather than completing normally.voidfailed(ProcessFailure failure) StringMethod called when a process terminates via an infrastructure failure - for example AI engine unavailable, schema-validation mismatch on input or output, uncaught JS exception, cancellation, or an ancestor-cycle deadlock when invoking a sub-Process.String[]Returns a list of unique global IDs that are referenced by this process.Identifier of canvas where UI elements created by usinginline viewproperty should be added using addMember.The task that is currently being executed by this process, ornullwhen no task is running.Name of the default Process subclass to use when auto-constructing plain Objects that are detected as Processes (see heuristic ondefaultTaskConstructor)Name of the default Task subclass to use when auto-constructing plain Objects found in collections that accept Tasks (for exampleCoTProcess.tasks, sequence members, etc).WhendefaultWaitForor taskwaitForare set to "duration", how long should the wait be before starting the task? A task can override the default value with taskwaitDuration.Condition to wait for before each task is executed.getElement(String ID) Retrieve aProcessElementby its IDElements involved in this Process.OptionalDataSourcethat constrains the input record a caller may provide to this Process.OptionalDataSourcethat constrains the input record a caller may provide to this Process.Shorthand alternative toinputDS: a list ofDataSourceFielddefinitions the engine compiles into a temporary validation DataSource on demand.getJsObj()Returns the task output of the last task executed.getLastTaskOutput(String taskType) Returns the task output of the last task executed.Enable mock mode on the workflow? By default, this setting does nothing but is available for individual tasks to trigger special action.static ProcessgetOrCreateRef(JavaScriptObject jsObj) Returns the Process's output, computed in this priority order: The value passed tosetOutput()if any. IfoutputDS/outputFieldsare declared: a shallow pick of those field names fromstate. Otherwise:stateitself (back-compat).OptionalDataSourcethat describes and validates the final output this Process produces on successful completion.OptionalDataSourcethat describes and validates the final output this Process produces on successful completion.Shorthand alternative tooutputDS: a list ofDataSourceFielddefinitions the engine compiles into a temporary validation DataSource on demand.static ProcessgetProcess(String processId) Get a Process instance by its ID.Returns the process description as HTML.getProcessElements(String attribute) Returns the complete process state for persistence.Canvas.IDof the component that manages "rule context" for which this process participates.Sequences of ProcessElements.getState()Current state of a process.getStateVariable(String stateVariablePath) Returns a variable value from theprocess state.If set to true, the process will not allow any intermediate state to be set viasetStateVariable()that is not explicitly defined first.Returns information about why and where the process is suspended.getTasks()Convenience form of declaring a single, linear sequence of tasks for this process.Context object to be passed toProcess.traceElement()during process execution.If wizard is set then current workflow will be handled as wizard.booleanReturns true if the process is currently suspended.static voidloadProcess(String processId, ProcessCallback callback) protected voidonInit()voidvoidreset()Reset process to its initial state, so process can be started again.voidReset process to its initial state, so process can be started again.voidrestoreFromState(Map completeState) Restores process state from a previously saved complete state and optionally resumes execution.voidrestoreFromState(Map completeState, Boolean resume) Restores process state from a previously saved complete state and optionally resumes execution.voidresume()Resumes a suspended process.voidResumes a suspended process.voidExecute a single task in isolation for testing.setAttribute(String attribute, ProcessElement[] value, boolean allowPostCreate) voidsetConfig(JavaScriptObject jsObj) setContainerId(String containerId) Identifier of canvas where UI elements created by usinginline viewproperty should be added using addMember.setCurrentTask(ProcessElement currentTask) The task that is currently being executed by this process, ornullwhen no task is running.setDefaultProcessConstructor(String defaultProcessConstructor) Name of the default Process subclass to use when auto-constructing plain Objects that are detected as Processes (see heuristic ondefaultTaskConstructor)setDefaultTaskConstructor(String defaultTaskConstructor) Name of the default Task subclass to use when auto-constructing plain Objects found in collections that accept Tasks (for exampleCoTProcess.tasks, sequence members, etc).setDefaultWaitDuration(Integer defaultWaitDuration) WhendefaultWaitForor taskwaitForare set to "duration", how long should the wait be before starting the task? A task can override the default value with taskwaitDuration.setDefaultWaitFor(WaitForType defaultWaitFor) Condition to wait for before each task is executed.setElements(ProcessElement... elements) Elements involved in this Process.setInputDS(DataSource inputDS) OptionalDataSourcethat constrains the input record a caller may provide to this Process.setInputDS(String inputDS) OptionalDataSourcethat constrains the input record a caller may provide to this Process.setInputFields(DataSourceField... inputFields) Shorthand alternative toinputDS: a list ofDataSourceFielddefinitions the engine compiles into a temporary validation DataSource on demand.voidsetMockMode(Boolean mockMode) Enable mock mode on the workflow? By default, this setting does nothing but is available for individual tasks to trigger special action.voidSets the task ID of the next task to execute after the current task finishes.voidsetNextElement(String nextElement) Sets the task ID of the next task to execute after the current task finishes.voidExplicitly set the final output this Process will deliver on successful completion, overriding the default behavior of picking output fields out ofstate.setOutputDS(DataSource outputDS) OptionalDataSourcethat describes and validates the final output this Process produces on successful completion.setOutputDS(String outputDS) OptionalDataSourcethat describes and validates the final output this Process produces on successful completion.setOutputFields(DataSourceField... outputFields) Shorthand alternative tooutputDS: a list ofDataSourceFielddefinitions the engine compiles into a temporary validation DataSource on demand.setRuleScope(String ruleScope) Canvas.IDof the component that manages "rule context" for which this process participates.setSequences(ProcessSequence... sequences) Sequences of ProcessElements.voidsetStartElement(ProcessElement startElement) setStartElement(String startElement) Current state of a process.voidsetStateVariable(String stateVariablePath, Object value) Sets aprocess statevariable for later reference withgetStateVariable()or more commonly with aTaskInputExpressionproperty.voidsetStateVariable(String stateVariablePath, Object value, Boolean strict) Sets aprocess statevariable for later reference withgetStateVariable()or more commonly with aTaskInputExpressionproperty.setStrictPaths(Boolean strictPaths) If set to true, the process will not allow any intermediate state to be set viasetStateVariable()that is not explicitly defined first.voidsetTaskOutput(ProcessElement task, Object value) Sets the task output oftaskin theprocess stateso it can be used by later tasks withgetLastTaskOutput()or more commonly with aTaskInputExpressionproperty.setTasks(ProcessElement... tasks) Convenience form of declaring a single, linear sequence of tasks for this process.setTraceContext(Map traceContext) Context object to be passed toProcess.traceElement()during process execution.If wizard is set then current workflow will be handled as wizard.voidstart()Starts this task by executing thestartElement.voidSuspends process execution at the current point.Methods inherited from class com.smartgwt.client.core.BaseClass
addDynamicProperty, addDynamicProperty, addDynamicProperty, addDynamicProperty, applyFactoryProperties, asSGWTComponent, clearDynamicProperty, createJsObj, destroy, doAddHandler, doInit, error, error, errorIfNotCreated, fireEvent, getAttribute, getAttributeAsBoolean, getAttributeAsDate, getAttributeAsDouble, getAttributeAsElement, getAttributeAsFloat, getAttributeAsInt, getAttributeAsJavaScriptObject, getAttributeAsMap, getAttributeAsString, getAttributeAsStringArray, getClassName, getConfig, getHandlerCount, getID, getRef, getScClassName, getTestInstance, hasAutoAssignedID, hasDynamicProperty, internalSetID, internalSetID, isConfigOnly, isFactoryCreated, onBind, registerID, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setConfigOnly, setFactoryCreated, setID, setProperty, setProperty, setProperty, setProperty, setScClassNameMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface com.google.gwt.event.shared.HasHandlers
fireEvent
-
Constructor Details
-
Process
public Process() -
Process
-
-
Method Details
-
getOrCreateRef
-
setJavaScriptObject
- Overrides:
setJavaScriptObjectin classBaseClass
-
create
-
isCreated
public boolean isCreated() -
getJsObj
-
getOrCreateJsObj
- Overrides:
getOrCreateJsObjin classBaseClass
-
setContainerId
Identifier of canvas where UI elements created by usinginline viewproperty should be added using addMember. -
getContainerId
Identifier of canvas where UI elements created by usinginline viewproperty should be added using addMember.- Returns:
- Current containerId value. Default value is null
- See Also:
-
setCurrentTask
The task that is currently being executed by this process, ornullwhen no task is running. Populated bystart()immediately before each call toProcessElement.executeElement()and remains set until either (a) the task completes synchronously and the loop advances, or (b) the task completes asynchronously and a subsequentstart()invocation picks up the next task and overwrites the pointer. A fully-finished process clears it back tonull.This is the authoritative "what is running right now" pointer for code that needs to inspect the active task from outside the execution call stack - most notably CoT prompt assembly, which uses it to resolve task-scoped prompt fragments against the correct CoTTask. Application code should treat it as read-only.
- Parameters:
currentTask- New currentTask value. Default value is null- Returns:
Processinstance, for chaining setter calls- Throws:
IllegalStateException- this property cannot be changed after the underlying component has been created
-
getCurrentTask
The task that is currently being executed by this process, ornullwhen no task is running. Populated bystart()immediately before each call toProcessElement.executeElement()and remains set until either (a) the task completes synchronously and the loop advances, or (b) the task completes asynchronously and a subsequentstart()invocation picks up the next task and overwrites the pointer. A fully-finished process clears it back tonull.This is the authoritative "what is running right now" pointer for code that needs to inspect the active task from outside the execution call stack - most notably CoT prompt assembly, which uses it to resolve task-scoped prompt fragments against the correct CoTTask. Application code should treat it as read-only.
- Returns:
- Current currentTask value. Default value is null
-
setDefaultProcessConstructor
public Process setDefaultProcessConstructor(String defaultProcessConstructor) throws IllegalStateException Name of the default Process subclass to use when auto-constructing plain Objects that are detected as Processes (see heuristic ondefaultTaskConstructor)- Parameters:
defaultProcessConstructor- New defaultProcessConstructor value. Default value is "Process"- Returns:
Processinstance, for chaining setter calls- Throws:
IllegalStateException- this property cannot be changed after the underlying component has been created
-
getDefaultProcessConstructor
Name of the default Process subclass to use when auto-constructing plain Objects that are detected as Processes (see heuristic ondefaultTaskConstructor)- Returns:
- Current defaultProcessConstructor value. Default value is "Process"
-
setDefaultTaskConstructor
public Process setDefaultTaskConstructor(String defaultTaskConstructor) throws IllegalStateException Name of the default Task subclass to use when auto-constructing plain Objects found in collections that accept Tasks (for exampleCoTProcess.tasks, sequence members, etc).This is consulted only when the element is a plain Object (not already constructed) and does not declare its own
_constructor. IfdefaultTaskConstructoris unset for a givenProcess, the engine usesScriptTask.Task vs nested subprocess heuristic
Nested Processes are often used to encapsulate a sub-workflow. When auto-constructing, the engine uses a heuristic to auto-detect the developer's intent to create a nested Process, as follows:- If the element is already a constructed instance (Task or StartProcessTask), use it as-is.
- If the element declares
_constructor, use that class directly. - If the element has a
processproperty:- Construct a SubProcessTask for the element itself (unless the object declares its own
_constructorto override this). SubProcessTask is a strict superset ofStartProcessTask: with neitherstateUpdatesnor process-level I/O schemas declared it behaves identically to StartProcessTask; with them it additionally supports CoT-style state flow,TaskInputExpression$output.<fieldName>references, and infra-failure routing viafailureElement. - If
processis a plain Object (not already constructed), auto-instantiate it as a Process usingdefaultProcessConstructorand assign the instance totask.process. - If
processis already a Process instance, assign it directly totask.process.
- Construct a SubProcessTask for the element itself (unless the object declares its own
- Otherwise, construct it as a Task using
defaultTaskConstructorif set, otherwiseTask.
Examples
// Plain objects default to CoTTask (AI module) unless specified otherwise. isc.Process.create({ defaultTaskConstructor: "CoTTask", defaultProcessConstructor: "CoTProcess", tasks: [ { ID:"decide", title:"Decide Next" }, // -> CoTTask // Nested process via wrapper: becomes StartProcessTask; its .process is auto-created. { ID:"subflow", process: { ID:"p1", tasks:[ { ID:"leaf", title:"Leaf step" } ] // auto-instantiated as CoTProcess } }, { _constructor:"MyTask", ID:"apply" } // -> MyTask ] });- Parameters:
defaultTaskConstructor- New defaultTaskConstructor value. Default value is "ScriptTask"- Returns:
Processinstance, for chaining setter calls- Throws:
IllegalStateException- this property cannot be changed after the underlying component has been created
-
getDefaultTaskConstructor
Name of the default Task subclass to use when auto-constructing plain Objects found in collections that accept Tasks (for exampleCoTProcess.tasks, sequence members, etc).This is consulted only when the element is a plain Object (not already constructed) and does not declare its own
_constructor. IfdefaultTaskConstructoris unset for a givenProcess, the engine usesScriptTask.Task vs nested subprocess heuristic
Nested Processes are often used to encapsulate a sub-workflow. When auto-constructing, the engine uses a heuristic to auto-detect the developer's intent to create a nested Process, as follows:- If the element is already a constructed instance (Task or StartProcessTask), use it as-is.
- If the element declares
_constructor, use that class directly. - If the element has a
processproperty:- Construct a SubProcessTask for the element itself (unless the object declares its own
_constructorto override this). SubProcessTask is a strict superset ofStartProcessTask: with neitherstateUpdatesnor process-level I/O schemas declared it behaves identically to StartProcessTask; with them it additionally supports CoT-style state flow,TaskInputExpression$output.<fieldName>references, and infra-failure routing viafailureElement. - If
processis a plain Object (not already constructed), auto-instantiate it as a Process usingdefaultProcessConstructorand assign the instance totask.process. - If
processis already a Process instance, assign it directly totask.process.
- Construct a SubProcessTask for the element itself (unless the object declares its own
- Otherwise, construct it as a Task using
defaultTaskConstructorif set, otherwiseTask.
Examples
// Plain objects default to CoTTask (AI module) unless specified otherwise. isc.Process.create({ defaultTaskConstructor: "CoTTask", defaultProcessConstructor: "CoTProcess", tasks: [ { ID:"decide", title:"Decide Next" }, // -> CoTTask // Nested process via wrapper: becomes StartProcessTask; its .process is auto-created. { ID:"subflow", process: { ID:"p1", tasks:[ { ID:"leaf", title:"Leaf step" } ] // auto-instantiated as CoTProcess } }, { _constructor:"MyTask", ID:"apply" } // -> MyTask ] });- Returns:
- Current defaultTaskConstructor value. Default value is "ScriptTask"
-
setDefaultWaitDuration
WhendefaultWaitForor taskwaitForare set to "duration", how long should the wait be before starting the task? A task can override the default value with taskwaitDuration.- Parameters:
defaultWaitDuration- New defaultWaitDuration value. Default value is "300"- Returns:
Processinstance, for chaining setter calls- Throws:
IllegalStateException- this property cannot be changed after the underlying component has been created
-
getDefaultWaitDuration
WhendefaultWaitForor taskwaitForare set to "duration", how long should the wait be before starting the task? A task can override the default value with taskwaitDuration.- Returns:
- Current defaultWaitDuration value. Default value is "300"
-
setDefaultWaitFor
Condition to wait for before each task is executed. TaskwaitForcan be specified for individual tasks to override this default.For a value of "duration", the delay time is set by
defaultWaitDurationand can be overridden by a taskwaitDuration.Note that if
defaultWaitForis set to "systemDone" and a task overrides it withwaitFor"locator", the default "systemDone" is not performed. To apply both, as might be desired, use taskwaitFor"locatorAndSystemDone".A
defaultWaitForvalue of "locator" or "locatorAndSystemDone" is not valid.- Parameters:
defaultWaitFor- New defaultWaitFor value. Default value is null- Returns:
Processinstance, for chaining setter calls- Throws:
IllegalStateException- this property cannot be changed after the underlying component has been created
-
getDefaultWaitFor
Condition to wait for before each task is executed. TaskwaitForcan be specified for individual tasks to override this default.For a value of "duration", the delay time is set by
defaultWaitDurationand can be overridden by a taskwaitDuration.Note that if
defaultWaitForis set to "systemDone" and a task overrides it withwaitFor"locator", the default "systemDone" is not performed. To apply both, as might be desired, use taskwaitFor"locatorAndSystemDone".A
defaultWaitForvalue of "locator" or "locatorAndSystemDone" is not valid.- Returns:
- Current defaultWaitFor value. Default value is null
-
setElements
Elements involved in this Process. You can also group elements intosequencesto reduce the need to explicitly define IDs for elements and interlink them.- Parameters:
elements- New elements value. Default value is null- Returns:
Processinstance, for chaining setter calls- Throws:
IllegalStateException- this property cannot be changed after the underlying component has been created
-
setInputDS
OptionalDataSourcethat constrains the input record a caller may provide to this Process. May be a full DataSource definition, an existing instance, or the global ID of a registered DataSource. Nested DataSources are permitted.When set, the input record is validated via
DataSource.validateData()before the Process starts.See
ProcessIO. If bothinputDSandinputFieldsare set,inputDSwins.- Parameters:
inputDS- New inputDS value. Default value is null- Returns:
Processinstance, for chaining setter calls- Throws:
IllegalStateException- this property cannot be changed after the underlying component has been created
-
getInputDS
OptionalDataSourcethat constrains the input record a caller may provide to this Process. May be a full DataSource definition, an existing instance, or the global ID of a registered DataSource. Nested DataSources are permitted.When set, the input record is validated via
DataSource.validateData()before the Process starts.See
ProcessIO. If bothinputDSandinputFieldsare set,inputDSwins.- Returns:
- Current inputDS value. Default value is null
-
setInputDS
OptionalDataSourcethat constrains the input record a caller may provide to this Process. May be a full DataSource definition, an existing instance, or the global ID of a registered DataSource. Nested DataSources are permitted.When set, the input record is validated via
DataSource.validateData()before the Process starts.See
ProcessIO. If bothinputDSandinputFieldsare set,inputDSwins.- Parameters:
inputDS- New inputDS value. Default value is null- Returns:
Processinstance, for chaining setter calls- Throws:
IllegalStateException- this property cannot be changed after the underlying component has been created- See Also:
-
getInputDSAsString
OptionalDataSourcethat constrains the input record a caller may provide to this Process. May be a full DataSource definition, an existing instance, or the global ID of a registered DataSource. Nested DataSources are permitted.When set, the input record is validated via
DataSource.validateData()before the Process starts.See
ProcessIO. If bothinputDSandinputFieldsare set,inputDSwins.- Returns:
- Current inputDS value. Default value is null
- See Also:
-
setInputFields
Shorthand alternative toinputDS: a list ofDataSourceFielddefinitions the engine compiles into a temporary validation DataSource on demand.See
ProcessIO.- Parameters:
inputFields- New inputFields value. Default value is null- Returns:
Processinstance, for chaining setter calls- Throws:
IllegalStateException- this property cannot be changed after the underlying component has been created
-
getInputFields
Shorthand alternative toinputDS: a list ofDataSourceFielddefinitions the engine compiles into a temporary validation DataSource on demand.See
ProcessIO.- Returns:
- Current inputFields value. Default value is null
-
setMockMode
Enable mock mode on the workflow? By default, this setting does nothing but is available for individual tasks to trigger special action. For example, a task that would normally fail outside of its target environment can take an alternative action during testing.mockMode can also be enabled or disabled for an individual task with
ProcessElement.mockMode.- Parameters:
mockMode- New mockMode value. Default value is null- Returns:
Processinstance, for chaining setter calls
-
getMockMode
Enable mock mode on the workflow? By default, this setting does nothing but is available for individual tasks to trigger special action. For example, a task that would normally fail outside of its target environment can take an alternative action during testing.mockMode can also be enabled or disabled for an individual task with
ProcessElement.mockMode.- Returns:
- Current mockMode value. Default value is null
-
setOutputDS
OptionalDataSourcethat describes and validates the final output this Process produces on successful completion. May be a full DataSource definition, an existing instance, or the global ID of a registered DataSource.See
ProcessIO. When set, a SubProcessTask caller references fields on this schema via$output.<fieldName>in CoTTask.stateUpdates.- Parameters:
outputDS- New outputDS value. Default value is null- Returns:
Processinstance, for chaining setter calls- Throws:
IllegalStateException- this property cannot be changed after the underlying component has been created
-
getOutputDS
OptionalDataSourcethat describes and validates the final output this Process produces on successful completion. May be a full DataSource definition, an existing instance, or the global ID of a registered DataSource.See
ProcessIO. When set, a SubProcessTask caller references fields on this schema via$output.<fieldName>in CoTTask.stateUpdates.- Returns:
- Current outputDS value. Default value is null
-
setOutputDS
OptionalDataSourcethat describes and validates the final output this Process produces on successful completion. May be a full DataSource definition, an existing instance, or the global ID of a registered DataSource.See
ProcessIO. When set, a SubProcessTask caller references fields on this schema via$output.<fieldName>in CoTTask.stateUpdates.- Parameters:
outputDS- New outputDS value. Default value is null- Returns:
Processinstance, for chaining setter calls- Throws:
IllegalStateException- this property cannot be changed after the underlying component has been created- See Also:
-
getOutputDSAsString
OptionalDataSourcethat describes and validates the final output this Process produces on successful completion. May be a full DataSource definition, an existing instance, or the global ID of a registered DataSource.See
ProcessIO. When set, a SubProcessTask caller references fields on this schema via$output.<fieldName>in CoTTask.stateUpdates.- Returns:
- Current outputDS value. Default value is null
- See Also:
-
setOutputFields
Shorthand alternative tooutputDS: a list ofDataSourceFielddefinitions the engine compiles into a temporary validation DataSource on demand. The declared field names also govern whichstateproperties are picked into the Process's output value ifsetOutput()is never called.See
ProcessIO.- Parameters:
outputFields- New outputFields value. Default value is null- Returns:
Processinstance, for chaining setter calls- Throws:
IllegalStateException- this property cannot be changed after the underlying component has been created
-
getOutputFields
Shorthand alternative tooutputDS: a list ofDataSourceFielddefinitions the engine compiles into a temporary validation DataSource on demand. The declared field names also govern whichstateproperties are picked into the Process's output value ifsetOutput()is never called.See
ProcessIO.- Returns:
- Current outputFields value. Default value is null
-
setRuleScope
Canvas.IDof the component that manages "rule context" for which this process participates. The rule context can be used intaskInputExpression.- Overrides:
setRuleScopein classBaseClass- Parameters:
ruleScope- New ruleScope value. Default value is null- Returns:
Processinstance, for chaining setter calls- Throws:
IllegalStateException- this property cannot be changed after the underlying component has been created- See Also:
-
getRuleScope
Canvas.IDof the component that manages "rule context" for which this process participates. The rule context can be used intaskInputExpression.- Overrides:
getRuleScopein classBaseClass- Returns:
- Current ruleScope value. Default value is null
- See Also:
-
setSequences
Sequences of ProcessElements. By defining a sequences of elements you can make theProcessElement.nextElementimplicit.For a simple sequence of tasks, consider using
tasksinstead.Example of using sequences:
Process process = new Process(); process.setStartElement("firstSequence"); ProcessSequence innerSequence = new ProcessSequence(incTask, add2Task, incTask); process.setSequences( new ProcessSequence("firstSequence", dsRequestTask, multiDecisionTask), new ProcessSequence("errorFlow", failureTask, userNotifyTask) ); // standalone process elements not part of sequences process.setElements(new DSRequestTask(){...}); Record state = new Record(); state.setAttribute("someField", "someValue"); process.setState(state); process.start();- Parameters:
sequences- New sequences value. Default value is null- Returns:
Processinstance, for chaining setter calls- Throws:
IllegalStateException- this property cannot be changed after the underlying component has been created
-
getSequences
Sequences of ProcessElements. By defining a sequences of elements you can make theProcessElement.nextElementimplicit.For a simple sequence of tasks, consider using
tasksinstead.Example of using sequences:
Process process = new Process(); process.setStartElement("firstSequence"); ProcessSequence innerSequence = new ProcessSequence(incTask, add2Task, incTask); process.setSequences( new ProcessSequence("firstSequence", dsRequestTask, multiDecisionTask), new ProcessSequence("errorFlow", failureTask, userNotifyTask) ); // standalone process elements not part of sequences process.setElements(new DSRequestTask(){...}); Record state = new Record(); state.setAttribute("someField", "someValue"); process.setState(state); process.start();- Returns:
- Current sequences value. Default value is null
-
setStartElement
The ID of either asequenceor anelementwhich should be the starting point of the process. If not specified, the first sequence is chosen, or if there are no sequences, the first element. - log a warning and do nothing if there are neither sequences or elements- Parameters:
startElement- New startElement value. Default value is null- Returns:
Processinstance, for chaining setter calls- Throws:
IllegalStateException- this property cannot be changed after the underlying component has been created
-
getStartElement
The ID of either asequenceor anelementwhich should be the starting point of the process. If not specified, the first sequence is chosen, or if there are no sequences, the first element. - log a warning and do nothing if there are neither sequences or elements- Returns:
- Current startElement value. Default value is null
-
setState
Current state of a process. As with Records in general, any field of a Record may contain a nested Record or Array of Records, so the process state is essentially a hierarchical data structure.Transient state
In addition to the explicit process state there is a "transient state." The transient state represents the complete output of each of the last tasks of each type within the current process execution. This allows easy reference to the previous task output withtaskInputExpressions.
If this method is called after the component has been drawn/initialized: Set process state for current process- Parameters:
state- the new process state. Default value is null- Returns:
Processinstance, for chaining setter calls
-
getState
Current state of a process. As with Records in general, any field of a Record may contain a nested Record or Array of Records, so the process state is essentially a hierarchical data structure.Transient state
In addition to the explicit process state there is a "transient state." The transient state represents the complete output of each of the last tasks of each type within the current process execution. This allows easy reference to the previous task output withtaskInputExpressions.- Returns:
- Current state value. Default value is null
-
setStrictPaths
If set to true, the process will not allow any intermediate state to be set viasetStateVariable()that is not explicitly defined first.- Parameters:
strictPaths- New strictPaths value. Default value is null- Returns:
Processinstance, for chaining setter calls
-
getStrictPaths
If set to true, the process will not allow any intermediate state to be set viasetStateVariable()that is not explicitly defined first.- Returns:
- Current strictPaths value. Default value is null
-
setTasks
Convenience form of declaring a single, linear sequence of tasks for this process. Functionally equivalent to providing a one-elementsequencesArray whose first (and only) member is this list.If
sequencesis not provided,process.tasksbecomes the sole sequence. If both are provided,process.tasksis inserted as the first sequence, followed by the declaredsequences.Each entry may be:
- A plain Object, which will be auto-instantiated as a Task or a
StartProcessTask(wrapping a nested Process) using the heuristic documented ondefaultTaskConstructor/defaultProcessConstructor. - An already constructed
ProcessElement(or subclass) instance.
- Parameters:
tasks- New tasks value. Default value is null- Returns:
Processinstance, for chaining setter calls- Throws:
IllegalStateException- this property cannot be changed after the underlying component has been created
- A plain Object, which will be auto-instantiated as a Task or a
-
setTraceContext
Context object to be passed toProcess.traceElement()during process execution.Note : This is an advanced setting
- Parameters:
traceContext- New traceContext value. Default value is null- Returns:
Processinstance, for chaining setter calls
-
getTraceContext
Context object to be passed toProcess.traceElement()during process execution.- Returns:
- Current traceContext value. Default value is null
-
setWizard
If wizard is set then current workflow will be handled as wizard. Every userTask will hide associated form after user finished step.- Parameters:
wizard- New wizard value. Default value is false- Returns:
Processinstance, for chaining setter calls- Throws:
IllegalStateException- this property cannot be changed after the underlying component has been created
-
getWizard
If wizard is set then current workflow will be handled as wizard. Every userTask will hide associated form after user finished step.- Returns:
- Current wizard value. Default value is false
-
afterTaskCommit
Notification hook invoked after a Task's outputs have been committed to state and history recorded, but before routing to the next element. Use for ancillary effects such as logging, metrics, or scheduling background work. This hook cannot veto the commit; to inject validation or replace outputs, usebeforeTaskCommit().- Parameters:
task- The Task that just committed.outputs- The committed outputs (if any).
-
applyStateUpdates
Apply the state updates specified bysetStateVariable()to the process state.stateUpdatesis a mapping from asetterPathto a ${TaskInputExpression} or other value.stateUpdatescan declare nested structures, andTaskInputExpressionsare allowed anywhere in the nested declaration.{ "currentDS.fields[]" : "$output" "lastCreatedField" : { "fromTask" : "Add Field", "fieldName" : "$output.name" } }In this example, the output is appended to the "currentDS.fields" array instateand an object called "lastCreatedField" is created inprocess.state.lastCreatedField.- Parameters:
stateUpdates- state updates to apply
-
applyStateUpdates
-
applyStateUpdates
Apply the state updates specified bysetStateVariable()to the process state.stateUpdatesis a mapping from asetterPathto a ${TaskInputExpression} or other value.stateUpdatescan declare nested structures, andTaskInputExpressionsare allowed anywhere in the nested declaration.{ "currentDS.fields[]" : "$output" "lastCreatedField" : { "fromTask" : "Add Field", "fieldName" : "$output.name" } }In this example, the output is appended to the "currentDS.fields" array instateand an object called "lastCreatedField" is created inprocess.state.lastCreatedField.- Parameters:
stateUpdates- state updates to applyinputRecord- record to use as the source for any $inputTaskInputExpressionproperties.strict- if true, the paths must exist in the state to be set. Otherwise, the paths will be created if not existing. Defaults toprocess.strictPathswhen null.
-
beforeTaskCommit
Override point invoked after a Task completes successfully, but before any of the Task's outputs are committed tostateand before next-task routing proceeds. Use this to:- Inject global validation and force a retry by returning errors.
- Augment or replace the Task's outputs prior to commit.
- Apply additional declarative updates to
state.
TaskResultModificationsobject to influence commit behavior. If you return nothing, the engine proceeds normally.- Parameters:
task- The Task or sub-Process that just completed.outputs- The Task's outputs- Returns:
- Optional result to modify commit behavior.
-
fail
Programmatically signal that this Process has hit an infrastructure failure and should terminate through itsfailed()channel rather than completing normally. Recoverable errors that are part of the Process's designed output schema should NOT use this path; model them as fields inoutputDS.- Parameters:
code- short identifier, e.g."aiUnavailable". SeeProcessFailure.
-
fail
Seefail() -
fail
Programmatically signal that this Process has hit an infrastructure failure and should terminate through itsfailed()channel rather than completing normally. Recoverable errors that are part of the Process's designed output schema should NOT use this path; model them as fields inoutputDS.- Parameters:
code- short identifier, e.g."aiUnavailable". SeeProcessFailure.message- human-readable descriptioncause- optional underlying exception or nested failure
-
failed
StringMethod called when a process terminates via an infrastructure failure - for example AI engine unavailable, schema-validation mismatch on input or output, uncaught JS exception, cancellation, or an ancestor-cycle deadlock when invoking a sub-Process. Recoverable errors that are part of the Process's designed output do NOT come through here; they live inside the successfulfinishedresult.See
ProcessFailurefor the shape of the argument.- Parameters:
failure- the failure record
-
addFinishedHandler
Add a finished handler.StringMethod called when a process completes, meaning the process executes a ProcessElement with no next element.
Handlers declared with a single
(state)signature remain supported; the second argument is ignored harmlessly for such handlers. Handlers that want the schema-validated result use the two-argument form.- Specified by:
addFinishedHandlerin interfaceHasFinishedHandlers- Parameters:
handler- the finished handler- Returns:
HandlerRegistrationused to remove this handler
-
getComponentReferences
Returns a list of unique global IDs that are referenced by this process.List is assembled by calling
ProcessElement.getComponentReferences()for each task in the workflow and filtering the list to the unique component IDs.- Returns:
- array of component IDs that are referenced by this process
-
getElement
Retrieve aProcessElementby its ID- Parameters:
ID- id of the process element- Returns:
- the indicated process element, or null if no such element exists
-
getLastTaskOutput
Returns the task output of the last task executed. More commonly aTaskInputExpressionproperty is used (seeProcessElement.getDynamicValue()).- Returns:
- the last task output or null if none is found
-
getLastTaskOutput
Returns the task output of the last task executed. More commonly aTaskInputExpressionproperty is used (seeProcessElement.getDynamicValue()).- Parameters:
taskType- the optional task type to lookup in last task output- Returns:
- the last task output or null if none is found
-
getOutput
Returns the Process's output, computed in this priority order:- The value passed to
setOutput()if any. - If
outputDS/outputFieldsare declared: a shallow pick of those field names fromstate. - Otherwise:
stateitself (back-compat).
- Returns:
- the computed output
- The value passed to
-
getProcessDescription
Returns the process description as HTML.- Returns:
- the process description as HTML
-
getProcessState
Returns the complete process state for persistence. This includes not just process.state, but execution position and transient data needed to resume the workflow.- Returns:
- Complete state object with: - state: process.state variables - execution: current execution position - transientData: task outputs that feed into subsequent tasks
-
getStateVariable
Returns a variable value from theprocess state. Values can be written into the process state bysetStateVariable(), settingProcessElement.bindOutput, or various task output settings (SeeTaskIO.)- Parameters:
stateVariablePath- path to variable in process state to set. segments are separated by a decimal point (.)- Returns:
- the value found at the path
-
getSuspendInfo
Returns information about why and where the process is suspended.- Returns:
- Object with reason and taskId, or null if not suspended
-
isSuspended
Returns true if the process is currently suspended.- Returns:
- true if suspended
-
passThruTaskOutput
Takes thelast task outputand sets it as thetask outputfor thetask.This method is not just a shortcut to set output of a pass-thru task, but it also records the correct schema of the passed-thru output so it can be quickly looked up.
- Parameters:
task- the workflow task setting the output (i.e. this)
-
reset
public void reset()Reset process to its initial state, so process can be started again. -
reset
Reset process to its initial state, so process can be started again.- Parameters:
state- new state of the process
-
restoreFromState
Restores process state from a previously saved complete state and optionally resumes execution.- Parameters:
completeState- State object from getProcessState()
-
restoreFromState
Restores process state from a previously saved complete state and optionally resumes execution.- Parameters:
completeState- State object from getProcessState()resume- If true, immediately resume execution after restore
-
resume
public void resume()Resumes a suspended process. If the process was suspended at a HumanTask, the taskOutput should contain the result of the human task completion. -
resume
Resumes a suspended process. If the process was suspended at a HumanTask, the taskOutput should contain the result of the human task completion.- Parameters:
taskOutput- Output from the completed async task
-
runTask
public void runTask(String taskID, RunTaskCallback callback, Map priorTaskOutputs, Map state, Map ruleContext) Execute a single task in isolation for testing. The process must not already be running. This method invokes the specified task once without advancing the workflow.Typically used for automated tests of complex tasks, including those involving AI.
Providing
priorTaskOutputsmeans thatTaskInputExpressionsand other forms ofTask.inputsdeclarative inputs will draw from the provided data. For example, $outputs.propertyName used as an expression would refer to the value underpropertyNamein the provided priorTaskOutputs object.If
stateis supplied, it is used as the temporary process state for this call (the original state is preserved). IfruleScopeis supplied, it replaces the normalruleScope determinationfor this invocation only.When the task completes,
callback(a Callbacks.RunTaskCallback()) is invoked with the task, process, and any outputs the task produced (for example, a CoTTask?s$outputs).- Parameters:
taskID- ID of the task to execute.callback- Completion callback.priorTaskOutputs- Optional object to simulate outputs from a prior task (see behavior above).state- Optional state fixture to use for this call.ruleContext- Optional override ruleContext for expression evaluation.
-
setNextElement
public void setNextElement()Sets the task ID of the next task to execute after the current task finishes. If the task is not found ornullis passed as the nextElement, the current process will be terminated instead. -
setNextElement
Sets the task ID of the next task to execute after the current task finishes. If the task is not found ornullis passed as the nextElement, the current process will be terminated instead.- Parameters:
nextElement- ID of the next task execute or null to terminate the process
-
setOutput
Explicitly set the final output this Process will deliver on successful completion, overriding the default behavior of picking output fields out ofstate. Callable from anywhere during execution; the most recent value wins.- Parameters:
output- the output value to deliver
-
setStateVariable
Sets aprocess statevariable for later reference withgetStateVariable()or more commonly with aTaskInputExpressionproperty.The path, which is one or more valid identifiers separated by periods, is used to identify the variable. By appending an empty pair of brackets ([]) the value will be placed into an existing or new array at the specified path.
- Parameters:
stateVariablePath- path to the variable in the process state to set. SeeSetterPathvalue- the value to save
-
setStateVariable
Sets aprocess statevariable for later reference withgetStateVariable()or more commonly with aTaskInputExpressionproperty.The path, which is one or more valid identifiers separated by periods, is used to identify the variable. By appending an empty pair of brackets ([]) the value will be placed into an existing or new array at the specified path.
- Parameters:
stateVariablePath- path to the variable in the process state to set. SeeSetterPathvalue- the value to savestrict- if true, the path must exist in the state to be set. Otherwise, the path will be created if it does not exist. Defaults toprocess.strictPathswhen null.
-
setTaskOutput
Sets the task output oftaskin theprocess stateso it can be used by later tasks withgetLastTaskOutput()or more commonly with aTaskInputExpressionproperty.If the task sets
bindOutputthe output value is also written into thatprocess statevariable.- Parameters:
task- the workflow task setting the output (i.e. this)value- the output value for task
-
start
public void start()Starts this task by executing thestartElement. Also used by asynchronous tasks to restart the workflow. -
suspend
Suspends process execution at the current point. The process state can be retrieved via getProcessState() for persistence.- Parameters:
reason- Reason for suspension (e.g., "HumanTask", "Timer")taskId- ID of the task where process is suspended
-
addTraceElementHandler
Add a traceElement handler.StringMethod called during process execution before each task element is processed.
- Specified by:
addTraceElementHandlerin interfaceHasTraceElementHandlers- Parameters:
handler- the traceElement handler- Returns:
HandlerRegistrationused to remove this handler
-
getProcess
Get a Process instance by its ID.Each process instance created that has an
IDis cached for later lookup by that ID. If two processes have the same ID the last one is cached, overwriting the first. Note that the process instances are not affected - only the cache reference.- Parameters:
processId- process ID to retrieve. SeeIdentifier- Returns:
- the process, or null if not found
- See Also:
-
onInit
protected void onInit() -
setAttribute
-
setConfig
-
loadProcess
-
getProcessElements
-
getElements
Elements involved in this Process. You can also group elements intosequencesto reduce the need to explicitly define IDs for elements and interlink them.- Returns:
- ProcessElement
-
getTasks
Convenience form of declaring a single, linear sequence of tasks for this process. Functionally equivalent to providing a one-elementsequencesArray whose first (and only) member is this list.- Returns:
- ProcessElement
-
setStartElement
- Throws:
IllegalStateException- See Also:
-