Esempio n. 1
0
        protected void Page_Load(object sender, EventArgs e)
        {
            switch (this.RequestActionString.ToLower())
            {
            case "submittask":
                Aim.WorkFlow.WFService.Task task = Aim.WorkFlow.WorkFlow.ServiceClient.GetTaskByTaskId(this.RequestData["TaskId"].ToString());
                Aim.WorkFlow.WorkFlow.SubmitTask("", task.WorkflowInstanceID, task.BookmarkName, GetApprovalResult(task));
                PageState.Add("message", "提交成功!");
                break;

            case "savetask":
                Aim.WorkFlow.Task tas = Aim.WorkFlow.Task.Find(this.RequestData["TaskId"].ToString());
                tas.Description = this.RequestData["Opinion"].ToString();
                tas.SaveAndFlush();
                break;

            case "getusers":
                GetNextUsers(this.RequestData["TemplateId"].ToString(), this.RequestData["FlowInstanceId"].ToString(), this.RequestData["Name"].ToString(), this.RequestData["CurrentName"].ToString());
                break;

            case "getbackusers":
                Aim.WorkFlow.Task[] tks = Aim.WorkFlow.Task.FindAllByProperties(Aim.WorkFlow.Task.Prop_WorkflowInstanceID, this.RequestData["FlowInstanceId"].ToString(), Aim.WorkFlow.Task.Prop_ApprovalNodeName, this.RequestData["TaskName"].ToString());
                if (tks != null && tks.Length == 1)    //打回情况一个人的时候有效,多人的话,还是从之前配置里取
                {
                    this.PageState.Add("NextUserIds", tks[0].OwnerId);
                    this.PageState.Add("NextUserNames", tks[0].Owner);
                }
                break;

            default:
                if (this.RequestData["TaskId"] != null && !string.IsNullOrEmpty(this.RequestData["TaskId"].ToString()))
                {
                    Aim.WorkFlow.Task             fTask    = Aim.WorkFlow.Task.Find(this.RequestData["TaskId"].ToString());
                    Aim.WorkFlow.WorkflowInstance instance = WorkflowInstance.Find(fTask.WorkflowInstanceID);
                    this.PageState.Add("InstanceId", fTask.WorkflowInstanceID);
                    this.PageState.Add("TemplateId", instance.WorkflowTemplateID);
                    FlowInstanceId = instance.ID;
                    FormUrl        = instance.RelateUrl;
                    FlowDefineId   = instance.WorkflowTemplateID;
                    Title          = fTask.WorkFlowName + "->" + fTask.ApprovalNodeName;
                    XmlSerializer xs = new XmlSerializer(typeof(TaskContext));
                    if (!string.IsNullOrEmpty(fTask.Context))
                    {
                        /*Aim.WorkFlow.WorkflowTemplate temp = Aim.WorkFlow.WorkflowTemplate.Find(instance.WorkflowTemplateID);
                         * XmlDocument doc = new XmlDocument();
                         * doc.LoadXml(temp.XAML);
                         * XmlElement root = doc.DocumentElement;
                         * string nameSpace = root.NamespaceURI;
                         * XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
                         * nsmgr.AddNamespace("ns", nameSpace);
                         * nsmgr.AddNamespace("x", "http://schemas.microsoft.com/winfx/2006/xaml");
                         * nsmgr.AddNamespace("bwa", "clr-namespace:BPM.WF.Activities;assembly=BPM.WF");
                         * XmlNode currentNode = root.SelectSingleNode("//*[contains(@ApprovalNodeConfig,'" + fTask.ApprovalNodeName + "')]", nsmgr);*/
                        StringReader sr      = new StringReader(fTask.Context);
                        TaskContext  content = xs.Deserialize(sr) as TaskContext;
                        if (content.SwitchRules.Length > 0)
                        {
                            TaskContextSwitchRuleNextAction[] arrs = content.SwitchRules[0].NextActions;
                            string comboxdataText = "['{0}','{1}'],";
                            if (arrs.Length > 0)
                            {
                                int first = 0;
                                foreach (TaskContextSwitchRuleNextAction ar in arrs)
                                {
                                    //GetNextRoute(currentNode, nsmgr, ar.Name)
                                    NextStep += string.Format(comboxdataText, ar.Name, ar.Name);
                                    if (first == 0)
                                    {
                                        GetNextUsers(instance.WorkflowTemplateID, fTask.WorkflowInstanceID, ar.Name, fTask.ApprovalNodeName);
                                    }
                                    first++;
                                }
                            }
                            else
                            {
                                NextStep += string.Format("['','{0}'],", "结束");
                            }
                        }
                        else
                        {
                            NextStep += string.Format("['','{0}'],", "结束");
                        }
                    }
                    else
                    {
                        NextStep += string.Format("['','{0}'],", "结束");
                    }
                    NextStep = NextStep.TrimEnd(',');
                    Aim.WorkFlow.Task[] tasks = Aim.WorkFlow.Task.FindAllByProperty("CreatedTime", "WorkflowInstanceID", fTask.WorkflowInstanceID);
                    this.PageState.Add("Tasks", JsonHelper.GetJsonString(tasks));
                    this.PageState.Add("Task", fTask);
                }
                break;
            }
        }
