Beispiel #1
0
        public virtual object GetTaskLastSteps(HttpContext context)
        {
            YZRequest request    = new YZRequest(context);
            int       taskid     = request.GetInt32("TaskID");
            int       lastStepId = request.GetInt32("LastStepID");

            BPMStepCollection steps;

            //获得数据
            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();
                steps = BPMTask.GetAllSteps(cn, taskid);
            }

            BPMStepCollection newSteps = new BPMStepCollection();

            foreach (BPMProcStep step in steps)
            {
                if (step.StepID > lastStepId)
                {
                    newSteps.Add(step);
                }
            }

            return(new
            {
                Steps = this.SerializeSteps(newSteps)
            });
        }
Beispiel #2
0
        public virtual JObject DirectSend(HttpContext context)
        {
            YZRequest request      = new YZRequest(context);
            int       stepid       = request.GetInt32("StepID");
            bool      saveFormData = request.GetBool("SaveFormData");

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();

                if (saveFormData)
                {
                    BPMProcess.Post(cn, context.Request.InputStream);
                }

                BPMStepCollection newsteps = BPMProcStep.DirectSend(cn, stepid);

                List <string> to = new List <string>();
                foreach (BPMProcStep step in newsteps)
                {
                    to.Add(String.Format("{0}[{1}]", step.NodeName, YZStringHelper.GetUserFriendlyName(step.RecipientAccount, step.RecipientFullName)));
                }

                JObject rv = new JObject();
                rv[YZJsonProperty.success] = true;
                rv["tosteps"] = String.Join(";", to.ToArray());

                return(rv);
            }
        }
Beispiel #3
0
    public static JObject GetTaskStateJObject(BPMConnection cn, TaskState state, int taskid)
    {
        JObject rv = new JObject();

        rv["State"] = state.ToString().ToLower();

        if (state == TaskState.Running)
        {
            JArray children = new JArray();
            rv.Add(YZJsonProperty.children, children);

            BPMStepCollection steps = BPMTask.GetUnFinishedHumanSteps(cn, taskid);
            foreach (BPMProcStep step in steps)
            {
                JObject item = new JObject();
                item["StepName"]             = step.StepDisplayName;
                item["Share"]                = step.Share;
                item["RecipientAccount"]     = step.RecipientAccount;
                item["RecipientDisplayName"] = step.RecipientFullName;
                children.Add(item);
            }
        }

        return(rv);
    }
Beispiel #4
0
        public virtual JObject RecedeBack(HttpContext context)
        {
            YZRequest  request   = new YZRequest(context);
            int        stepid    = request.GetInt32("StepID");
            JObject    jPost     = request.GetPostData <JObject>();
            string     comments  = (string)jPost["comments"];
            string     formdata  = (string)jPost["formdata"];
            List <int> toStepIDs = jPost["toStepIDs"].ToObject <List <int> >();

            BPMProcStep srcStep;

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();

                if (!String.IsNullOrEmpty(formdata))
                {
                    BPMProcess.Post(cn, formdata);
                }

                srcStep = BPMProcStep.Load(cn, stepid);

                BPMStepCollection newSteps = BPMProcStep.RecedeBack(cn, stepid, toStepIDs.ToArray(), comments);
                List <string>     to       = new List <string>();
                foreach (BPMProcStep step in newSteps)
                {
                    to.Add(String.Format("{0}[{1}]", step.NodeName, YZStringHelper.GetUserShortName(step.RecipientAccount, step.RecipientFullName)));
                }

                JObject rv = new JObject();
                rv["tosteps"] = String.Join(";", to.ToArray());

                return(rv);
            }
        }
Beispiel #5
0
    public static JsonItem GetTaskStateJsonItem(BPMConnection cn, TaskState state, int taskid)
    {
        JsonItem rv = new JsonItem();

        rv.Attributes.Add("State", state.ToString().ToLower());

        if (state == TaskState.Running)
        {
            JsonItemCollection children = new JsonItemCollection();
            rv.Attributes.Add("children", children);

            BPMStepCollection steps = BPMTask.GetInProcessSteps(cn, taskid);
            foreach (BPMProcStep step in steps)
            {
                JsonItem item = new JsonItem();
                item.Attributes.Add("StepName", step.StepDisplayName);
                item.Attributes.Add("Share", step.Share);
                item.Attributes.Add("RecipientAccount", step.RecipientAccount);
                item.Attributes.Add("RecipientDisplayName", step.RecipientFullName);
                children.Add(item);
            }
        }

        return(rv);
    }
Beispiel #6
0
        public virtual JObject GetTaskProcessingSteps(HttpContext context)
        {
            YZRequest request = new YZRequest(context);
            int       taskid  = request.GetInt32("TaskID");
            JObject   rv      = new JObject();

            //获得数据
            BPMStepCollection steps = null;

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();
                steps = BPMTask.GetUnFinishedHumanSteps(cn, taskid);

                //将数据转化为Json集合
                rv[YZJsonProperty.total] = steps.Count;

                JArray children = new JArray();
                rv[YZJsonProperty.children] = children;

                foreach (BPMProcStep step in steps)
                {
                    children.Add(this.Serialize(cn, step));
                }
            }

            //输出数据
            rv[YZJsonProperty.success] = true;
            return(rv);
        }
