コード例 #1
0
        public string Start(BridgeCommandDto dto)
        {
            Category category = new CategoryService().Query()
                                .FirstOrDefault(cate => cate.NID == dto.CategoryCode);

            WorkflowStructure workflowStructure =
                _abstractService.WorkflowStructureService.Query()
                .FirstOrDefault(e => e.CategoryCode == category.NID && e.Status == 1);

            var    model      = EmitCore.Convert <BridgeCommandDto, Bridge>(dto);
            string instanceID = WorkflowEngine.Instance.Start(workflowStructure.Resource);

            model.InstanceID = instanceID;
            model.Comment    = String.IsNullOrEmpty(model.Comment) ? category.Name : model.Comment;
            model.CreateTime = DateTime.Now;
            CommandBus.Dispatch(new CreateBridge(), model);

            var b = _bridgeService.Query(instanceID);
            WorkflowInstance Instance = WorkflowInstance.GetInstance(instanceID);
            var    current            = GetCurrent(Instance, model.Creator);
            string serialObject       = GetAuditNext(current, model.CategoryCode, b.Creator, b.Name, out string selectTransitionID);

            WorkflowEngine.Instance.Jump(new WorkflowContext()
            {
                Instance     = Instance,
                ActorID      = model.Creator,
                Message      = "提交",
                TransitionID = selectTransitionID,
                Data         = Newtonsoft.Json.JsonConvert.DeserializeObject(serialObject),
                Current      = current
            });

            return(instanceID);
        }
コード例 #2
0
        public JsonResult GetAuditUser(string instanceID)
        {
            WorkflowInstance instance = WorkflowInstance.GetInstance(instanceID);

            return(Json(new UserService()
                        .GetPendingUserList(instance.Current.NID, instanceID)));
        }
コード例 #3
0
        public IEnumerable <Transition> GetTransition(ActorCommandDto dto)
        {
            WorkflowInstance instance = WorkflowInstance.GetInstance(dto.ID);
            var current = GetCurrent(instance, dto.ActorID);

            return(NodeService.GetExecuteTransition(current));
        }
コード例 #4
0
        public IEnumerable <Transition> GetTransition(string instanceID, string actorID)
        {
            WorkflowInstance instance = WorkflowInstance.GetInstance(instanceID);
            var current = GetCurrent(instance, actorID);

            return(NodeService.GetExecuteTransition(current));
        }
コード例 #5
0
        public int GetNodeCooperation(string instanceID, string actorID)
        {
            WorkflowInstance instance = WorkflowInstance.GetInstance(instanceID);
            Node             current  = GetCurrent(instance, actorID);

            return(String.IsNullOrEmpty(current.Cooperation) ? 0 : 1);
        }
コード例 #6
0
        public string Start(BridgeBody dto)
        {
            Category          category          = new CategoryService().Query().FirstOrDefault(cate => cate.NID == dto.CategoryCode);
            WorkflowStructure workflowStructure =
                _abstractService.WorkflowStructureService.Query().FirstOrDefault(e => e.CategoryCode == category.NID && e.Status == 1);
            string instanceID = WorkflowEngine.Instance.Start(workflowStructure.Resource);

            Bridge model = _mapper.Map <Bridge>(dto);

            model.InstanceID = instanceID;
            model.Comment    = String.IsNullOrEmpty(model.Comment) ? category.Name : model.Comment;
            model.CreateTime = DateTime.Now;
            CommandBus.Dispatch(new CreateBridge(), model);
            var user = _actorService.GetUserByID(model.Creator);
            WorkflowInstance Instance = WorkflowInstance.GetInstance(instanceID);
            var    current            = GetCurrent(Instance, model.Creator);
            string serialObject       = GetAuditNext(current, model.CategoryCode, model.Creator, user.Name, out string selectTransitionID);

            WorkflowEngine.Instance.Jump(new WorkflowContext()
            {
                Instance     = Instance,
                ActorID      = model.Creator,
                Message      = category.Name,
                TransitionID = selectTransitionID,
                Data         = Newtonsoft.Json.JsonConvert.DeserializeObject(serialObject),
                Current      = current
            });

            LogProxy.Instance.Info(string.Format("启动{0}流程 实例ID{1}", model.CategoryCode, instanceID));
            return(instanceID);
        }
