예제 #1
0
        public void runWorkflowForSelectedMethods(workflow workflow)
        {
            Common.Extensions.TraceLog.Information("Running workflow {name}", SelectedWorkflow.name);

            var worker = new BackgroundWorker();

            worker.DoWork += (o, s) =>
            {
                IsBusy = true;

                try
                {
                    foreach (var task in workflow.task.Where(x => !x.isDisabled))
                    {
                        runTask(task);
                    }
                }
                catch (Exception e)
                {
                    Common.Extensions.ErrorLog.Error(e, "@ runWorkflowForSelectedMethods");
                }
            };
            worker.RunWorkerCompleted += (o, s) =>
            {
                ExecutedWorkflow = workflow;

                if (SelectedConfiguration.method
                    .Any(m => m.isValidTest == eValidTest.Passed || m.isValidTest == eValidTest.Failed))
                {
                    OnPropertyChanged("MethodsTable");
                }
                IsBusy = false;
            };
            worker.RunWorkerAsync();
        }
예제 #2
0
        /// <summary>
        /// 检查操作者是否有权限执行该动作
        /// </summary>
        /// <param name="workflowName">工作流名称</param>
        /// <param name="dataid">业务表id</param>
        /// <param name="actionName">动作名称</param>
        /// <param name="operatorid">操作者ID</param>
        /// <returns></returns>
        public bool checkNodeAction(string workflowName, int dataid, string actionName, int operatorid)
        {
            workflowEx          workflowEx    = new workflowEx();
            workflow            wf            = workflowEx.getworkflow(workflowName);              //获取该工作流名称对应的工作流数据
            workflowinstancesEx wfinstancesEx = new workflowinstancesEx();
            workflowinstances   wfinstances   = wfinstancesEx.getworkflowinstances(wf.id, dataid); //获得工作流执行结果

            //状态跃迁时
            //判断操作者是否有权限
            if (wfinstances != null)
            {
                return(checkNodeAction(actionName, operatorid, wf, wfinstances));
            }
            else//新增动作只判断当前操作者是否有权限执行这个动作
            {
                workflownodeactionEx   wfnaEx = new workflownodeactionEx();
                workflownodeaction     wfna   = wfnaEx.getworkflownodeaction(wf.id, actionName);
                workflownodeoperatorEx wfnoEx = new workflownodeoperatorEx();
                workflownodeoperator   wfno   = wfnoEx.getworkflownodeoperator(wfna.id, operatorid);
                if (wfno == null)
                {
                    return(false);
                }
                return(true);
            }
        }
예제 #3
0
        public int IniciarWorkflow(int idWorkflow)
        {
            try
            {
                workflow workflowCreate = db.workflow.Where(x => x.id == idWorkflow).FirstOrDefault();

                if (workflowCreate == null)
                {
                    throw new IndexOutOfRangeException("El workflow " + idWorkflow + " no existe en el sistema");
                }

                estados estado = db.estados.FirstOrDefault(x => x.id_workflow == idWorkflow && x.estado_inicial == true);

                if (estado == null)
                {
                    throw new IndexOutOfRangeException("El estado inicial no se encuentra configurado para el workflow " + workflowCreate.nombre);
                }

                var change = db.proceso_workflow.Add(new proceso_workflow());
                change.id_workflow      = workflowCreate.id;
                change.id_estado_actual = estado.id;
                db.SaveChanges();
                trackAsync.Add(Task.Run(() => TrackAsync("resultado", "IniciarWorkflow", change.id.ToString(), "id:" + change.id + ",estadoInicial:" + estado.id + ",nombreWorkflow:" + workflowCreate.nombre)));
                return(change.id);
            }
            catch (Exception ex)
            {
                trackAsync.Add(Task.Run(() => TrackAsync("excepcion", "IniciarWorkflow", ex.ToString(), "")));
                throw ex;
            }
        }
예제 #4
0
        /// <summary>
        /// 获取表单数据
        /// </summary>
        public void GetFormJson()
        {
            int      id = Convert.ToInt32(ctx.Request["keyValue"]);
            workflow wf = IdalCommon.IworkflowEx.getEntityById(id);

            writeJsonBack(wf.ToJson());
        }
