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) }); }
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); } }
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); }
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); } }
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); }
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); }
/// <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); }
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); } }
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); }
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) }); }
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); }
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())); }
protected virtual JArray Serialize(BPMStepCollection steps) { JArray rv = new JArray(); foreach (BPMProcStep step in steps) { rv.Add(this.Serialize(step)); } return(rv); }
/// <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("退回失败"); } }
/// <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("直送失败"); } }
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); }
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); }
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); }
/// <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); }
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)); }
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)); }
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); }
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); }
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); }
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); }
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} [{1}]", step.NodeName, GetUserFriendlyName(step.RecipientAccount, step.RecipientFullName)); } return(sb.ToString()); } else { return(GetTaskStatusHTML(state)); } }
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); }
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); }
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"; }
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); }