Beispiel #7
0
        /// <summary>
        /// 获取退回某步列表
        /// </summary>
        /// <param name="StepID"></param>
        /// <returns></returns>
        private JObject GetReturnStepsForm(BPMConnection cn, string UserAccount, int StepID)
        {
            JObject           rv    = new JObject();//最终组合的
            BPMStepCollection steps = null;

            steps = BPMProcStep.GetRecedableToSteps(cn, StepID);
            //将数据转化为Json集合
            rv["totalRows"] = steps.Count;
            if (steps.Count < 1)
            {
                throw new Exception("StepID:" + StepID + "帐号:" + UserAccount + "无退回步骤");
            }

            JArray children = new JArray();

            rv["children"] = children;

            foreach (BPMProcStep step in steps)
            {
                JObject item = new JObject();
                children.Add(item);

                item["StepID"]           = step.StepID;
                item["NodeName"]         = step.NodeName;
                item["OwnerAccount"]     = step.OwnerAccount;
                item["OwnerDisplayName"] = step.OwnerFullName;
                item["FinishAt"]         = YZStringHelper.DateToStringL(step.FinishAt);
            }
            return(rv);
        }
Beispiel #8
0
        public virtual JObject ReActive(HttpContext context)
        {
            YZRequest  request   = new YZRequest(context);
            int        taskid    = request.GetInt32("TaskID");
            JObject    jPost     = request.GetPostData <JObject>();
            string     comments  = (string)jPost["comments"];
            List <int> toStepIDs = jPost["toStepIDs"].ToObject <List <int> >();

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();

                BPMStepCollection newSteps = BPMTask.ReActive(cn, taskid, toStepIDs.ToArray(), comments);

                List <string> to = new List <string>();
                foreach (BPMProcStep step in newSteps)
                {
                    to.Add(String.Format("{0}[{1}]", step.NodeName, YZStringHelper.GetUserFriendlyName(step.RecipientAccount, step.RecipientFullName)));
                }

                JObject rv = new JObject();
                rv[YZJsonProperty.success] = true;
                rv["tosteps"] = String.Join(";", to.ToArray());

                return(rv);
            }
        }
Beispiel #9
0
        public virtual JObject GetRecedeBackSteps(HttpContext context)
        {
            YZRequest request = new YZRequest(context);
            int       stepid  = request.GetInt32("StepID");
            JObject   rv      = new JObject();

            //获得数据
            BPMStepCollection steps = null;

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();
                steps = BPMProcStep.GetRecedableToSteps(cn, stepid);

                //将数据转化为Json集合
                rv[YZJsonProperty.total] = steps.Count;

                JArray children = new JArray();
                rv[YZJsonProperty.children] = children;

                foreach (BPMProcStep step in steps)
                {
                    children.Add(Serialize(cn, step));
                }
            }

            //输出数据
            rv[YZJsonProperty.success] = true;
            return(rv);
        }
Beispiel #10
0
        public virtual object GetTaskTraceInfo(HttpContext context)
        {
            YZRequest request = new YZRequest(context);
            int       taskid  = request.GetInt32("TaskID");

            BPMTask            task;
            NodeItemCollection nodes = new NodeItemCollection();
            LinkItemCollection links = new LinkItemCollection();
            BPMStepCollection  steps = new BPMStepCollection();

            //获得数据
            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();

                task = BPMTask.Load(cn, taskid);
                BPMProcess.GetTaskTraceInfo(cn, task.ProcessName, task.ProcessVersion, out nodes, out links);
                steps = BPMTask.GetAllSteps(cn, taskid);
            }

            return(new
            {
                Task = this.SerializeTask(task),
                Process = new
                {
                    Nodes = nodes,
                    Links = links
                },
                Steps = this.SerializeSteps(steps)
            });
        }
Beispiel #11
0
        protected virtual JArray SerializeSteps(BPMStepCollection steps)
        {
            JArray jsteps = new JArray();

            foreach (BPMProcStep step in steps)
            {
                JObject item = new JObject();
                jsteps.Add(item);

                item["StepID"]               = step.StepID;
                item["Finished"]             = step.Finished;
                item["IsHumanStep"]          = step.IsHumanStep;
                item["AutoProcess"]          = step.AutoProcess;
                item["NodeNameOrg"]          = step.RegularNodeName;
                item["NodeName"]             = step.StepDisplayName;
                item["SelAction"]            = step.SelActionDisplayString;
                item["OwnerAccount"]         = step.OwnerAccount;
                item["OwnerDisplayName"]     = step.OwnerFullName;
                item["AgentAccount"]         = step.AgentAccount;
                item["AgentDisplayName"]     = step.AgentFullName;
                item["RecipientAccount"]     = step.RecipientAccount;
                item["RecipientDisplayName"] = step.RecipientFullName;
                item["HandlerAccount"]       = step.HandlerAccount;
                item["HandlerDisplayName"]   = step.HandlerFullName;
                item["ReceiveAt"]            = step.ReceiveAt;
                item["FinishAt"]             = step.FinishAt;
                item["Comments"]             = step.Comments;
                item["Memo"]  = step.Memo;
                item["Share"] = step.Share;
            }

            return(jsteps);
        }