예제 #5
0
        public ActionResult wf()
        {
            var    service = new workflow();
            string pid     = service.test();

            return(Content(pid));
        }
        public void StartWorkflow(int value, user user)
        {
            var serviceWorkflow = new workflow();

            serviceWorkflow.owner      = user;
            serviceWorkflow.workflowId = value;
            WorkFlows.Add(new WorkFlow(serviceWorkflow));
        }
        public int ProcessActivity(int processID, int step, string valor)
        {
            ProcessIDOrderIDSpecification spec = new ProcessIDOrderIDSpecification(processID, step);
            workflow activity = _workFlowRepository.FindWorkFlow(spec);

            string sp = activity.sp.Replace("{0}", valor);

            return(_workFlowRepository.execWorkFlow(sp));
        }
예제 #8
0
파일: actionEx.cs 프로젝트: xxzzjj222/Diana
        public List <action> getActionListbywfid(int wfid)
        {
            workflow wf = workflowEx.Instance.getEntityById(wfid);

            if (wf != null)
            {
                return(db.Queryable <action>().Where(p => p.actionowner == wf.wfname).ToList());
            }
            return(null);
        }
예제 #9
0
        /// <summary>
        /// 节点跃迁方法
        /// </summary>
        /// <param name="workflowName">工作流名称</param>
        /// <param name="dataid">业务数据主码</param>
        /// <param name="actionName">动作名称</param>
        /// <param name="operatorid">操作者ID</param>
        /// <param name="executer">执行者</param>
        /// <param name="remark">工作流执行备注</param>
        /// <param name="isRecordTrace">是否记录工作流操作日志(默认记录)</param>
        /// <returns>返回是否执行成功</returns>
        public bool trace(string workflowName, int dataid, string actionName, int operatorid, string executer, string remark, bool isRecordTrace = true)
        {
            workflowEx           workflowEx    = new workflowEx();
            workflow             wf            = workflowEx.getworkflow(workflowName);
            int                  instancesid   = 0;
            workflowinstancesEx  wfinstancesEx = new workflowinstancesEx();
            workflowinstances    wfinstances   = wfinstancesEx.getworkflowinstances(wf.id, dataid);
            workflownodeactionEx wfnaEx        = new workflownodeactionEx();
            workflownodeaction   wfna          = wfnaEx.getworkflownodeaction(wf.id, actionName);
            workflownodeEx       wfnEx         = new workflownodeEx();
            string               sql           = string.Empty;

            if (wfinstances != null)
            {
                int currentnodeid = wfna.nextnodeid;
                int?nodcodevalue  = 0;
                if (wfna.nodetype == 2)                                                      //会签节点跳跃
                {
                    List <workflownodeaction> wfnas = wfnaEx.getcountersignnodeaction(wfna); //会签动作集合
                    nodcodevalue = (wfinstances.nodcode | wfna.nodeactioncode) == wfna.nodeactioncode ? wfinstances.nodcode : (wfinstances.nodcode + wfna.nodeactioncode);
                    if (nodcodevalue != wfnas.Select(p => p.nodeactioncode).Sum())
                    {
                        currentnodeid = wfna.currentnodeid;
                    }
                }
                //更新Trace表节点信息
                sql = string.Format(@"update {0} 
                                       set currentnodeid={1},
                                                  nodcode={2}
                                                 where id={3}",
                                    wf.wfinstancestable, currentnodeid, nodcodevalue, wfinstances.id);
                instancesid = wfinstances.id;
                db.SqlQueryDynamic(sql);
                //更新业务表工作流字段值

                workflownode wfn    = wfnEx.getworkflownode(wfna.nextnodeid);
                string       sqlstr = string.Format("update {0} set {1}={2} where id={3}", wf.wfownertable, wf.wffieldname, wfn.wfnodememo);
                db.SqlQueryDynamic(sqlstr);
            }
            else
            {
                instancesid = insert(wf, instancesid, wfna, dataid);
                //更新业务表工作流字段值
                workflownode wfn    = wfnEx.getworkflownode(wfna.nextnodeid);
                string       sqlstr = string.Format("update {0} set {1}='{2}' where id={3}", wf.wfownertable, wf.wffieldname, wfn.wfnodememo, dataid);
                db.SqlQueryDynamic(sqlstr);
            }
            if (isRecordTrace)
            {
                workflowinstancetracingsEx wfinstancetringEx = new workflowinstancetracingsEx();
                wfinstancetringEx.insert(executer, instancesid, wfna);
            }

            return(true);
        }
 public async Task InsertAsync(workflow workFlow)
 {
     try
     {
         await HttpHelper.Post(BaseUrl, workFlow);
     }
     catch (Exception e)
     {
         throw new ProxyException(Constants.ExceptionMessages.DatabaseException, e);
     }
 }
