Пример #1
0
        private static int SubmitFormTask()
        {
            using (var client = new IntermediaryInboundExternalBasicClient())
            {
                var fts = new FormTaskShipmentBE
                {
                    ExternalShipmentReference = "uniqueReference" + DateTime.Now.ToLongTimeString(),
                    Reportee = ConfigurationManager.AppSettings["orgNo"]
                };

                var ft = new FormTask
                {
                    ServiceCode    = ConfigurationManager.AppSettings["serviceCode"],
                    ServiceEdition = int.Parse(ConfigurationManager.AppSettings["serviceEdition"])
                };

                var form = new Form
                {
                    DataFormatId           = ConfigurationManager.AppSettings["DataFormatId"],
                    DataFormatVersion      = int.Parse(ConfigurationManager.AppSettings["DataFormatVersion"]),
                    FormData               = ConfigurationManager.AppSettings["formData"],
                    EndUserSystemReference = "uniqueReferenceee" + DateTime.Now.ToLongTimeString(),
                    Completed              = true
                };

                var formList = new Form[1];
                formList[0]   = form;
                ft.Forms      = formList;
                fts.FormTasks = ft;

                var receipt = client.SubmitFormTaskBasic(ConfigurationManager.AppSettings["systemUserName"],
                                                         ConfigurationManager.AppSettings["systemPassword"], null, null, null, null, fts);
                return(receipt.ReceiptId);
            }
        }
Пример #2
0
        private void Form1_Load(object sender, EventArgs e)
        {
            FormTask f = new FormTask();

            f.MdiParent = this;
            f.AutoSize  = true;
            f.Show();
        }
Пример #3
0
        public void run(IWorkflowSession currentSession, RuntimeContext runtimeContext, IProcessInstance processInstance, ITaskInstance taskInstance) // throws EngineException, KernelException
        {
            if (taskInstance.TaskType != TaskTypeEnum.FORM)                                                                                           //!Task.FORM.Equals(taskInstance.TaskType))
            {
                throw new EngineException(processInstance, taskInstance.Activity,
                                          "DefaultFormTaskInstanceRunner:TaskInstance的任务类型错误,只能为FORM类型");
            }

            DynamicAssignmentHandler dynamicAssignmentHandler = ((WorkflowSession)currentSession).consumeCurrentDynamicAssignmentHandler();
            FormTask task = (FormTask)taskInstance.Task;
            // performer(id,name,type,handler)
            Participant performer = task.Performer;

            if (performer == null || performer.AssignmentHandler.Trim().Equals(""))
            {
                throw new EngineException(processInstance, taskInstance.Activity,
                                          "流程定义错误,Form类型的 task必须指定performer及其AssignmentHandler");
            }
            assign(currentSession, processInstance, runtimeContext, taskInstance, task, performer, dynamicAssignmentHandler);
        }
Пример #4
0
        /// <summary>分配, 按照当前任务的参与者插入工单</summary>
        /// <param name="currentSession"></param>
        /// <param name="processInstance"></param>
        /// <param name="runtimeContext"></param>
        /// <param name="taskInstance"></param>
        /// <param name="formTask"></param>
        /// <param name="part"></param>
        /// <param name="dynamicAssignmentHandler"></param>
        protected void assign(IWorkflowSession currentSession, IProcessInstance processInstance, RuntimeContext runtimeContext, ITaskInstance taskInstance, FormTask formTask, Participant part, DynamicAssignmentHandler dynamicAssignmentHandler)// throws EngineException, KernelException
        {
            //如果有指定的Actor,则按照指定的Actor分配任务
            if (dynamicAssignmentHandler != null)
            {
                dynamicAssignmentHandler.assign((IAssignable)taskInstance, part.Name);
            }
            else
            {
                IPersistenceService  persistenceService           = runtimeContext.PersistenceService;
                List <ITaskInstance> taskInstanceList             = persistenceService.FindTaskInstancesForProcessInstance(taskInstance.ProcessInstanceId, taskInstance.ActivityId);
                ITaskInstance        theLastCompletedTaskInstance = null;

                for (int i = 0; taskInstanceList != null && i < taskInstanceList.Count; i++)
                {
                    ITaskInstance tmp = (ITaskInstance)taskInstanceList[i];
                    if (tmp.Id.Equals(taskInstance.Id))
                    {
                        continue;
                    }
                    if (!tmp.TaskId.Equals(taskInstance.TaskId))
                    {
                        continue;
                    }
                    if (tmp.State != TaskInstanceStateEnum.COMPLETED)
                    {
                        continue;
                    }
                    if (theLastCompletedTaskInstance == null)
                    {
                        theLastCompletedTaskInstance = tmp;
                    }
                    else
                    {
                        if (theLastCompletedTaskInstance.StepNumber < tmp.StepNumber)
                        {
                            theLastCompletedTaskInstance = tmp;
                        }
                    }
                }

                //如果是循环且LoopStrategy==REDO,则分配个上次完成该工作的操作员
                if (theLastCompletedTaskInstance != null && (LoopStrategyEnum.REDO == formTask.LoopStrategy || currentSession.isInWithdrawOrRejectOperation()))
                {
                    List <IWorkItem>     workItemList    = persistenceService.FindCompletedWorkItemsForTaskInstance(theLastCompletedTaskInstance.Id);
                    ITaskInstanceManager taskInstanceMgr = runtimeContext.TaskInstanceManager;
                    for (int k = 0; k < workItemList.Count; k++)
                    {
                        IWorkItem completedWorkItem = (IWorkItem)workItemList[k];

                        IWorkItem newFromWorkItem = taskInstanceMgr.createWorkItem(currentSession, processInstance, taskInstance, completedWorkItem.ActorId);
                        newFromWorkItem.claim();//并自动签收
                    }
                }
                else
                {
                    IBeanFactory beanFactory = runtimeContext.BeanFactory;
                    //从spring中获取到对应任务的Performer,创建工单
                    //201004 add lwz 参与者通过业务接口实现默认获取用户
                    switch (part.AssignmentType)
                    {
                    case AssignmentTypeEnum.Current:
                        runtimeContext.AssignmentBusinessHandler.assignCurrent(
                            currentSession, processInstance, (IAssignable)taskInstance);
                        break;

                    case AssignmentTypeEnum.Role:
                        runtimeContext.AssignmentBusinessHandler.assignRole(
                            currentSession, processInstance, (IAssignable)taskInstance, part.PerformerValue);
                        break;

                    case AssignmentTypeEnum.Agency:
                        runtimeContext.AssignmentBusinessHandler.assignAgency(
                            currentSession, processInstance, (IAssignable)taskInstance, part.PerformerValue);
                        break;

                    case AssignmentTypeEnum.Fixed:
                        runtimeContext.AssignmentBusinessHandler.assignFixed(
                            currentSession, processInstance, (IAssignable)taskInstance, part.PerformerValue);
                        break;

                    case AssignmentTypeEnum.Superiors:
                        runtimeContext.AssignmentBusinessHandler.assignSuperiors(
                            currentSession, processInstance, (IAssignable)taskInstance);
                        break;

                    default:
                        IAssignmentHandler assignmentHandler = (IAssignmentHandler)beanFactory.GetBean(part.AssignmentHandler);
                        //modified by wangmj 20090904
                        ((IAssignmentHandler)assignmentHandler).assign((IAssignable)taskInstance, part.PerformerValue);
                        break;
                    }
                }
            }
        }