Beispiel #12
0
    public static string GetTaskStateDisplayString(BPMConnection cn, TaskState state, int taskid)
    {
        if (state != TaskState.Running)
        {
            return(YZStringHelper.GetTaskStateDisplayName(state));
        }

        Dictionary <string, BPMObjectNameCollection> results = new Dictionary <string, BPMObjectNameCollection>();
        BPMStepCollection steps = BPMTask.GetInProcessSteps(cn, taskid);

        foreach (BPMProcStep step in steps)
        {
            string stepName = step.StepDisplayName;
            if (step.Share && String.IsNullOrEmpty(step.RecipientAccount))
            {
                stepName = stepName + "(等待获取)";
            }

            BPMObjectNameCollection users = null;
            if (results.ContainsKey(stepName))
            {
                users = results[stepName];
            }
            else
            {
                users = new BPMObjectNameCollection();
                results.Add(stepName, users);
            }

            string userName = YZStringHelper.GetUserShortName(step.RecipientAccount, step.RecipientFullName);

            if (!String.IsNullOrEmpty(userName) && !users.Contains(userName))
            {
                users.Add(userName);
            }
        }

        List <string> rvs = new List <string>();

        foreach (KeyValuePair <string, BPMObjectNameCollection> kv in results)
        {
            string users = String.Join(",", kv.Value.ToArray());
            if (String.IsNullOrEmpty(users))
            {
                rvs.Add(kv.Key);
            }
            else
            {
                rvs.Add(String.Format("{0}:{1}", kv.Key, users));
            }
        }

        return(String.Join(";", rvs.ToArray()));
    }
Beispiel #13
0
        protected virtual JArray Serialize(BPMStepCollection steps)
        {
            JArray rv = new JArray();

            foreach (BPMProcStep step in steps)
            {
                rv.Add(this.Serialize(step));
            }

            return(rv);
        }
Beispiel #14
0
        /// <summary>
        /// 退回某步
        /// </summary>
        /// <param name="StepID">当前步骤</param>
        /// <param name="RecedeBack_ToStepID">退回步骤</param>
        /// <param name="Comment">意见</param>
        private void RecedeBack(BPMConnection cn, int StepID, int RecedeBack_ToStepID, string Comment)
        {
            List <int> toStepIDs = new List <int>();

            toStepIDs.Add(RecedeBack_ToStepID);
            BPMStepCollection newSteps = BPMProcStep.RecedeBack(cn, StepID, toStepIDs.ToArray(), Comment);

            if (newSteps == null)
            {
                throw new Exception("退回失败");
            }
        }
Beispiel #15
0
        /// <summary>
        /// 直送
        /// </summary>
        /// <param name="StepID"></param>
        private void DirectSend(BPMConnection cn, int StepID, string Comment)
        {
            //save
            PostProcess("Save", StepID, "", Comment);

            BPMStepCollection newsteps = BPMProcStep.DirectSend(cn, StepID);

            if (newsteps == null)
            {
                throw new Exception("直送失败");
            }
        }
Beispiel #16
0
        public virtual JObject GetProcessForecastSteps(HttpContext context)
        {
            YZRequest request     = new YZRequest(context);
            string    processName = request.GetString("processName");
            Version   version     = request.GetVersion("version");
            string    owner       = request.GetString("owner", null);
            string    xmlData     = request.GetString("xmlData", null);

            if (!String.IsNullOrEmpty(xmlData))
            {
                xmlData = Encoding.UTF8.GetString(Convert.FromBase64String(xmlData));
            }

            if (String.IsNullOrEmpty(owner))
            {
                throw new Exception(String.Format(Resources.YZStrings.Aspx_ProcessForecastNoPos, YZAuthHelper.LoginUserAccount));
            }

            JObject rv = new JObject();

            //获得数据
            BPMStepCollection steps = null;

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();
                steps = BPMProcess.GetForecastSteps(cn, processName, version, owner, xmlData);

                //将数据转化为Json集合
                JArray children = new JArray();
                rv[YZJsonProperty.children] = children;

                foreach (BPMProcStep step in steps)
                {
                    if (!step.IsHumanStep)
                    {
                        continue;
                    }

                    children.Add(Serialize(cn, step));
                }

                rv[YZJsonProperty.total] = children.Count;
            }

            //输出数据
            rv[YZJsonProperty.success] = true;
            return(rv);
        }
Beispiel #17
0
        public virtual JArray GetRemindTarget(HttpContext context)
        {
            YZRequest request = new YZRequest(context);
            int       taskid  = request.GetInt32("TaskID");
            JArray    rv      = new JArray();

            //获得数据
            BPMStepCollection steps = null;

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();
                steps = BPMTask.GetUnFinishedHumanSteps(cn, taskid);

                foreach (BPMProcStep step in steps)
                {
                    if (step.Share && String.IsNullOrEmpty(step.OwnerAccount))
                    {
                        UserCollection users = BPMProcStep.GetShareUsers(cn, step.StepID);
                        foreach (User user in users)
                        {
                            JObject jStep = new JObject();
                            rv.Add(jStep);

                            jStep["StepID"]          = step.StepID;
                            jStep["Share"]           = true;
                            jStep["NodeDisplayName"] = step.StepDisplayName;
                            jStep["Account"]         = user.Account;
                            jStep["ShortName"]       = user.ShortName;
                            jStep["ElapsedMinutes"]  = (DateTime.Now - step.ReceiveAt).TotalMinutes;
                        }
                    }
                    else
                    {
                        JObject jStep = new JObject();
                        rv.Add(jStep);

                        jStep["StepID"]          = step.StepID;
                        jStep["Share"]           = false;
                        jStep["NodeDisplayName"] = step.StepDisplayName;
                        jStep["Account"]         = step.RecipientAccount;
                        jStep["ShortName"]       = step.RecipientDisplayName;
                        jStep["ElapsedMinutes"]  = (DateTime.Now - step.ReceiveAt).TotalMinutes;
                    }
                }
            }

            return(rv);
        }