コード例 #7
0
        /// <summary>
        /// 获取当前节点信息
        /// </summary>
        /// <param name="id">实例ID</param>
        /// <returns></returns>
        public dynamic Get(string id, string actorId)
        {
            WorkflowInstance instance = WorkflowInstance.GetInstance(id);
            var current = instance.Current;

            Dictionary <string, object> queryArg = new Dictionary <string, object>
            {
                { "actorID", actorId },
                { "instanceID", id },
                { "nodeID", current.NID }
            };

            var pending = queryService.Query(queryArg).FirstOrDefault();

            var hasAuth = (current.NodeType == WorkflowNodeCategory.Start && instance.State == WorkflowInstanceState.Running) ?
                          true : instance.State == WorkflowInstanceState.Running && pending != null;

            return(new
            {
                current.NID,
                current.Name,
                Category = current.NodeType.ToString(),
                HasAuth = hasAuth
            });
        }
コード例 #8
0
        private void Invoke(Node to, ExecutingContext executeContext, WorkflowContext context)
        {
            string instanceID = context.Instance.InstanceID;

            workflowService.InstanceService.Jump(context.Current.ID, to.ID, instanceID, new WorkflowProcess()
            {
                RelationshipID = executeContext.From.NID,
                CreateTime     = DateTime.Now,
                ActorID        = context.ActorID,
                Origin         = executeContext.From.ID,
                Destination    = executeContext.To.ID,
                TransitionID   = context.TransitionID,
                InstanceID     = executeContext.Instance.InstanceID,
                NodeType       = executeContext.From.NodeType,
                Direction      = WorkflowOpertaion.Back
            }, workflowService.ProcessService);

            workflowService.Actions.ForEach(pluin => pluin.ActionExecute(executeContext));

            if (to.NodeType == WorkflowNodeCategory.Decision)
            {
                Jump(new WorkflowContext()
                {
                    Instance     = WorkflowInstance.GetInstance(instanceID),
                    TransitionID = context.TransitionID,
                    Data         = context.Data,
                    Message      = "系统流转",
                    ActorID      = context.ActorID,
                    Current      = to
                });
            }
        }
コード例 #9
0
        public static bool CheckUndoAuth(string instanceID)
        {
            WorkflowInstance instance = WorkflowInstance.GetInstance(instanceID);
            User             userInfo = System.Web.HttpContext.Current.Session["user"] as User;

            return(instance.Current.GetFromNode().GetActors().Count(e => e.IDENTIFICATION == userInfo.IDENTIFICATION) > 0);
        }
コード例 #10
0
        public JsonResult GetTransitions(string instanceID)
        {
            WorkflowInstance  instance    = WorkflowInstance.GetInstance(instanceID);
            List <Transition> transitions = NodeService.GetExecuteTransitions(instance);

            return(Json(transitions));
        }
コード例 #11
0
        public void Reboot(string instanceID, string categoryCode, string id)
        {
            WorkflowInstance wfInstance  = WorkflowInstance.GetInstance(instanceID);
            string           resourceXml = wfInstance.Resource;

            CommandBus.Dispatch(new DeleteWFRecord(), instanceID);
            string newInstanceID = WorkflowEngine.Instance.Start(resourceXml);

            Bridge bridge = _bridgeService.GetBridge(id);

            bridge.InstanceID = newInstanceID;
            CommandBus.Dispatch(new UpdateBridge(), bridge);

            var user = _actorService.GetUserByID(bridge.Creator);
            WorkflowInstance instance = WorkflowInstance.GetInstance(newInstanceID);
            var current = GetCurrent(instance, bridge.Creator);

            string serialObject = GetAuditNext(current, categoryCode, bridge.Creator, user.Name, out string selectTransitionID);

            WorkflowEngine.Instance.Jump(new WorkflowContext()
            {
                Instance     = instance,
                ActorID      = bridge.Creator,
                Message      = String.Empty,
                TransitionID = selectTransitionID,
                Current      = GetCurrent(instance, bridge.Creator),
                Data         = Newtonsoft.Json.JsonConvert.DeserializeObject(serialObject)
            });
        }
