RoadFlow2.1 临时演示

Execute.aspx 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Execute.aspx.cs" Inherits="WebForm.Platform.WorkFlowRun.Execute" %>
  2. <%
  3. WebForm.Common.Tools.CheckLogin(false);
  4. string params1 = Request.Form["params"];
  5. string issign = Request.Form["issign"];
  6. string comment = Request.Form["comment"];
  7. string flowid = Request.QueryString["flowid"];
  8. string instanceid = Request.QueryString["instanceid"];
  9. string taskid = Request.QueryString["taskid"];
  10. string stepid = Request.QueryString["stepid"];
  11. string groupid = Request.QueryString["groupid"];
  12. if(instanceid.IsNullOrEmpty())
  13. {
  14. instanceid = Request.Form["instanceid"];
  15. }
  16. if(params1.IsNullOrEmpty())
  17. {
  18. Response.Write("参数为空!");
  19. Response.End();
  20. }
  21. var opationJSON = LitJson.JsonMapper.ToObject(params1);
  22. string opation = opationJSON["type"].ToString().ToLower();
  23. RoadFlow.Platform.WorkFlow bworkFlow = new RoadFlow.Platform.WorkFlow();
  24. RoadFlow.Platform.WorkFlowTask btask = new RoadFlow.Platform.WorkFlowTask();
  25. RoadFlow.Platform.WorkFlowDelegation bworkFlowDelegation = new RoadFlow.Platform.WorkFlowDelegation();
  26. RoadFlow.Platform.Organize borganize = new RoadFlow.Platform.Organize();
  27. RoadFlow.Platform.Users busers = new RoadFlow.Platform.Users();
  28. var wfInstalled=bworkFlow.GetWorkFlowRunModel(flowid);
  29. if(wfInstalled==null)
  30. {
  31. Response.Write("未找到流程运行时实体,请确认流程是否已安装!");
  32. Response.End();
  33. }
  34. //流程标题
  35. string titleField = Request.Form["Form_TitleField"];
  36. string title = Request.Form[titleField];
  37. RoadFlow.Data.Model.WorkFlowExecute.Execute execute = new RoadFlow.Data.Model.WorkFlowExecute.Execute();
  38. execute.Comment = comment.IsNullOrEmpty() ? "" : comment.Trim();
  39. switch(opation)
  40. {
  41. case "submit":
  42. execute.ExecuteType = RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Submit;
  43. break;
  44. case "save":
  45. execute.ExecuteType = RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Save;
  46. break;
  47. case "back":
  48. execute.ExecuteType = RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Back;
  49. break;
  50. case "completed":
  51. execute.ExecuteType = RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Completed;
  52. break;
  53. case "redirect":
  54. execute.ExecuteType = RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Redirect;
  55. break;
  56. }
  57. execute.FlowID = flowid.ToGuid();
  58. execute.GroupID = groupid.ToGuid();
  59. execute.InstanceID = instanceid;
  60. execute.IsSign = "1" == issign;
  61. execute.Note = "";
  62. execute.Sender = RoadFlow.Platform.Users.CurrentUser;
  63. execute.StepID = stepid.IsGuid() ? stepid.ToGuid() : wfInstalled.FirstStepID;
  64. execute.TaskID = taskid.ToGuid();
  65. execute.Title = title ?? "";
  66. LitJson.JsonData stepsjson = opationJSON["steps"];
  67. if(stepsjson.IsArray)
  68. {
  69. foreach(LitJson.JsonData step in stepsjson)
  70. {
  71. string id = step["id"].ToString();
  72. string member = step["member"].ToString();
  73. Guid gid;
  74. if(id.IsGuid(out gid))
  75. {
  76. switch(execute.ExecuteType)
  77. {
  78. case RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Submit:
  79. execute.Steps.Add(gid, borganize.GetAllUsers(member));
  80. break;
  81. case RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Back:
  82. execute.Steps.Add(gid, new List<RoadFlow.Data.Model.Users>());
  83. break;
  84. case RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Save:
  85. break;
  86. case RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Completed:
  87. break;
  88. case RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Redirect:
  89. break;
  90. }
  91. }
  92. if (execute.ExecuteType == RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Redirect)
  93. {
  94. execute.Steps.Add(Guid.Empty, borganize.GetAllUsers(member));
  95. }
  96. }
  97. }
  98. RoadFlow.Data.Model.WorkFlowCustomEventParams eventParams = new RoadFlow.Data.Model.WorkFlowCustomEventParams();
  99. eventParams.FlowID = execute.FlowID;
  100. eventParams.GroupID = execute.GroupID;
  101. eventParams.StepID = execute.StepID;
  102. eventParams.TaskID = execute.TaskID;
  103. eventParams.InstanceID = execute.InstanceID;
  104. //保存业务数据 "1" != Request.QueryString["isSystemDetermine"]:当前步骤流转类型如果是系统判断,则先保存数据,在这里就不需要保存数据了。
  105. if(execute.ExecuteType == RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Save ||
  106. execute.ExecuteType== RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Completed ||
  107. "1" != Request.QueryString["isSystemDetermine"]
  108. )
  109. {
  110. instanceid = bworkFlow.SaveFromData(instanceid, eventParams);
  111. if(execute.InstanceID.IsNullOrEmpty())
  112. {
  113. execute.InstanceID = instanceid;
  114. eventParams.InstanceID = instanceid;
  115. }
  116. }
  117. Response.Write("执行参数:" + params1 + "<br/>");
  118. var steps = wfInstalled.Steps.Where(p => p.ID == execute.StepID);
  119. foreach(var step in steps)
  120. {
  121. //步骤提交前事件
  122. if (!step.Event.SubmitBefore.IsNullOrEmpty() &&
  123. (execute.ExecuteType == RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Submit
  124. || execute.ExecuteType== RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Completed))
  125. {
  126. object obj = btask.ExecuteFlowCustomEvent(step.Event.SubmitBefore.Trim(), eventParams);
  127. Response.Write(string.Format("执行步骤提交前事件:({0}) 返回值:{1}<br/>", step.Event.SubmitBefore.Trim(), obj.ToString()));
  128. }
  129. //步骤退回前事件
  130. if (!step.Event.BackBefore.IsNullOrEmpty() && execute.ExecuteType == RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Back)
  131. {
  132. object obj = btask.ExecuteFlowCustomEvent(step.Event.BackBefore.Trim(), eventParams);
  133. Response.Write(string.Format("执行步骤退回前事件:({0}) 返回值:{1}<br/>", step.Event.BackBefore.Trim(), obj.ToString()));
  134. }
  135. }
  136. //处理委托
  137. foreach(var executeStep in execute.Steps)
  138. {
  139. for (int i = 0; i < executeStep.Value.Count; i++)
  140. {
  141. Guid newUserID = bworkFlowDelegation.GetFlowDelegationByUserID(execute.FlowID, executeStep.Value[i].ID);
  142. if (newUserID != Guid.Empty && newUserID != executeStep.Value[i].ID)
  143. {
  144. executeStep.Value[i] = busers.Get(newUserID);
  145. }
  146. }
  147. }
  148. var reslut = btask.Execute(execute);
  149. Response.Write(string.Format("处理流程步骤结果:{0}<br/>", reslut.IsSuccess ? "成功" : "失败"));
  150. Response.Write(string.Format("调试信息:{0}", reslut.DebugMessages));
  151. string msg = reslut.Messages;
  152. string logContent = string.Format("处理参数:{0}<br/>处理结果:{1}<br/>调试信息:{2}<br/>返回信息:{3}",
  153. params1,
  154. reslut.IsSuccess ? "成功" : "失败",
  155. reslut.DebugMessages,
  156. reslut.Messages
  157. );
  158. RoadFlow.Platform.Log.Add(string.Format("处理了流程({0})", wfInstalled.Name), logContent, RoadFlow.Platform.Log.Types.流程相关);
  159. foreach (var step in steps)
  160. {
  161. //步骤提交后事件
  162. if (!step.Event.SubmitAfter.IsNullOrEmpty() &&
  163. (execute.ExecuteType == RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Submit
  164. || execute.ExecuteType == RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Completed))
  165. {
  166. object obj = btask.ExecuteFlowCustomEvent(step.Event.SubmitAfter.Trim(), eventParams);
  167. Response.Write(string.Format("执行步骤提交后事件:({0}) 返回值:{1}<br/>", step.Event.SubmitAfter.Trim(), obj.ToString()));
  168. }
  169. //步骤退回后事件
  170. if (!step.Event.BackAfter.IsNullOrEmpty() && execute.ExecuteType == RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Back)
  171. {
  172. object obj = btask.ExecuteFlowCustomEvent(step.Event.BackAfter.Trim(), eventParams);
  173. Response.Write(string.Format("执行步骤退回后事件:({0}) 返回值:{1}<br/>", step.Event.BackAfter.Trim(), obj.ToString()));
  174. }
  175. }
  176. //归档
  177. if (execute.ExecuteType == RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Submit
  178. || execute.ExecuteType == RoadFlow.Data.Model.WorkFlowExecute.EnumType.ExecuteType.Completed)
  179. {
  180. var currentsteps = wfInstalled.Steps.Where(p=>p.ID==execute.StepID);
  181. if (currentsteps.Count() > 0 && currentsteps.First().Archives == 1)
  182. {
  183. string flowName, stepName;
  184. string formHtml = Request.Form["form_body_div_textarea"];
  185. string commentHtml = Request.Form["form_commentlist_div_textarea"];
  186. stepName = bworkFlow.GetStepName(execute.StepID, execute.FlowID, out flowName, true);
  187. string archivesContents = new RoadFlow.Platform.WorkFlowForm().GetArchivesString(formHtml, commentHtml);
  188. RoadFlow.Data.Model.WorkFlowArchives wfr = new RoadFlow.Data.Model.WorkFlowArchives();
  189. wfr.Comments = commentHtml;
  190. wfr.Contents = archivesContents;
  191. wfr.FlowID = execute.FlowID;
  192. wfr.FlowName = flowName;
  193. wfr.GroupID = execute.GroupID;
  194. wfr.ID = Guid.NewGuid();
  195. wfr.InstanceID = execute.InstanceID;
  196. wfr.StepID = execute.StepID;
  197. wfr.StepName = stepName;
  198. wfr.Title = title.IsNullOrEmpty() ? flowName + "-" + stepName : title;
  199. wfr.TaskID = execute.TaskID;
  200. wfr.WriteTime = RoadFlow.Utility.DateTimeNew.Now;
  201. new RoadFlow.Platform.WorkFlowArchives().Add(wfr);
  202. }
  203. }
  204. Response.Write("<script type=\"text/javascript\">alert('" + msg + "');top.mainDialog.close();</script>");
  205. if (reslut.IsSuccess)
  206. {
  207. //判断是打开任务还是关闭窗口
  208. var nextTasks = reslut.NextTasks.Where(p => p.Status.In(0, 1) && p.ReceiveID == RoadFlow.Platform.Users.CurrentUserID);
  209. var nextTask = nextTasks.Count() > 0 ? nextTasks.First() : null;
  210. if (nextTask != null)
  211. {
  212. string url = string.Format("Default.aspx?flowid={0}&stepid={1}&taskid={2}&groupid={3}&instanceid={4}&appid={5}&tabid={6}",
  213. nextTask.FlowID, nextTask.StepID, nextTask.ID, nextTask.GroupID, nextTask.InstanceID,
  214. Request.QueryString["appid"], Request.QueryString["tabid"]
  215. );
  216. Response.Write("<script type=\"text/javascript\">window.parent.location = '"+url+"';</script>");
  217. }
  218. else
  219. {
  220. Response.Write("<script type=\"text/javascript\">top.mainTab.closeTab();</script>");
  221. }
  222. }
  223. %>