Beispiel #18
0
        public virtual JObject GetReActiveSteps(HttpContext context)
        {
            YZRequest request = new YZRequest(context);
            int       taskid  = request.GetInt32("TaskID");

            JArray children = new JArray();

            //获得数据
            BPMStepCollection steps = null;

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();
                steps = BPMTask.GetAllSteps(cn, taskid);

                BPMObjectNameCollection stepNames = new BPMObjectNameCollection();
                for (int i = steps.Count - 1; i >= 0; i--)
                {
                    BPMProcStep step = steps[i];

                    if (!step.IsHumanStep)
                    {
                        continue;
                    }

                    if (step.IsTaskOptStep || step.IsIndicateStep || step.IsInformStep || step.IsConsignStep)
                    {
                        continue;
                    }

                    if (stepNames.Contains(step.NodeName))
                    {
                        continue;
                    }

                    stepNames.Add(step.NodeName);
                    children.Add(Serialize(cn, step));
                }
            }

            //输出数据
            JObject rv = new JObject();

            rv[YZJsonProperty.success]  = true;
            rv[YZJsonProperty.total]    = children.Count;
            rv[YZJsonProperty.children] = children;
            return(rv);
        }
Beispiel #19
0
        /// <summary>
        /// 判断任务是否是当前待办
        /// </summary>
        /// <param name="UserAccount">帐号</param>
        /// <param name="StepID">步骤id</param>
        /// <returns></returns>
        private bool IsCurrentStep(BPMConnection cn, string UserAccount, int StepID, int TaskID)
        {
            BPMStepCollection _steps = BPMTask.GetAllSteps(cn, TaskID);

            foreach (BPMProcStep item in _steps)
            {
                if (item.IsHumanStep)
                {
                    if (item.StepID == StepID && item.RecipientAccount.Equals(UserAccount, StringComparison.OrdinalIgnoreCase))
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
Beispiel #20
0
        public virtual JArray GetPickbackableSteps(HttpContext context)
        {
            YZRequest request = new YZRequest(context);
            int       taskid  = request.GetInt32("TaskID");
            JObject   rv      = new JObject();

            //获得数据
            BPMStepCollection steps = null;

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();
                steps = BPMTask.GetPickbackableSteps(cn, taskid);
            }

            return(this.Serialize(steps));
        }
Beispiel #21
0
        public virtual JArray GetRecedeBackSteps(HttpContext context)
        {
            YZRequest request = new YZRequest(context);
            int       stepid  = request.GetInt32("StepID");
            JObject   rv      = new JObject();

            //获得数据
            BPMStepCollection steps = null;

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();
                steps = BPMProcStep.GetRecedableToSteps(cn, stepid);
            }

            return(this.Serialize(steps));
        }
Beispiel #22
0
        private JObject GetApprovalLog(BPMConnection cn, int TaskID)
        {
            JObject result = new JObject();

            BPMTask task = BPMTask.Load(cn, TaskID);

            result["success"] = true;
            result["TaskID"]  = TaskID;
            result["SN"]      = task.SerialNum;
            result["State"]   = task.TaskState.ToString();

            JArray StepItems = new JArray();

            result["StepItems"] = StepItems;

            BPMStepCollection steps = BPMTask.GetAllSteps(cn, TaskID);

            foreach (BPMProcStep step in steps)
            {
                if (step.IsHumanStep)
                {
                    JObject item = new JObject();
                    StepItems.Add(item);
                    item["StepID"]           = step.StepID;
                    item["NodeName"]         = step.NodeName;
                    item["ReceiveAt"]        = YZStringHelper.DateToStringL(step.ReceiveAt);
                    item["FinishAt"]         = step.FinishAt == DateTime.MinValue ? "" : YZStringHelper.DateToStringL(step.FinishAt);
                    item["OwnerAccount"]     = step.OwnerAccount;
                    item["OwnerName"]        = step.OwnerFullName;
                    item["RecipientAccount"] = step.RecipientAccount == null ? "" : step.RecipientAccount;
                    item["RecipientName"]    = step.RecipientFullName == null ? "" : step.RecipientFullName;
                    item["HandlerAccount"]   = step.HandlerAccount == null ? "" : step.HandlerAccount;
                    item["HandlerName"]      = step.HandlerFullName == null ? "" : step.HandlerFullName;
                    item["AgentAccount"]     = step.AgentAccount == null ? "" : step.AgentAccount;
                    item["AgentName"]        = step.AgentFullName == null ? "" : step.AgentFullName;
                    item["SelAction"]        = step.SelAction == null ? "" : step.SelAction;
                    item["Comments"]         = step.Comments == null ? "" : step.Comments;
                }
            }

            return(result);
        }
Beispiel #23
0
        public virtual JObject GetTaskForecastSteps(HttpContext context)
        {
            YZRequest request = new YZRequest(context);
            int       taskid  = request.GetInt32("TaskID");
            string    xmlData = request.GetString("xmlData", null);

            if (!String.IsNullOrEmpty(xmlData))
            {
                xmlData = Encoding.UTF8.GetString(Convert.FromBase64String(xmlData));
            }

            JObject rv = new JObject();

            //获得数据
            BPMStepCollection steps = null;

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();
                steps = BPMTask.GetForecastSteps(cn, taskid, xmlData);

                //将数据转化为Json集合
                JArray children = new JArray();
                rv[YZJsonProperty.children] = children;

                foreach (BPMProcStep step in steps)
                {
                    if (!step.IsHumanStep)
                    {
                        continue;
                    }

                    children.Add(Serialize(cn, step));
                }

                rv[YZJsonProperty.total] = children.Count;
            }

            //输出数据
            rv[YZJsonProperty.success] = true;
            return(rv);
        }