Esempio n. 2
0
        protected void Page_Load(object sender, EventArgs e)
        {
            switch (this.RequestActionString.ToLower())
            {
            case "submittask":
                Aim.WorkFlow.WinService.Task task = Aim.WorkFlow.WorkFlow.ServiceClient.GetTaskByTaskId(this.RequestData["TaskId"].ToString());
                if (task.Status == 0)
                {
                    Aim.WorkFlow.WorkFlow.SubmitTask("", task.WorkflowInstanceID, task.BookmarkName, GetApprovalResult(task));
                }
                PageState.Add("message", "提交成功!");
                break;

            case "submitaddtask":
                Aim.WorkFlow.Task taskOld    = Aim.WorkFlow.Task.Find(this.RequestData["TaskId"].ToString());
                string            userIds    = this.RequestData.Get <string>("UserIds");
                string            userNames  = this.RequestData.Get <string>("UserNames");
                string[]          userIdss   = userIds.Split(',');
                string[]          userNamess = userNames.Split(',');
                for (int i = 0; i < userIdss.Length; i++)
                {
                    if (userIdss[i].Trim() == "")
                    {
                        continue;
                    }
                    Aim.WorkFlow.Task taskNew = new Aim.WorkFlow.Task();
                    DataHelper.MergeData <Aim.WorkFlow.Task>(taskNew, taskOld);
                    taskNew.Owner            = userNamess[i];
                    taskNew.OwnerId          = userIdss[i];
                    taskNew.Ext1             = "Branch";
                    taskNew.Ext2             = taskOld.ID;
                    taskNew.CreatedTime      = DateTime.Now;
                    taskNew.UpdatedTime      = DateTime.Now;
                    taskNew.ApprovalNodeName = taskNew.ApprovalNodeName + "[分发]";
                    taskNew.Create();
                }
                PageState.Add("message", "分发成功!");
                break;

            case "savetask":
                Aim.WorkFlow.Task tas = Aim.WorkFlow.Task.Find(this.RequestData["TaskId"].ToString());
                tas.Description = this.RequestData["Opinion"].ToString();
                tas.SaveAndFlush();
                break;

            case "getusers":
                GetNextUsers(this.RequestData["TemplateId"].ToString(), this.RequestData["FlowInstanceId"].ToString(), this.RequestData["Name"].ToString(), this.RequestData["CurrentName"].ToString());
                break;

            case "getbackusers":
                Aim.WorkFlow.Task[] tks = Aim.WorkFlow.Task.FindAllByProperties(Aim.WorkFlow.Task.Prop_WorkflowInstanceID, this.RequestData["FlowInstanceId"].ToString(), Aim.WorkFlow.Task.Prop_ApprovalNodeName, this.RequestData["TaskName"].ToString());
                if (tks != null && tks.Length == 1)    //打回情况一个人的时候有效,多人的话,还是从之前配置里取
                {
                    this.PageState.Add("NextUserIds", tks[0].OwnerId);
                    this.PageState.Add("NextUserNames", tks[0].Owner);
                }
                break;

            case "checkstate":
                //检查如果有后续任务未提交,则设置状态为已提交.
                Aim.WorkFlow.Task taskpre = Aim.WorkFlow.Task.Find(this.RequestData["TaskId"].ToString());
                if (taskpre.Status == 0 && DataHelper.QueryDataTable("select * from Task where WorkFlowInstanceId='" + taskpre.WorkflowInstanceID + "' and ApprovalNodeName<>'" + taskpre.ApprovalNodeName + "' and CreatedTime>'" + taskpre.CreatedTime + "' and Status=0").Rows.Count > 0)
                {
                    taskpre.Status = 4;
                    taskpre.Save();
                }
                break;

            default:
                if (this.RequestData["TaskId"] != null && !string.IsNullOrEmpty(this.RequestData["TaskId"].ToString()))
                {
                    Aim.WorkFlow.Task fTask = Aim.WorkFlow.Task.Find(this.RequestData["TaskId"].ToString());
                    if (!fTask.UpdatedTime.HasValue)
                    {
                        fTask.UpdatedTime = DateTime.Now;
                        fTask.Save();
                    }
                    if (fTask.Ext1 == "Branch")
                    {
                        Response.Redirect("FreeTask.aspx?Type=Branch&TaskId=" + this.RequestData["TaskId"].ToString());
                    }
                    if (fTask.Flag == "Add")
                    {
                        fTask.ApprovalNodeName = fTask.Ext1;
                    }
                    //捕获节点扩展信息配置,如已阅,加签,并行等信息
                    this.PageState.Add("ExtData", GetNodeExtData(fTask));
                    Aim.WorkFlow.WorkflowInstance instance = WorkflowInstance.Find(fTask.WorkflowInstanceID);
                    this.PageState.Add("InstanceId", fTask.WorkflowInstanceID);
                    this.PageState.Add("TemplateId", instance.WorkflowTemplateID);
                    FlowInstanceId = instance.ID;
                    FormUrl        = instance.RelateUrl;
                    FlowDefineId   = instance.WorkflowTemplateID;
                    Title          = fTask.WorkFlowName + "->" + fTask.ApprovalNodeName;
                    XmlSerializer xs = new XmlSerializer(typeof(TaskContext));
                    if (!string.IsNullOrEmpty(fTask.Context))
                    {
                        /*Aim.WorkFlow.WorkflowTemplate temp = Aim.WorkFlow.WorkflowTemplate.Find(instance.WorkflowTemplateID);
                         * XmlDocument doc = new XmlDocument();
                         * doc.LoadXml(temp.XAML);
                         * XmlElement root = doc.DocumentElement;
                         * string nameSpace = root.NamespaceURI;
                         * XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
                         * nsmgr.AddNamespace("ns", nameSpace);
                         * nsmgr.AddNamespace("x", "http://schemas.microsoft.com/winfx/2006/xaml");
                         * nsmgr.AddNamespace("bwa", "clr-namespace:BPM.WF.Activities;assembly=BPM.WF");
                         * XmlNode currentNode = root.SelectSingleNode("//*[contains(@ApprovalNodeConfig,'" + fTask.ApprovalNodeName + "')]", nsmgr);*/
                        StringReader sr      = new StringReader(fTask.Context);
                        TaskContext  content = xs.Deserialize(sr) as TaskContext;
                        if (content.SwitchRules.Length > 0)
                        {
                            TaskContextSwitchRuleNextAction[] arrs = content.SwitchRules[0].NextActions;
                            string comboxdataText = "['{0}','{1}'],";
                            if (arrs.Length > 0)
                            {
                                int first = 0;
                                foreach (TaskContextSwitchRuleNextAction ar in arrs)
                                {
                                    //GetNextRoute(currentNode, nsmgr, ar.Name)
                                    NextStep += string.Format(comboxdataText, ar.Name, ar.Name);
                                    if (first == 0)
                                    {
                                        GetNextUsers(instance.WorkflowTemplateID, fTask.WorkflowInstanceID, ar.Name, fTask.ApprovalNodeName);
                                    }
                                    first++;
                                }
                            }
                            else
                            {
                                NextStep += string.Format("['','{0}'],", "结束");
                            }
                        }
                        else
                        {
                            NextStep += string.Format("['','{0}'],", "结束");
                        }
                    }
                    else
                    {
                        NextStep += string.Format("['','{0}'],", "结束");
                    }
                    NextStep = NextStep.TrimEnd(',');
                    Aim.WorkFlow.Task[] tasks = Aim.WorkFlow.Task.FindAllByProperty("CreatedTime", "WorkflowInstanceID", fTask.WorkflowInstanceID).OrderBy(ens => !ens.FinishTime.HasValue ? DateTime.Now : ens.FinishTime).OrderBy(ens => ens.CreatedTime).ToArray();
                    this.PageState.Add("Tasks", JsonHelper.GetJsonString(tasks));
                    this.PageState.Add("Task", fTask);
                }
                break;
            }
        }