Example #1
0
        public ActionResult addNodeHandle()
        {
            string templateId    = Request.Form["templateId"];
            string id            = Request.Form["id"];
            string Name          = Request.Form["Name"];
            string ViewCode      = Request.Form["ViewCode"];
            bool   IsCountersign = Request.Form["IsCountersign"] != null;

            string[] Handlers = Request.Form["Handlers"].Split(",".ToCharArray());

            int x = int.Parse(Request.Form["x"]);
            int y = int.Parse(Request.Form["y"]);

            if (Session[templateId] != null)
            {
                MyDB         mydb     = Session[templateId] as MyDB;
                WFTemplate   template = mydb.WFTemplates.Find(templateId);
                WFNodeHandle node     = new WFNodeHandle
                {
                    ID            = Guid.NewGuid().ToString(),
                    PositionX     = x,
                    PositionY     = y,
                    Name          = Name,
                    ViewCode      = ViewCode,
                    IsCountersign = IsCountersign,
                    WFTemplate    = template,
                    Subjects      = mydb.Subjects.Where(s => Handlers.Contains(s.ID)).ToArray()
                };

                mydb.WFNodeHandles.Add(node);
                return(Json(new { success = true, data = node.ID }));
            }
            return(Json(new { success = false }));
        }
Example #2
0
        /// <summary>
        /// URL: /workflow/Instance/create/id
        /// id: 模板ID
        /// 发起流程
        /// </summary>
        /// <returns></returns>
        public ActionResult create(string id)
        {
            using (MyDB mydb = new MyDB())
            {
                WFTemplate   template = mydb.WFTemplates.Find(id);
                WFNodeStart  start    = template.Nodes.OfType <WFNodeStart>().First();
                WFNodeHandle next     = start.Next as WFNodeHandle;
                if (next is WFNodeHandle)
                {
                    ((WFNodeHandle)next).Actions.Select(a => a);
                }

                Type t = getType(template);
                EntityObjectLib.WFInst inst = Activator.CreateInstance(t) as EntityObjectLib.WFInst;
                inst.WFTemplate  = template;
                inst.State       = "处理中";
                inst.WFInstNodes = new WFInstNode[] {
                    new WFInstNode
                    {
                        WFNode    = next,
                        State     = "处理中",
                        EntryTime = DateTime.Now,
                        WFInst    = inst
                    }
                };
                // 这里有一个设计约束:开始节点后一定是个处理节点
                return(View("toHandle", inst.CurrentNode));
            }
        }