예제 #1
0
        /* (non-Javadoc)
         * @see org.fireflow.engine.ITaskInstance#abortEx(java.lang.String, org.fireflow.engine.taskinstance.DynamicAssignmentHandler)
         */
        public void abortEx(String targetActivityId, DynamicAssignmentHandler dynamicAssignmentHandler)
        {
            if (this.CurrentWorkflowSession == null)
            {
                new EngineException(this.ProcessInstanceId,
                                    this.WorkflowProcess, this.TaskId,
                                    "The current workflow session is null.");
            }
            if (this.RuntimeContext == null)
            {
                new EngineException(this.ProcessInstanceId,
                                    this.WorkflowProcess, this.TaskId,
                                    "The current runtime context is null.");
            }

            if ((this.State == TaskInstanceStateEnum.COMPLETED) || (this.State == TaskInstanceStateEnum.CANCELED))
            {
                throw new EngineException(this.ProcessInstanceId, this.WorkflowProcess,
                                          this.TaskId,
                                          "Abort task instance failed . The state of the task instance [id=" + this.Id + "] is " + this.State);
            }

            if (dynamicAssignmentHandler != null)
            {
                this.CurrentWorkflowSession.setDynamicAssignmentHandler(dynamicAssignmentHandler);
            }
            ITaskInstanceManager taskInstanceMgr = this.RuntimeContext.TaskInstanceManager;

            taskInstanceMgr.abortTaskInstanceEx(this.CurrentWorkflowSession, this.AliveProcessInstance, this, targetActivityId);
        }
예제 #2
0
        /// <summary>
        /// <para>结束当前WorkItem;并由工作流引擎根据流程定义决定下一步操作。引擎的执行规则如下</para>
        /// <para>1、工作流引擎首先判断该WorkItem对应的TaskInstance是否可以结束。</para>
        /// <para>   如果TaskInstance的assignment策略为ANY,或者,assignment策略为ALL且它所有的WorkItem都已经完成</para>
        /// <para>   则结束当前TaskInstance</para>
        /// <para>2、判断TaskInstance对应的ActivityInstance是否可以结束。如果ActivityInstance的complete strategy为ANY,</para>
        /// <para>   或者,complete strategy为ALL且他的所有的TaskInstance都已经结束,则结束当前ActivityInstance</para>
        /// <para>3、根据流程定义,启动下一个Activity,并创建相关的TaskInstance和WorkItem</para>
        /// </summary>
        /// <param name="dynamicAssignmentHandler">通过动态分配句柄指定下一个环节的操作者。</param>
        /// <param name="comments">备注信息</param>
        public void complete(DynamicAssignmentHandler dynamicAssignmentHandler, String comments)
        {
            if (this._workflowSession == null)
            {
                new EngineException(this.TaskInstance.ProcessInstanceId,
                                    this.TaskInstance.WorkflowProcess, this.TaskInstance.TaskId,
                                    "The current workflow session is null.");
            }
            if (this.RuntimeContext == null)
            {
                new EngineException(this.TaskInstance.ProcessInstanceId,
                                    this.TaskInstance.WorkflowProcess, this.TaskInstance.TaskId,
                                    "The current runtime context is null.");
            }

            if (this.State != WorkItemEnum.RUNNING)
            {
                TaskInstance thisTaskInst = (TaskInstance)this.TaskInstance;
                //			System.out.println("WorkItem的当前状态为"+this.State+",不可以执行complete操作。");
                throw new EngineException(thisTaskInst.ProcessInstanceId, thisTaskInst.WorkflowProcess, thisTaskInst.TaskId,
                                          "Complete work item failed . The state of the work item [id=" + this.Id + "] is " + this.State);
            }

            if (dynamicAssignmentHandler != null)
            {
                this._workflowSession.setDynamicAssignmentHandler(dynamicAssignmentHandler);
            }
            ITaskInstanceManager taskInstanceManager = this.RuntimeContext.TaskInstanceManager;

            taskInstanceManager.completeWorkItem(this, null, comments);
        }
예제 #3
0
        public DynamicAssignmentHandler consumeCurrentDynamicAssignmentHandler()
        {
            DynamicAssignmentHandler handler = this.dynamicAssignmentHandler;

            this.dynamicAssignmentHandler = null;
            return(handler);
        }
예제 #4
0
        public void completeWorkItemAndJumpToEx(String workItemId, String targetActivityId,
                                                DynamicAssignmentHandler dynamicAssignmentHandler, String comments)
        {
            IWorkItem wi = this.findWorkItemById(workItemId);

            wi.jumpToEx(targetActivityId, dynamicAssignmentHandler, comments);
        }
예제 #5
0
        public void jumpToEx(String targetActivityId, DynamicAssignmentHandler dynamicAssignmentHandler, String comments)
        {
            if (this._workflowSession == null)
            {
                new EngineException(this.TaskInstance.ProcessInstanceId,
                                    this.TaskInstance.WorkflowProcess, this.TaskInstance.TaskId,
                                    "The current workflow session is null.");
            }
            if (this.RuntimeContext == null)
            {
                new EngineException(this.TaskInstance.ProcessInstanceId,
                                    this.TaskInstance.WorkflowProcess, this.TaskInstance.TaskId,
                                    "The current runtime context is null.");
            }
            if (dynamicAssignmentHandler != null)
            {
                this._workflowSession.setDynamicAssignmentHandler(dynamicAssignmentHandler);
            }
            ITaskInstanceManager taskInstanceManager = this.RuntimeContext.TaskInstanceManager;

            taskInstanceManager.completeWorkItemAndJumpToEx(this, targetActivityId, comments);
        }
예제 #6
0
 public void setCurrentDynamicAssignmentHandler(DynamicAssignmentHandler handler)
 {
     this.dynamicAssignmentHandler = handler;
 }
예제 #7
0
        public void completeWorkItem(String workItemId, DynamicAssignmentHandler dynamicAssignmentHandler, String comments)
        {
            IWorkItem wi = this.findWorkItemById(workItemId);

            wi.complete(dynamicAssignmentHandler, comments);
        }
예제 #8
0
 public void setDynamicAssignmentHandler(DynamicAssignmentHandler dynamicAssignmentHandler)
 {
     this.dynamicAssignmentHandler = dynamicAssignmentHandler;
 }