Beispiel #24
0
        internal static JObject Serialize(BPMConnection cn, BPMProcStep step)
        {
            JObject item = new JObject();

            string stepMemo = null;

            if ((step.IsIndicateStep || step.IsInformStep) && String.IsNullOrEmpty(step.Memo))
            {
                BPMStepCollection prevSteps = step.LoadPrevSteps(cn);
                if (prevSteps.Count != 0)
                {
                    BPMProcStep prevStep = prevSteps[0];
                    stepMemo = "<span class='yz-stepraiser'>" + String.Format(Resources.YZStrings.Aspx_StepRaiser, YZStringHelper.GetUserShortName(prevStep.HandlerAccount, prevStep.HandlerFullName)) + "</span>";
                }
            }

            item["TaskID"]               = step.TaskID;
            item["StepID"]               = step.StepID;
            item["ProcessName"]          = step.ProcessName;
            item["ProcessVersion"]       = step.ProcessVersion.ToString(2);
            item["NodeNameOrg"]          = step.NodeName;
            item["NodeName"]             = HttpUtility.HtmlEncode(step.StepDisplayName) + stepMemo;
            item["SelAction"]            = step.SelActionDisplayString;
            item["OwnerAccount"]         = step.OwnerAccount;
            item["OwnerDisplayName"]     = step.OwnerFullName;
            item["AgentAccount"]         = step.AgentAccount;
            item["AgentDisplayName"]     = step.AgentFullName;
            item["FinishAt"]             = step.FinishAt;
            item["ReceiveAt"]            = step.ReceiveAt;
            item["IsConsignStep"]        = step.IsConsignStep;
            item["RecipientAccount"]     = step.RecipientAccount;
            item["RecipientDisplayName"] = step.RecipientFullName;
            item["HandlerAccount"]       = step.HandlerAccount;
            item["HandlerDisplayName"]   = step.HandlerFullName;
            item["Comments"]             = step.Comments;
            item["Share"]       = step.Share;
            item["Memo"]        = step.Memo;
            item["AutoProcess"] = step.AutoProcess;

            return(item);
        }
Beispiel #25
0
        protected virtual JObject GetDirectSendInfo(BPMConnection cn, BPMProcStep step, SystemLinkCollection systemLinks)
        {
            if (step.RecedeFromStep == -1)
            {
                return(null);
            }

            int        idx            = systemLinks.Find(SystemLinkType.DirectSend);
            SystemLink directSendLink = idx == -1 ? null:systemLinks[idx];

            if (directSendLink != null && !directSendLink.Enabled)
            {
                return(null);
            }

            BPMStepCollection toSteps = null;

            toSteps = BPMProcStep.GetDirectSendTargetSteps(cn, step.StepID);

            if (toSteps == null || toSteps.Count == 0)
            {
                return(null);
            }

            JObject rv       = new JObject();
            JArray  jtoSteps = new JArray();

            rv["toSteps"]         = jtoSteps;
            rv["validationGroup"] = directSendLink.ValidationGroup;

            foreach (BPMProcStep toStep in toSteps)
            {
                JObject jtoStep = new JObject();
                jtoSteps.Add(jtoStep);

                jtoStep["NodeName"] = toStep.NodeName;
                jtoStep["User"]     = YZStringHelper.GetUserShortName(toStep.RecipientAccount, toStep.RecipientFullName);
            }

            return(rv);
        }
Beispiel #26
0
    public static string GetTaskStatusHTML(BPMConnection cn, TaskState state, int taskid)
    {
        if (state == TaskState.Running)
        {
            BPMStepCollection steps = BPMTask.GetInProcessSteps(cn, taskid);
            StringBuilder     sb    = new StringBuilder();
            foreach (BPMProcStep step in steps)
            {
                if (sb.Length != 0)
                {
                    sb.Append("</br>");
                }
                sb.AppendFormat("{0}&nbsp;[{1}]", step.NodeName, GetUserFriendlyName(step.RecipientAccount, step.RecipientFullName));
            }

            return(sb.ToString());
        }
        else
        {
            return(GetTaskStatusHTML(state));
        }
    }
