Esempio n. 1
0
        private void HandleWorkflow(WorkflowActivity activity)
        {
            Console.WriteLine(">>>>> deal with acivity:" + activity.WorkFlowName);
            var currentNode = activity.CurrentNode;

            //Console.WriteLine(">>>>> acivity:" + activity.WorkFlowName + "  status: " + activity.CurrentActivityStatus + " workksheet: " + activity.CurrentWorksheet);
            activity.Process();
            Console.WriteLine(">>>>> acivity:" + activity.WorkFlowName + "  status: " + activity.CurrentActivityStatus + " workksheet: " + activity.CurrentWorksheet);
            Thread.Sleep(4000);
        }
Esempio n. 2
0
        public void WorkflowThread()
        {
            for (; ;)
            {
                if (EngineStop)
                {
                    return;
                }

                Console.WriteLine(">> engine pending list items: " + _workflowPendingList.Count);
                Console.WriteLine(">> engineQueue items: " + _workflowQueue.Count);
                lock (_workflowPendingList)
                {
                    if (_workflowQueue.Count == 0)
                    {
                        foreach (var activity in _workflowPendingList)
                        {
                            Console.WriteLine("-----[ acivity: " + activity.WorkFlowName + " ----- " + activity);
                            if (activity.CurrentActivityStatus == ACTIVITY_STATUS.Started)
                            {
                                _workflowQueue.Enqueue(activity);
                            }
                        }
                    }
                }

                if (_workflowQueue.Count > 0)
                {
                    lock (_workflowQueue)
                    {
                        Console.WriteLine(">> handle workflow...");
                        WorkflowActivity acivity = _workflowQueue.Dequeue();
                        //处理工作流
                        HandleWorkflow(acivity);
                    }
                }
                else
                {
                    Console.WriteLine(">> engineQueue items: " + _workflowQueue.Count);
                    Thread.Sleep(5000);
                }
            }
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            WorkflowEngine workflowEngine = new WorkflowEngine();

            //定义工作流活动1
            WorkflowActivity      file1Activity     = new WorkflowActivity("ACT_20180504", "代码检查流程_文件A");
            BaseTransitionAdapter transitionAdapter = new CodeCheckTransitionAdapter();

            file1Activity.AddTransitionAdapter(transitionAdapter);
            //定义工作流活动2
            WorkflowActivity      file2Activity      = new WorkflowActivity("ACT_20180506", "代码检查流程_文件Y");
            BaseTransitionAdapter transitionAdapter3 = new CodeCheckTransitionAdapter();

            file2Activity.AddTransitionAdapter(transitionAdapter3);

            //引擎开始
            workflowEngine.Start();

            //模拟一段时间后开始流程操作
            Thread.Sleep(5000);
            workflowEngine.AddAcivity(file1Activity);   //活动1 放入工作流引擎开始处理
            file1Activity.CreateWorksheet();

            Thread.Sleep(8000);
            file1Activity.ApproveNode();              //容许活动1当前节点
            workflowEngine.AddAcivity(file2Activity); //活动2 放入工作流引擎开始处理
            file2Activity.CreateWorksheet();

            //模拟一段时间后拒绝当前流程
            Thread.Sleep(8000);
            file2Activity.CancelNode();

            Thread.Sleep(12000);
            Console.WriteLine("----------------------------------------------------------------------");
            file1Activity.ApproveNode();     //容许活动1当前节点
            Console.ReadLine();
            workflowEngine.Stop();
        }
Esempio n. 4
0
 public void AddAcivity(WorkflowActivity activity)
 {
     _workflowPendingList.Add(activity);
 }