9.2. Task instances|任務實例|
A task instance can be assigned to an actorId (java.lang.String).|任務實例被分派給一個行為ID。| All task instances are stored in one table of the database (JBPM_TASKINSTANCE).|所有的實例都被存儲在數據庫的一個表格里(JBPM_TASKINSTANCE)。| By querying this table for all task instances for a given actorId, you get the task list for that perticular user. |通過查詢這個行為ID表的所有任務實例的表,你得到指定用戶的任務列表。|
The jBPM task list mechanism can combine jBPM tasks with other tasks, even when those tasks are unrelated to a process execution.|jBPM任務列表機制可以與其它任務結合jBPM任務,甚至當這些任務與一個流程執行無關。| That way jBPM developers can easily combine jBPM-process-tasks with tasks of other applications in one centralized task-list-repository.|那種方法jBPM開發人員可以和容易的使jBPM流程任務在一個集中的任務列表庫與其他程序中的任務|
9.2.1. Task instance life cycle |任務實例生命周期|
The task instance lifecycle is straightforward: After creation, task instances can optionally be started.|任務生命周期是 簡單的:在創建之后,任務實例可以隨意地被開始。| Then, task instances can be ended, which means that the task instance is marked as completed.|接著,任務實例可能被結束,它意味著任務實例已經被標志已完成。|
Note that for flexibility, assignment is not part of the life cycle.|注意適應性、委派不是生命周期的一部分。| So task instances can be assigned or not assigned.|所有任務實例可能被委派也可能不被委派。| Task instance assignment does not have an influence on the task instance life cycle.|任務實例委派不影響任務實例的生命周期。|
Task instances are typically created by the process execution entering a task-node (with the method TaskMgmtInstance.createTaskInstance(...)).|任務實例被進入一個任務節點流程執行代典型的創建(使用TaskMgmtInstance.createInstance(...)方法)| Then, a user interface component will query the database for the tasklists using the TaskMgmtSession.findTaskInstancesByActorId(...).|接著一個用戶接口組件將要為任務列表查詢數據庫使用TaskMgmtSession.findTaskInstancesByActorId(...)| Then, after collecting input from the user, the UI component calls TaskInstance.assign(String), TaskInstance.start() or TaskInstance.end(...).|接著,在收集從用戶收入之后,這個UI組件調用TaskIntsance.assign(String),TaskInstance.start() 或者 TaskInstance.end(...)。|
A task instance maintains it's state by means of date-properties : create, start and end.|一個任務實例依靠日期屬性維護它的狀態:創建、開始、結束。| Those properties can be accessed by their respective getters on the TaskInstance.|這些屬性可以通過它們的各自在任務實例上的的getters被訪問。|
Currently, completed task instances are marked with an end date so that they are not fetched with subsequent queries for tasks lists.|通常地,完成的任務實例被標志為結束狀態,所以他們并不通過對任務列表的子查詢獲得。| But they remain in the JBPM_TASKINSTANCE table.|但是他們仍然保持在JBPM_TASKINGSTANCE表中。|
9.2.2. Task instances and graph execution|任務實例和圖表執行|
Task instances are the items in an actor's tasklist.|任務實例是在行動者的任務列表中的項目。| Task instances can be signalling.|任務實例可以被發信號的| A signalling task instance is a task instance that, when completed, can send a signal to its token to continue the process execution.|一個發信號的任務實例是一個這樣的任務實例,當被完成時候,可以發送一個信號給它的令牌以繼續流程的執行。| Task instances can be blocking, meaning that the related token (=path of execution) is not allowed to leave the task-node before the task instance is completed.|任務實例可以被模塊化,意味著有關系的令牌(執行路徑)在任務實例完成之前允許離開任務節點。| By default task instances are signalling and non-blocking. |缺省的任務實例是被信號化且非模塊化的。|
In case more than one task instance are associated with a task-node, the process developer can specify how completion of the task instances affects continuation of the process.|萬一超過一個的任務實例與一個任務節點關聯,這個流程開發者可以定義 任務實例的完成如何影響流程的繼續。| Following is the list of values that can be given to the signal-property of a task-node.|接下來是值的列表可以指定給節點的信號屬性。|
last: This is the default.|最后:這是缺省的。| Proceeds execution when the last task instance is completed.|當最后流程執行完畢,繼續進行執行。| When no tasks are created on entrance of this node, execution waits in the task node till tasks are created.|當在這個的節點的入口沒有任務被創建,在任務節點中執行等待直到這些任務被創建。|
last-wait: Proceeds execution when the last task instance is completed. When no tasks are created on entrance of this node, execution waits in the task node till tasks are created.
first: Proceeds execution when the first task instance is completed. When no tasks are created on entrance of this node, execution is continued.
first-wait: Proceeds execution when the first task instance is completed. When no tasks are created on entrance of this node, execution is continued.
unsynchronized: Execution always continues, regardless wether tasks are created or still unfinished.
never: Execution never continues, regardless wether tasks are created or still unfinished.
Task instance creation might be based upon a runtime calculation. In that case, add an ActionHandler on the node-enter event of the task-node and set the attribute create-tasks="false". Here is an example of such an action handler implementation:
public class CreateTasks implements ActionHandler {
public void execute(ExecutionContext executionContext) throws Exception {
Token token = executionContext.getToken();
TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();
TaskNode taskNode = (TaskNode) executionContext.getNode();
Task changeNappy = taskNode.getTask("change nappy");
// now, 2 task instances are created for the same task.
tmi.createTaskInstance(changeNappy, token);
tmi.createTaskInstance(changeNappy, token);
}
}
As shown in the example the tasks to be created can be specified in the task-node. They could also be specified in the process-definition and fetched from the TaskMgmtDefinition. TaskMgmtDefinition extends the ProcessDefinition with task management information.
The API method for marking task instances as completed is TaskInstance.end(). Optionally, you can specify a transition in the end method. In case the completion of this task instance triggers continuation of the execution, the task-node is left over the specified transition.