Beispiel #27
0
        protected virtual JArray SerializeForTrace(BPMStepCollection steps)
        {
            JArray rv = new JArray();

            foreach (BPMProcStep step in steps)
            {
                //不是有效的步骤
                if (!step.IsHumanStep)
                {
                    continue;
                }

                //跳过 - 无处理人的非共享任务
                if (String.IsNullOrEmpty(step.OwnerAccount) && !step.Share)
                {
                    continue;
                }

                rv.Add(this.Serialize(step));
            }

            return(rv);
        }
Beispiel #28
0
        protected virtual BPMStepCollection GetSimulateSteps(BPMTask task, BPMProcStep step, User user)
        {
            BPMStepCollection steps = new BPMStepCollection();

            steps.Add(step);

            BPMProcStep step1;

            step1                 = new BPMProcStep();
            step1.StepID          = 13002;
            step1.TaskID          = 12001;
            step1.NodeName        = "部长审批";
            step1.FinishAt        = DateTime.Now.AddDays(-2);
            step1.OwnerAccount    = "44144";
            step1.OwnerFullName   = "李四";
            step1.HandlerAccount  = "44144";
            step1.HandlerFullName = "李四";
            step1.SelAction       = "同意";
            step1.Comments        = "很棒!";
            steps.Add(step1);

            step1                 = new BPMProcStep();
            step1.StepID          = 13001;
            step1.TaskID          = 12001;
            step1.NodeName        = "开始";
            step1.FinishAt        = DateTime.Now.AddDays(-2);
            step1.OwnerAccount    = "33133";
            step1.OwnerFullName   = "张三";
            step1.HandlerAccount  = "33133";
            step1.HandlerFullName = "张三";
            step1.SelAction       = "提交";
            step1.Comments        = "";
            steps.Add(step1);

            return(steps);
        }
Beispiel #29
0
        public void ProcessRequest(HttpContext context)
        {
            YZAuthHelper.OAuth();

            //YZAuthHelper.AshxAuthCheck();

            try
            {
                UIStrings rs     = new UIStrings();
                int       taskid = Int32.Parse(context.Request.Params["tid"]);

                JsonItem rv = new JsonItem();
                using (BPMConnection cn = new BPMConnection())
                {
                    cn.WebOpen();

                    BPMStepCollection steps = BPMTask.GetAllSteps(cn, taskid);
                    BPMTask           task  = BPMTask.Load(cn, taskid);

                    rv.Attributes.Add("sn", task.SerialNum);
                    rv.Attributes.Add("pn", task.ProcessName);

                    //将数据转化为Json集合
                    JsonItemCollection children = new JsonItemCollection();
                    rv.Attributes.Add("children", children);

                    foreach (BPMProcStep step in steps)
                    {
                        //不是有效的步骤
                        if (!step.IsHumanStep)
                        {
                            continue;
                        }

                        //跳过 - 无处理人的非共享任务
                        if (String.IsNullOrEmpty(step.OwnerAccount) && !step.Share)
                        {
                            continue;
                        }

                        JsonItem item = new JsonItem();
                        children.Add(item);

                        item.Attributes.Add("StepDisplayName", step.StepDisplayName);

                        string recpAccount;
                        string recpDisplayName;
                        if (step.Finished)
                        {
                            recpAccount     = step.HandlerAccount;
                            recpDisplayName = YZStringHelper.GetUserShortName(step.HandlerAccount, step.HandlerFullName);
                        }
                        else
                        {
                            recpAccount     = step.RecipientAccount;
                            recpDisplayName = YZStringHelper.GetUserShortName(step.RecipientAccount, step.RecipientFullName);
                        }

                        if (!step.IsConsignStep && recpAccount != step.OwnerAccount)
                        {
                            recpDisplayName = String.Format(rs["XFormDesigner.XSignTrace.OwnerFmt"], recpDisplayName, YZStringHelper.GetUserShortName(step.OwnerAccount, step.OwnerDisplayName));
                        }
                        item.Attributes.Add("Recipient", recpDisplayName);

                        item.Attributes.Add("OwnerAccount", step.OwnerAccount);
                        item.Attributes.Add("OwnerFullName", step.OwnerFullName);
                        item.Attributes.Add("OwnerDisplayName", step.OwnerDisplayName);

                        item.Attributes.Add("Finished", step.Finished);
                        item.Attributes.Add("FinishAt", YZStringHelper.DateToStringM(step.FinishAt, ""));
                        item.Attributes.Add("ReceiveAt", YZStringHelper.DateToStringM(step.ReceiveAt, ""));

                        item.Attributes.Add("SelActionDisplayString", step.SelActionDisplayString);
                        item.Attributes.Add("Comments", HttpUtility.HtmlEncode(step.Comments));
                    }
                }

                //System.Threading.Thread.Sleep(500);
                //输出数据
                context.Response.Write(rv.ToString());
            }
            catch (Exception e)
            {
                JsonItem rv = new JsonItem();
                rv.Attributes.Add("success", false);
                rv.Attributes.Add("errorMessage", e.Message);
                context.Response.Write(rv.ToString());
            }


            context.Response.AppendHeader("Access-Control-Allow-Origin", "*");      // 响应类型
            context.Response.AppendHeader("Access-Control-Allow-Methods", "POST");  // 响应头设置
            context.Response.AppendHeader("Access-Control-Allow-Headers", "x-requested-with,content-type");

            context.Response.Charset         = "gb2312"; //设置字符集类型
            context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
            context.Response.ContentType     = "application/json;charset=gb2312";
        }