コード例 #12
0
        /// <summary>
        /// 驳回
        /// </summary>
        /// <param name="instanceID"></param>
        public void Reject(string instanceID)
        {
            WorkflowInstance instance = WorkflowInstance.GetInstance(instanceID);

            //一、驳回流程
            context.Reject(instance);
            //二、删除当前节点中所有人待办任务
        }
コード例 #13
0
        public int GetNodeCooperation(ActorCommandDto dto)
        {
            WorkflowInstance instance = WorkflowInstance.GetInstance(dto.ID);

            Node current = GetCurrent(instance, dto.ActorID);

            return(String.IsNullOrEmpty(current.Cooperation)?0:1);
        }
コード例 #14
0
        /// <summary>
        /// 工作流组件
        /// </summary>
        /// <param name="instanceID">流程实例ID</param>
        /// <returns></returns>
        public ActionResult WorkflowCheck(string instanceID, string bussinessID)
        {
            ViewBag.InstanceID  = instanceID;
            ViewBag.bussinessID = bussinessID;
            WorkflowInstance instance = WorkflowInstance.GetInstance(instanceID);

            ViewBag.CheckResult = CommonMethods.CheckUndoButton(instanceID);
            return(View(instance.Current.GetTransitions()));
        }
コード例 #15
0
 public void Jump(PostContext context)
 {
     WorkflowEngine.Instance.Jump(new WorkflowContext()
     {
         Instance     = WorkflowInstance.GetInstance(context.InstanceID),
         TransitionID = (String)context.Data.Transition,
         Data         = context.Data
     });
 }
コード例 #16
0
        /// <summary>
        /// 工作流组件
        /// </summary>
        /// <param name="instanceID">流程实例ID</param>
        /// <returns></returns>
        public ActionResult WorkflowCheck(string instanceID, string bussinessID, string bllService)
        {
            ViewBag.InstanceID  = instanceID;
            ViewBag.bussinessID = bussinessID;
            ViewBag.bllService  = bllService;
            WorkflowInstance instance = WorkflowInstance.GetInstance(instanceID);

            return(View(instance.Current.GetTransitions()));
        }
コード例 #17
0
        public JsonResult GetProcess(string instanceID)
        {
            WorkflowInstance instance = WorkflowInstance.GetInstance(instanceID);

            return(Json(new
            {
                structure = instance.Resource,
                id = instance.Current.ID
            }));
        }
コード例 #18
0
        /// <summary>
        /// 原路退回
        /// </summary>
        /// <param name="instanceID"></param>
        /// <param name="data"></param>
        public void Back(string instanceID, dynamic data)
        {
            WorkflowInstance instance = WorkflowInstance.GetInstance(instanceID);

            context.Back(new WorkflowContext()
            {
                Instance = instance,
                Data     = data
            });
        }
コード例 #19
0
        public IEnumerable <User> GetUser(string id)
        {
            WorkflowInstance            instance = WorkflowInstance.GetInstance(id);
            Dictionary <String, string> queryArg = new Dictionary <string, string>
            {
                { "instanceID", id },
                { "nodeID", instance.Current.NID }
            };

            return(_actorService.Query(queryArg));
        }
コード例 #20
0
        public void Jump(string instanceID, string transitionID, dynamic data)
        {
            WorkflowInstance instance = WorkflowInstance.GetInstance(instanceID);

            context.Jump(new WorkflowContext()
            {
                Instance     = instance,
                TransitionID = transitionID,
                Data         = data
            });
        }
コード例 #21
0
        public ActionResult WorkflowImage(string instanceID)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();

            ViewBag.Result = serializer.Serialize(WorkflowInstance.GetInstance(instanceID));

            DataTable dt = WorkflowServiceProvider.OfType <IWorkflowActor>().GetRecord(instanceID);

            ViewBag.Record = Newtonsoft.Json.JsonConvert.SerializeObject(dt);

            return(View());
        }
コード例 #22
0
        public void Rollback(string instanceID, long actorID, string actorName, dynamic data)
        {
            WorkflowInstance instance = WorkflowInstance.GetInstance(instanceID);

            context.Rollback(new WorkflowContext()
            {
                Instance  = instance,
                Data      = data,
                ActorID   = actorID,
                ActorName = actorName
            });
        }