예제 #11
0
        private void SaveWorkflowItem(workflow workflow)
        {
            var file = Path.Combine(ConfigurationManager.AppSettings["ConfigurationPath"],
                                    workflow.name);

            if (File.Exists(file))
            {
                File.Delete(file);
            }
            XmlHelper <workflow> .Save(file, workflow);
        }
예제 #12
0
        public int insert(workflow wf, int instancesid, workflownodeaction wfna, int dataid)
        {
            workflowinstances wfinstacnes = new workflowinstances();

            wfinstacnes.ownertabledataid = dataid;
            wfinstacnes.nodcode          = wfna.nodeactioncode;
            wfinstacnes.wfid             = wf.id;
            wfinstacnes.currentnodeid    = wfna.nextnodeid;
            instancesid = workflowinstancesEx.Instance.insert(wfinstacnes);
            return(instancesid);
        }
예제 #13
0
 /// <summary>
 /// 提交表单数据
 /// </summary>
 public void SubmitForm()
 {
     try
     {
         string   keyValue = !string.IsNullOrEmpty(ctx.Request["keyValue"]) ? ctx.Request["keyValue"] : ctx.Request["id"];
         workflow wf       = HttpContextDataWrapper.DataToObject <workflow>(ctx);
         IdalCommon.IworkflowEx.SubmitForm(wf, keyValue);
         Success("操作成功!");
     }
     catch (Exception)
     {
         Error("操作失败!");
     }
 }
예제 #14
0
        //送出表單
        public ActionResult SentForm(Cwma model)
        {
            var    service = new workflow();
            string pid     = service.test(Session["Account"].ToString(), Session["Did"].ToString(), model);

            model.Department = Session["Did"].ToString();
            model.Applicant  = Session["Account"].ToString();
            model.Fid        = pid;
            var db = new DatabaseEntities();

            db.Cwma.Add(model);
            db.SaveChanges();
            return(Content(pid));
        }
예제 #15
0
        /// <summary>
        /// 检查操作者是否有权限执行该动作
        /// </summary>
        /// <param name="actionName">动作名称</param>
        /// <param name="operatorid">操作者ID</param>
        /// <param name="wf">工作流数据</param>
        /// <param name="wfinstances">工作流执行结果数据</param>
        /// <returns></returns>
        public bool checkNodeAction(string actionName, int operatorid, workflow wf, workflowinstances wfinstances)
        {
            workflownodeactionEx wfnaEx = new workflownodeactionEx();
            workflownodeaction   wfna   = wfnaEx.getworkflownodeaction(wf.id, actionName);

            if (wfna.currentnodeid != wfinstances.currentnodeid)
            {
                return(false);
            }
            workflownodeoperatorEx wfnoEx = new workflownodeoperatorEx();
            workflownodeoperator   wfno   = wfnoEx.getworkflownodeoperator(wfna.id, operatorid);

            if (wfno == null)
            {
                return(false);
            }
            return(true);
        }
예제 #16
0
        public ActionResult WorkflowVisualization()
        {
            object wfid = this.ControllerContext.RequestContext.HttpContext.Request["wfid"];

            if (wfid != null)
            {
                workflow wf = IdalCommon.IworkflowEx.getEntityById(Convert.ToInt32(wfid));
                this.ViewBag.workflow = wf;

                string resutlt = "{}";
                if (!string.IsNullOrEmpty(wf.wfjsonstr))
                {
                    resutlt = wf.wfjsonstr.TrimStart('"').TrimEnd('"');
                }
                this.ViewBag.workflowjsonstr = resutlt;
                this.ViewBag.actionlist      = wfselectoption.CreateList(IdalCommon.IactionEx.getActionListbywfid(Convert.ToInt32(wfid)), "id", "actiondescription");
                this.ViewBag.rolelist        = wfselectoption.CreateList(IdalCommon.IroleEx.getEntityList(), "id", "rolename");
            }
            return(View());
        }
예제 #17
0
        public static bool checkNodeAction(string workflowName, int dataid, int actionid, int operatorid)
        {
            workflow wf = workflowEx.Instance.getworkflow(workflowName);

            if (wf.wfstatus == 2 || wf.wflock == 2)//工作流启用且未锁定
            {
                return(false);
            }
            workflowinstances    wfinstances = workflowinstancesEx.Instance.getworkflowinstances(wf.id, dataid);
            workflownodeaction   wfna        = workflownodeactionEx.Instance.getworkflownodeaction(wf.id, actionid);
            workflownodeoperator wfno        = workflownodeoperatorEx.Instance.getworkflownodeoperator(wfna.id, operatorid);

            if (wfinstances != null)
            {
                if (wfna.nastatus == 2 || wfna.nalock == 2)//跃迁锁定
                {
                    return(false);
                }
                if (wfna.currentnodeid != wfinstances.currentnodeid)//不存在以当前状态为起点的跃迁
                {
                    return(false);
                }
                if (wfno == null)//不存在指定执行者的 执行条件
                {
                    return(false);
                }
                if (wfno.operatorlock == 2)//操作锁定
                {
                    return(false);
                }
                return(true);
            }
            else//新增动作只判断当前操作者是否有权限执行这个动作
            {
                if (wfno == null)
                {
                    return(false);
                }
                return(true);
            }
        }