Beispiel #30
0
        private JObject GetFormInfo(BPMConnection cn, string UserAccount, int TaskID, int StepID)
        {
            FlowDataSet formData = null;
            BPMTask     task     = null;
            string      FormXml  = "";  //获取表单名称

            JObject rv = new JObject(); //最终组合的

            JArray TaskCommList = new JArray();

            rv["TaskCommList"] = TaskCommList;

            JArray FormInfo = new JArray();

            rv["FormInfo"] = FormInfo;
            JArray ButtonList = new JArray();

            rv["ButtonList"] = ButtonList;


            if (StepID < 0)
            {
                BPMStepCollection Steps = BPM.Client.BPMTask.GetAllSteps(cn, TaskID);
                foreach (BPM.Client.BPMProcStep item in Steps)
                {
                    if (item.NodeName.Equals("开始"))
                    {
                        StepID = item.StepID;
                        break;
                    }
                }
            }

            //按钮开始
            BPM.Client.ProcessInfo processInfo = BPM.Client.BPMProcess.GetProcessInfo(cn, StepID);
            BPMTask bt = BPMTask.Load(cn, TaskID);

            JObject TaskComm = new JObject();

            TaskCommList.Add(TaskComm);

            TaskComm["TaskID"]           = bt.TaskID;
            TaskComm["ParentStepID"]     = bt.ParentStepID;
            TaskComm["SerialNum"]        = bt.SerialNum;
            TaskComm["ProcessName"]      = bt.ProcessName;
            TaskComm["ApplicantAccount"] = bt.ApplicantAccount;

            TaskComm["AgentAccount"]     = bt.AgentAccount;
            TaskComm["AgentDisplayName"] = bt.AgentDisplayName;
            TaskComm["AgentDisplayName"] = bt.AgentDisplayName;

            TaskComm["OwnerAccount"]     = bt.OwnerAccount;
            TaskComm["OwnerDisplayName"] = bt.OwnerDisplayName;
            TaskComm["OwnerFullName"]    = bt.OwnerFullName;

            TaskComm["CreateAt"] = bt.CreateAt;
            TaskComm["FinishAt"] = bt.FinishAt;
            TaskComm["OptAt"]    = bt.OptAt;
            TaskComm["OptUser"]  = bt.OptUser;
            TaskComm["OptMemo"]  = bt.OptMemo;
            //TaskComm["Description"] = bt.Description;
            // TaskComm["ReturnToParent"] = bt.ReturnToParent;

            TaskComm["TaskState"] = bt.TaskState.ToString();
            TaskComm["State"]     = bt.State.ToString();


            if (IsCurrentStep(cn, UserAccount, StepID, TaskID) && bt.TaskState.ToString().Equals("Running", StringComparison.OrdinalIgnoreCase))
            {
                BPM.Client.LinkCollection links = processInfo.Links;//提交按钮
                foreach (Link link in links)
                {
                    JObject button = new JObject();
                    ButtonList.Add(button);
                    string s = link.DisplayString;
                    button["Text"]   = s;
                    button["Action"] = s;
                    button["Type"]   = "Post";
                }
                bool canReject = (processInfo.NodePermision & NodePermision.Reject) == NodePermision.Reject;//拒绝按钮
                if (canReject)
                {
                    JObject button = new JObject();
                    ButtonList.Add(button);
                    button["Text"]   = "拒绝";
                    button["Action"] = "Reject";
                    button["Type"]   = "Reject";
                }
                bool canTransfer = (processInfo.NodePermision & NodePermision.Transfer) == NodePermision.Transfer;//委托按钮
                if (canTransfer)
                {
                    JObject button = new JObject();
                    ButtonList.Add(button);
                    button["Text"]   = "委托";
                    button["Action"] = "Transfer";
                    button["Type"]   = "Transfer";
                }
                bool canConsign = (processInfo.NodePermision & NodePermision.Consign) == NodePermision.Consign;//加签按钮
                if (canConsign)
                {
                    string  s      = links[0].DisplayString;
                    JObject button = new JObject();
                    ButtonList.Add(button);
                    button["Text"]   = "加签";
                    button["Action"] = s;
                    button["Type"]   = "Consign";
                }
                bool canRecedeBack = (processInfo.NodePermision & NodePermision.RecedeBack) == NodePermision.RecedeBack;//退回重填按钮
                if (canRecedeBack)
                {
                    JObject button = new JObject();
                    ButtonList.Add(button);
                    button["Text"]   = "退回某步";
                    button["Action"] = "RecedeBack";
                    button["Type"]   = "RecedeBack";
                }
                bool recedeRestart = (processInfo.NodePermision & NodePermision.RecedeRestart) == NodePermision.RecedeRestart;//退回重填


                BPMProcStep stepLoad = BPMProcStep.Load(cn, StepID);
                int         idx      = processInfo.SystemLinks.Find(SystemLinkType.DirectSend);
                if (stepLoad.RecedeFromStep != -1 && idx != -1 && processInfo.SystemLinks[idx].Enabled)
                {
                    BPMStepCollection       directSendToSteps = BPMProcStep.LoadPrevSteps(cn, StepID);
                    BPMObjectNameCollection stepNames         = new BPMObjectNameCollection();
                    foreach (BPMProcStep step in directSendToSteps)
                    {
                        if (step.IsHumanStep)
                        {
                            stepNames.Add(step.NodeName + ":" + YZStringHelper.GetUserFriendlyName(step.RecipientAccount, step.RecipientFullName));

                            string  buttonText = "直送->" + stepNames.ToStringList(';');
                            JObject button     = new JObject();
                            ButtonList.Add(button);
                            button["Text"]   = buttonText;
                            button["Action"] = "DirectSend";
                            button["Type"]   = "DirectSend";
                        }
                    }
                }
            }

            //按钮结束
            FormXml = processInfo.FormFile;

            //获取表单数据
            formData = BPMProcess.GetFormData(cn, StepID);

            if (formData.Tables.Count == 0)
            {
                throw new Exception("获取表单数据失败");
            }

            //初始化布局文件
            task = BPMTask.Load(cn, TaskID);


            if (task == null)
            {
                throw new Exception("通过TaskID获取任务失败");
            }

            //int startIndex=FormXml.LastIndexOf(@"\");
            //int endIndex=FormXml.LastIndexOf(".aspx");
            // FormXml = FormXml.Substring(startIndex+1, endIndex - startIndex-1);
            FormXml = FormXml.Replace(".aspx", "");
            FormXml = FormXml.Replace("\\", "(");
            //throw new Exception(FormXml);
            XmlDocument layoutDoc      = new XmlDocument();
            string      layoutFilePath = HttpContext.Current.Server.MapPath(String.Format("~/FormLayout/{0}.xml", FormXml));

            string debugger = "";

            if (System.IO.File.Exists(layoutFilePath))
            {
                layoutDoc.Load(layoutFilePath);

                XmlNodeList layoutTables = layoutDoc.SelectNodes("Layout/Table");
                foreach (XmlNode layoutTable in layoutTables)
                {
                    string TableID = TryGetNodeAttribute(layoutTable, "ID");
                    //测试报文中Table是否与流程中的Table匹配
                    debugger += "[TableID]" + TableID;
                    foreach (FlowDataTable item in formData.Tables)
                    {
                        debugger += "[TableName]" + item.TableName;
                    }
                    //

                    FlowDataTable formDataTable = formData.Tables[TableID];

                    try
                    {
                        if (formDataTable != null)
                        {
                            JObject bwTable = new JObject();
                            FormInfo.Add(bwTable);
                            bwTable["TableName"]    = TableID;
                            bwTable["DisplayName"]  = TryGetNodeAttribute(layoutTable, "Name");
                            bwTable["IsRepeatable"] = formDataTable.IsRepeatableTable;

                            JArray bwRows = new JArray();
                            bwTable["Rows"] = bwRows;
                            foreach (FlowDataRow formDataRow in formDataTable.Rows)
                            {
                                JObject bwRow = new JObject();
                                bwRows.Add(bwRow);

                                XmlNodeList layoutColumns = layoutTable.ChildNodes;
                                int         i             = 0;
                                foreach (XmlNode layoutColumn in layoutColumns)
                                {
                                    //debugger += "**" + TryGetNodeAttribute(layoutColumn, "Type") + "**";
                                    if (!string.IsNullOrEmpty(TryGetNodeAttribute(layoutColumn, "Type")) && TryGetNodeAttribute(layoutColumn, "Type").Equals("Attachment", StringComparison.OrdinalIgnoreCase))
                                    {
                                        JObject bwColumn = new JObject();

                                        bwRow["Attachments_" + layoutColumn.Name] = bwColumn;
                                        bwColumn["Name"] = TryGetNodeAttribute(layoutColumn, "Name");

                                        string FileID = Convert.ToString(formDataRow[layoutColumn.Name]);

                                        //调用方法获取附件名称,附件路径
                                        JObject Attachments = GetAttachments(FileID);

                                        JArray bwAttachments = new JArray();
                                        bwColumn["Items"] = bwAttachments;
                                        foreach (JObject item in JTokenToJArray(Attachments["files"]))
                                        {
                                            JObject attachment1 = new JObject();
                                            bwAttachments.Add(attachment1);
                                            attachment1["FileName"]    = item["name"];
                                            attachment1["DownloadUrl"] = item["DownloadUrl"];
                                        }
                                        i++;
                                    }
                                    else
                                    {
                                        JObject bwColumn = new JObject();
                                        bwRow[layoutColumn.Name] = bwColumn;
                                        bwColumn["DataType"]     = TryGetNodeAttribute(layoutColumn, "DataType");
                                        bwColumn["DataFormat"]   = TryGetNodeAttribute(layoutColumn, "DataFormat");
                                        bwColumn["Order"]        = TryGetNodeAttribute(layoutColumn, "Order");

                                        bwColumn["Name"]  = TryGetNodeAttribute(layoutColumn, "Name");
                                        bwColumn["Value"] = Convert.ToString(formDataRow[layoutColumn.Name]);
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        throw new Exception(debugger + "---------" + e.Message);
                    }
                }
            }
            else
            {
                //throw new Exception(String.Format("流程[{0}]没有布局文件[{1}]", task.ProcessName, layoutFilePath));
            }


            return(rv);
        }