コード例 #23
0
        public void Jump(string instanceID, string transitionID, long actorID, string actorName, dynamic data)
        {
            WorkflowInstance instance = WorkflowInstance.GetInstance(instanceID);

            context.Jump(new WorkflowContext()
            {
                Instance     = instance,
                TransitionID = transitionID,
                Data         = data,
                ActorID      = actorID,
                ActorName    = actorName
            });
        }
コード例 #24
0
        /// <summary>
        /// 依据跳转跳线获取下节点审批用户列表
        /// </summary>
        /// <param name="instanceID">流程实例</param>
        /// <param name="transitionID">跳转路线ID</param>
        /// <returns>用户列表</returns>
        public JsonResult GetUsers(string instanceID, string transitionID)
        {
            WorkflowInstance instance  = WorkflowInstance.GetInstance(instanceID);
            List <Group>     groupList = instance.Current.GetNextGroup(transitionID);
            List <string>    gList     = new List <string>();

            foreach (Group g in groupList)
            {
                gList.Add(g.IDENTIFICATION.ToString());
            }
            List <User> userList = new UserService().GetUserList(string.Join(",", gList));

            return(Json(userList));
        }
コード例 #25
0
        public void Kill(PostLostContextDto dto)
        {
            WorkflowInstance instance = WorkflowInstance.GetInstance(dto.ID);
            Node             current  = NodeService.FindNodeByID(dto.Destination, dto.ID);

            WorkflowEngine.Instance.Kill(instance, new WorkflowContext()
            {
                Message  = dto.Message,
                Instance = instance,
                NodeID   = current.NID,
                Data     = dto.Data,
                Current  = current
            });
        }
コード例 #26
0
        public void Kill(string categoryCode, string instanceID, string destination)
        {
            WorkflowInstance instance = WorkflowInstance.GetInstance(instanceID);
            Node             current  = NodeService.FindNodeByID(destination, instanceID);

            WorkflowEngine.Instance.Kill(instance, new WorkflowContext()
            {
                Message  = "终止流程",
                Instance = instance,
                NodeID   = current.NID,
                Data     = new { CategoryCode = categoryCode },
                Current  = current
            });
        }
コード例 #27
0
        public dynamic GetCurrentNodeActor(RequestInstanceDto dto)
        {
            WorkflowInstance instance = WorkflowInstance.GetInstance(dto.ID);
            Node             current  = instance.Current.Where(e => e.NID == dto.Destination).FirstOrDefault();

            return(new
            {
                NodeType = current.NodeType.ToString(),
                Actor = current.Actors,
                Group = current.Groups,
                Organization = current.Organizations,
                Carbon = current.Carbons
            });
        }
コード例 #28
0
        public JsonResult GetCurrent(string instanceID)
        {
            WorkflowInstance instance = WorkflowInstance.GetInstance(instanceID);
            var current = instance.Current;

            return(Json(new
            {
                current.NID,
                current.Name,
                Category = current.NodeType.ToString(),
                HasAuth = (current.Name == "开始" && instance.State == WorkflowInstanceState.Running) ? true :
                          instance.State == WorkflowInstanceState.Running &&
                          CommonMethods.CheckAuth(current.NID, instanceID, UserInfo)
            }));
        }
コード例 #29
0
        public void UndoSubmit(string instanceID, long actorID, string actorName, string bussinessID)
        {
            WorkflowInstance instance = WorkflowInstance.GetInstance(instanceID);
            dynamic          dynData  = new ExpandoObject();

            dynData.bussinessID = bussinessID;
            dynData.Message     = "撤销此节点";
            context.Cancel(new WorkflowContext()
            {
                Instance  = instance,
                Data      = dynData,
                ActorID   = actorID,
                ActorName = actorName
            });
        }
コード例 #30
0
        public void Jump(PostContextDto context)
        {
            WorkflowInstance Instance = WorkflowInstance.GetInstance(context.InstanceID);
            var current = GetCurrent(Instance, context.ActorID);

            WorkflowEngine.Instance.Jump(new WorkflowContext()
            {
                Instance     = Instance,
                ActorID      = context.ActorID,
                Message      = context.Message,
                TransitionID = context.TransitionID,
                Data         = context.Data,
                Current      = current
            });
        }