Пример #5
0
        protected Task createTask(IWFElement parent, XElement xElement)
        {
            Task         task = null;
            TaskTypeEnum type = (TaskTypeEnum)Enum.Parse(typeof(TaskTypeEnum), GetAttributeValue(xElement, TYPE), true);

            switch (type)
            {
            case TaskTypeEnum.FORM:
                task = new FormTask(parent, GetAttributeValue(xElement, NAME));
                ((FormTask)task).AssignmentStrategy = (FormTaskEnum)Enum.Parse(typeof(FormTaskEnum), GetAttributeValue(xElement, COMPLETION_STRATEGY), true);
                ((FormTask)task).DefaultView        = (DefaultViewEnum)Enum.Parse(typeof(DefaultViewEnum), GetAttributeValue(xElement, DEFAULT_VIEW), true);
                break;

            case TaskTypeEnum.TOOL:
                task = new ToolTask(parent, GetAttributeValue(xElement, NAME));
                break;

            case TaskTypeEnum.SUBFLOW:
                task = new SubflowTask(parent, GetAttributeValue(xElement, NAME));
                break;

            default: return(null);
            }

            task.Sn                              = Guid.NewGuid().ToString();
            task.DisplayName                     = GetAttributeValue(xElement, DISPLAY_NAME);
            task.TaskInstanceCreator             = GetAttributeValue(xElement, TASK_INSTANCE_CREATOR);
            task.TaskInstanceRunner              = GetAttributeValue(xElement, TASK_INSTANCE_RUNNER);
            task.TaskInstanceCompletionEvaluator = GetAttributeValue(xElement, TASK_INSTANCE_COMPLETION_EVALUATOR);
            task.LoopStrategy                    = GetEnum <LoopStrategyEnum>(GetAttributeValue(xElement, LOOP_STRATEGY));

            int priority = 0;

            try { priority = Int32.Parse(GetAttributeValue(xElement, PRIORITY)); }
            catch { }
            task.Priority = priority;
            if (task is FormTask)
            {
                ((FormTask)task).Performer = createPerformer(xElement.Element("{" + FPDL_URI + "}" + PERFORMER));

                ((FormTask)task).EditForm = createForm(xElement.Element("{" + FPDL_URI + "}" + EDIT_FORM));
                ((FormTask)task).ViewForm = createForm(xElement.Element("{" + FPDL_URI + "}" + VIEW_FORM));
                ((FormTask)task).ListForm = createForm(xElement.Element("{" + FPDL_URI + "}" + LIST_FORM));
            }

            if (task is ToolTask)
            {
                ((ToolTask)task).Application = createApplication(xElement.Element("{" + FPDL_URI + "}" + APPLICATION));
            }
            if (task is SubflowTask)
            {
                ((SubflowTask)task).SubWorkflowProcess = createSubWorkflowProcess(xElement.Element("{" + FPDL_URI + "}" + SUB_WORKFLOW_PROCESS));
            }

            task.Description = GetElementValue(xElement, "{" + FPDL_URI + "}" + DESCRIPTION);

            task.Duration = createDuration(xElement.Element("{" + FPDL_URI + "}" + DURATION));

            loadExtendedAttributes(task.ExtendedAttributes, xElement.Element("{" + FPDL_URI + "}" + EXTENDED_ATTRIBUTES));
            loadEventListeners(task.EventListeners, xElement.Element("{" + FPDL_URI + "}" + EVENT_LISTENERS));

            return(task);
        }