예제 #18
0
        public void WorkflowVisualization()
        {
            object wfid = ctx.Request["wfid"];

            if (wfid != null)
            {
                workflow wf = IdalCommon.IworkflowEx.getEntityById(Convert.ToInt32(wfid));
                tp.Put("workflow", wf.ToJson());
                string resutlt = "{}";
                if (!string.IsNullOrEmpty(wf.wfjsonstr))
                {
                    resutlt = wf.wfjsonstr.TrimStart('"').TrimEnd('"');
                }
                tp.Put("workflowjsonstr", resutlt);
                string actionliststr = wfselectoption.CreateList(IdalCommon.IactionEx.getActionListbywfid(Convert.ToInt32(wfid)), "id", "actiondescription").ToJson();
                tp.Put("actionlist", actionliststr);
                string roleliststr = wfselectoption.CreateList(IdalCommon.IroleEx.getEntityList(), "id", "rolename").ToJson();
                tp.Put("rolelist", roleliststr);
            }
            tp.Display(ctx, "/Html/WorkflowVisualization.html");
        }
예제 #19
0
        public static void Main()
        {
            Console.WriteLine("Welcome to the Jungle!");
            workflow myWorkflow = new workflow();

            //Register all the activities, domains and workflows
            //(can also be done using GUI)
            myWorkflow.RegisterMyDomain();
            myWorkflow.RegisterActivity("Activity1A", "Activity1");
            myWorkflow.RegisterWorkflow(workflowName);

            //start the workflow
            Task.Run(() => myWorkflow.StartWorkflow(workflowName));
            Task.Run(() => myWorkflow.StartWorkflow(workflowName));
            //start the decider
            Task.Run(() => myWorkflow.Decider());
            //start the workers
            Task.Run(() => myWorkflow.Worker("Activity1"));
            Task.Run(() => myWorkflow.Worker("Activity1"));
            Console.Read();
        }
        public HttpResponseMessage Get([FromUri] workflow parameters)
        {
            var result = new HttpResponseMessage();

            workflowStart.Models.worflowParameters param = new workflowStart.Models.worflowParameters();

            param.itemID       = parameters.itemid;
            param.siteUrl      = parameters.siteurl;
            param.workflowName = parameters.workflowname;

            if (parameters.initiationdata != null)
            {
                param.initiationData = JsonConvert.DeserializeObject <Dictionary <string, object> >(parameters.initiationdata);

                Dictionary <string, object> normalizeParam = new Dictionary <string, object>();

                foreach (var k in param.initiationData)
                {
                    normalizeParam.Add(k.Key.Replace(" ", ""), k.Value);
                }

                param.initiationData = normalizeParam;
            }

            spWorkflow wf = new spWorkflow();

            if (wf.Execute(param))
            {
                result.StatusCode = HttpStatusCode.OK;
            }
            else
            {
                result.Content    = Request.CreateResponse(HttpStatusCode.InternalServerError, wf.responseMsg).Content;
                result.StatusCode = HttpStatusCode.InternalServerError;
            }

            return(result);
        }
예제 #21
0
 /// <summary>
 /// 提交表单数据
 /// </summary>
 /// <param name="workflow">分组对象</param>
 /// <param name="keyValue">分组对象的主键</param>
 /// <returns></returns>
 public ActionResult SubmitForm(workflow workflow, string keyValue)
 {
     IdalCommon.IworkflowEx.SubmitForm(workflow, keyValue);
     return(Success("操作成功。"));
 }
예제 #22
0
 public ActionResult Update(workflow input)
 {
     IdalCommon.IworkflowEx.update(input);
     return(this.UpdateSuccessMsg());
 }
예제 #23
0
 public ActionResult Add(workflow input)
 {
     IdalCommon.IworkflowEx.insert(input);
     return(this.AddSuccessMsg());
 }
예제 #24
0
 public WorkFlow(workflow workflow)
 {
     owner        = new User(workflow.owner);
     workflowId   = workflow.workflowId;
     participants = null;
 }