RoadFlow2.1 临时演示

FlowSend.aspx 17KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FlowSend.aspx.cs" Inherits="WebForm.Platform.WorkFlowRun.FlowSend" %>
  2. <!DOCTYPE html>
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  6. <title></title>
  7. </head>
  8. <body>
  9. <form id="form1" runat="server">
  10. <%
  11. WebForm.Common.Tools.CheckLogin(false);
  12. string flowid = Request.QueryString["flowid"];
  13. string stepid = Request.QueryString["stepid"];
  14. string groupid = Request.QueryString["groupid"];
  15. string taskid = Request.QueryString["taskid"];
  16. string instanceid = Request.QueryString["instanceid"];
  17. if (instanceid.IsNullOrEmpty())
  18. {
  19. instanceid = Request.QueryString["instanceid1"];
  20. }
  21. RoadFlow.Platform.WorkFlow bworkFlow = new RoadFlow.Platform.WorkFlow();
  22. RoadFlow.Platform.WorkFlowTask btask = new RoadFlow.Platform.WorkFlowTask();
  23. RoadFlow.Platform.Users busers = new RoadFlow.Platform.Users();
  24. RoadFlow.Data.Model.WorkFlowInstalled wfInstalled = bworkFlow.GetWorkFlowRunModel(flowid);
  25. if (wfInstalled == null)
  26. {
  27. Response.Write("未找到流程运行实体");
  28. Response.End();
  29. }
  30. var steps = wfInstalled.Steps.Where(p => p.ID == stepid.ToGuid());
  31. if(steps.Count()==0)
  32. {
  33. Response.Write("未找到当前步骤");
  34. Response.End();
  35. }
  36. var currentStep = steps.First();
  37. var nextSteps = bworkFlow.GetNextSteps(wfInstalled.ID, currentStep.ID).OrderBy(p => p.Position_x).ThenBy(p => p.Position_y).ToList();
  38. int i = 0;
  39. %>
  40. <table cellpadding="0" cellspacing="1" border="0" width="95%" align="center" style="margin-top:6px;">
  41. <%if (!currentStep.Note.IsNullOrEmpty()){ %>
  42. <tr>
  43. <td style="padding:2px 0 0 0; color:#cc0000;"><%=currentStep.Note %></td>
  44. </tr>
  45. <%} %>
  46. <%
  47. //判断流转条件
  48. if (currentStep.Behavior.FlowType == 0 && nextSteps.Count() > 0)
  49. {
  50. List<Guid> removeIDList = new List<Guid>();
  51. RoadFlow.Data.Model.WorkFlowCustomEventParams eventParams = new RoadFlow.Data.Model.WorkFlowCustomEventParams();
  52. eventParams.FlowID = flowid.ToGuid();
  53. eventParams.GroupID = groupid.ToGuid();
  54. eventParams.StepID = stepid.ToGuid();
  55. eventParams.TaskID = taskid.ToGuid();
  56. eventParams.InstanceID = instanceid;
  57. System.Text.StringBuilder nosubmitMsg = new System.Text.StringBuilder();
  58. foreach (var step in nextSteps)
  59. {
  60. var lines = wfInstalled.Lines.Where(p => p.ToID == step.ID && p.FromID == steps.First().ID);
  61. if (lines.Count() > 0)
  62. {
  63. var line = lines.First();
  64. if (!line.SqlWhere.IsNullOrEmpty())
  65. {
  66. if (wfInstalled.DataBases.Count() == 0)
  67. {
  68. removeIDList.Add(step.ID);
  69. //nosubmitMsg.Append("流程未设置数据连接");
  70. //nosubmitMsg.Append("\\n");
  71. }
  72. else
  73. {
  74. if (!btask.TestLineSql(wfInstalled.DataBases.First().LinkID, wfInstalled.DataBases.First().Table,
  75. wfInstalled.DataBases.First().PrimaryKey, instanceid, line.SqlWhere))
  76. {
  77. removeIDList.Add(step.ID);
  78. //nosubmitMsg.Append(string.Concat("提交条件未满足"));
  79. //nosubmitMsg.Append("\\n");
  80. }
  81. }
  82. }
  83. if (!line.CustomMethod.IsNullOrEmpty())
  84. {
  85. object obj = btask.ExecuteFlowCustomEvent(line.CustomMethod.Trim(), eventParams);
  86. var objType = obj.GetType();
  87. var boolType = typeof(Boolean);
  88. if (objType != boolType && "1" != obj.ToString())
  89. {
  90. removeIDList.Add(step.ID);
  91. nosubmitMsg.Append(obj.ToString());
  92. nosubmitMsg.Append("\\n");
  93. }
  94. else if (objType == boolType && !(bool)obj)
  95. {
  96. removeIDList.Add(step.ID);
  97. nosubmitMsg.Append(obj.ToString());
  98. nosubmitMsg.Append("\\n");
  99. }
  100. }
  101. #region 组织机构关系判断
  102. Guid SenderID = RoadFlow.Platform.Users.CurrentUserID;
  103. if ("1" == line.Organize_SenderChargeLeader && !busers.IsChargeLeader(SenderID))
  104. {
  105. removeIDList.Add(step.ID);
  106. }
  107. if (!line.Organize_SenderIn.IsNullOrEmpty() && !busers.IsContains(SenderID, line.Organize_SenderIn))
  108. {
  109. removeIDList.Add(step.ID);
  110. }
  111. if ("1" == line.Organize_SenderLeader && !busers.IsLeader(SenderID))
  112. {
  113. removeIDList.Add(step.ID);
  114. }
  115. if (!line.Organize_SenderNotIn.IsNullOrEmpty() && busers.IsContains(SenderID, line.Organize_SenderNotIn))
  116. {
  117. removeIDList.Add(step.ID);
  118. }
  119. Guid sponserID = Guid.Empty;//发起者ID
  120. if (currentStep.ID == wfInstalled.FirstStepID)//如果是第一步则发起者就是发送者
  121. {
  122. sponserID = SenderID;
  123. }
  124. else
  125. {
  126. sponserID = btask.GetFirstSnderID(eventParams.FlowID, eventParams.GroupID);
  127. }
  128. if ("1" == line.Organize_SponsorChargeLeader && !busers.IsChargeLeader(sponserID))
  129. {
  130. removeIDList.Add(step.ID);
  131. }
  132. if (!line.Organize_SponsorIn.IsNullOrEmpty() && !busers.IsContains(sponserID, line.Organize_SponsorIn))
  133. {
  134. removeIDList.Add(step.ID);
  135. }
  136. if ("1" == line.Organize_SponsorLeader && !busers.IsLeader(sponserID))
  137. {
  138. removeIDList.Add(step.ID);
  139. }
  140. if (!line.Organize_SponsorNotIn.IsNullOrEmpty() && busers.IsContains(sponserID, line.Organize_SponsorNotIn))
  141. {
  142. removeIDList.Add(step.ID);
  143. }
  144. if ("1" == line.Organize_NotSenderChargeLeader && busers.IsChargeLeader(SenderID))
  145. {
  146. removeIDList.Add(step.ID);
  147. }
  148. if ("1" == line.Organize_NotSenderLeader && busers.IsLeader(SenderID))
  149. {
  150. removeIDList.Add(step.ID);
  151. }
  152. if ("1" == line.Organize_NotSponsorChargeLeader && busers.IsChargeLeader(sponserID))
  153. {
  154. removeIDList.Add(step.ID);
  155. }
  156. if ("1" == line.Organize_NotSponsorLeader && busers.IsLeader(sponserID))
  157. {
  158. removeIDList.Add(step.ID);
  159. }
  160. #endregion
  161. }
  162. }
  163. foreach (Guid rid in removeIDList)
  164. {
  165. nextSteps.RemoveAll(p => p.ID == rid);
  166. }
  167. if (nextSteps.Count == 0)
  168. {
  169. string alertMsg = nosubmitMsg.ToString();
  170. alertMsg = alertMsg.IsNullOrEmpty() ? "后续步骤条件均不符合,任务不能提交!" : alertMsg;
  171. Response.Write("<script>alert('" + alertMsg + "');top.mainDialog.close();</script>");
  172. Response.End();
  173. }
  174. }
  175. foreach (var step in nextSteps)
  176. {
  177. string checked1 = i++ == 0 ? "checked=\"checked\"" : "";//默认选中第一个步骤
  178. string disabled = step.Behavior.RunSelect == 0 ? "disabled=\"disabled\"" : "";//是否允许运行时选择人员
  179. string selectRang = step.Behavior.SelectRange.IsNullOrEmpty() ? "" : "rootid=\"" + step.Behavior.SelectRange.Trim() + "\"";//选择范围
  180. string selectType = string.Empty;//选择类型
  181. var defaultMember = string.Empty;//默认处理人员
  182. //如果是调试模式并且当前登录人员包含在调试人员中 则默认为发起者
  183. if ((wfInstalled.Debug == 1 || wfInstalled.Debug == 2) && wfInstalled.DebugUsers.Exists(p => p.ID == RoadFlow.Platform.Users.CurrentUserID))
  184. {
  185. defaultMember = RoadFlow.Platform.Users.PREFIX + RoadFlow.Platform.Users.CurrentUserID.ToString();
  186. }
  187. else
  188. {
  189. switch (step.Behavior.HandlerType)
  190. {
  191. case 0:
  192. selectType = "unit='1' dept='1' station='1' workgroup='1' user='1'";
  193. break;
  194. case 1:
  195. selectType = "unit='0' dept='1' station='0' workgroup='0' user='0'";
  196. break;
  197. case 2:
  198. selectType = "unit='0' dept='0' station='1' workgroup='0' user='0'";
  199. break;
  200. case 3:
  201. selectType = "unit='0' dept='0' station='0' workgroup='1' user='0'";
  202. break;
  203. case 4:
  204. selectType = "unit='0' dept='0' station='0' workgroup='0' user='1'";
  205. break;
  206. case 5://发起者
  207. Guid userid = btask.GetFirstSnderID(wfInstalled.ID, groupid.ToGuid());
  208. if (userid != Guid.Empty)
  209. {
  210. defaultMember = RoadFlow.Platform.Users.PREFIX + userid.ToString();
  211. }
  212. if (defaultMember.IsNullOrEmpty() && currentStep.ID == wfInstalled.FirstStepID)
  213. {
  214. defaultMember = RoadFlow.Platform.Users.PREFIX + RoadFlow.Platform.Users.CurrentUserID.ToString();
  215. }
  216. break;
  217. case 6://前一步骤处理者
  218. //defaultMember = btask.GetStepSnderIDString(wfInstalled.ID, currentStep.ID, groupid.ToGuid());
  219. //if (defaultMember.IsNullOrEmpty() && currentStep.ID == wfInstalled.FirstStepID)
  220. //{
  221. defaultMember = RoadFlow.Platform.Users.PREFIX + RoadFlow.Platform.Users.CurrentUserID.ToString();
  222. //}
  223. break;
  224. case 7://某一步骤处理者
  225. defaultMember = btask.GetStepSnderIDString(wfInstalled.ID, step.Behavior.HandlerStepID, groupid.ToGuid());
  226. if (defaultMember.IsNullOrEmpty() && step.Behavior.HandlerStepID == wfInstalled.FirstStepID)
  227. {
  228. defaultMember = RoadFlow.Platform.Users.PREFIX + RoadFlow.Platform.Users.CurrentUserID.ToString();
  229. }
  230. break;
  231. case 8://字段值
  232. string linkString = step.Behavior.ValueField;
  233. if (!linkString.IsNullOrEmpty() && !instanceid.IsNullOrEmpty() && wfInstalled.DataBases.Count() > 0)
  234. {
  235. defaultMember = new RoadFlow.Platform.DBConnection().GetFieldValue(linkString, wfInstalled.DataBases.First().PrimaryKey, instanceid);
  236. }
  237. break;
  238. case 9://发起者主管
  239. Guid firstSenderID = btask.GetFirstSnderID(wfInstalled.ID, groupid.ToGuid());
  240. if (firstSenderID.IsEmptyGuid() && currentStep.ID == wfInstalled.FirstStepID)//如果是第一步则发起者为当前人员
  241. {
  242. firstSenderID = RoadFlow.Platform.Users.CurrentUserID;
  243. }
  244. if (!firstSenderID.IsEmptyGuid())
  245. {
  246. defaultMember = busers.GetLeader(firstSenderID);
  247. }
  248. break;
  249. case 10://发起者分管领导
  250. Guid firstSenderID1 = btask.GetFirstSnderID(wfInstalled.ID, groupid.ToGuid());
  251. if (firstSenderID1.IsEmptyGuid() && currentStep.ID == wfInstalled.FirstStepID)//如果是第一步则发起者为当前人员
  252. {
  253. firstSenderID1 = RoadFlow.Platform.Users.CurrentUserID;
  254. }
  255. if (!firstSenderID1.IsEmptyGuid())
  256. {
  257. defaultMember = busers.GetChargeLeader(firstSenderID1);
  258. }
  259. break;
  260. case 11://前一步处理者领导
  261. defaultMember = busers.GetLeader(RoadFlow.Platform.Users.CurrentUserID);
  262. break;
  263. case 12://前一步处理者分管领导
  264. defaultMember = busers.GetChargeLeader(RoadFlow.Platform.Users.CurrentUserID);
  265. break;
  266. }
  267. }
  268. if (defaultMember.IsNullOrEmpty())
  269. {
  270. defaultMember = step.Behavior.DefaultHandler;
  271. }
  272. %>
  273. <tr>
  274. <td style="padding:9px 0 2px 0;">
  275. <input type="hidden" name="nextstepid" value="@step.ID" />
  276. <%if (currentStep.Behavior.FlowType == 1){ %>
  277. <input type="radio" <%=checked1 %> value="<%=step.ID %>" name="step" id="step_<%=step.ID %>" style="vertical-align:middle;" />
  278. <%}else if (currentStep.Behavior.FlowType == 2){ %>
  279. <input type="checkbox" <%=checked1 %> value="<%=step.ID %>" name="step" id="Checkbox1" style="vertical-align:middle;" />
  280. <%}else{%>
  281. <input type="checkbox" checked="checked" disabled="disabled" value="<%=step.ID %>" name="step" id="Checkbox2" style="vertical-align:middle;" />
  282. <%}%>
  283. <label for="step_<%=step.ID %>" style="vertical-align:middle;"><%=step.Name %></label>
  284. </td>
  285. </tr>
  286. <tr>
  287. <td style="padding:2px 0 4px 0;">
  288. <input type="text" class="mymember" <%=disabled %> <%=selectRang %> <%=selectType %> value="<%=defaultMember %>" id="user_<%=step.ID %>" name="user_<%=step.ID %>" style="width:280px;" title="选择处理人员" isChangeType="<%=selectRang.Length>0?"1":"0" %>" /> <!--span style="color:#999;">//选择处理人员</span-->
  289. </td>
  290. </tr>
  291. <tr><td style="height:6px; border-bottom:1px dashed #e8e8e8;"></td></tr>
  292. <%} %>
  293. </table>
  294. <div style="width:95%; margin:12px auto 0 auto; text-align:center;">
  295. <input type="submit" class="mybutton" onclick="return confirm1();" name="Save" value="&nbsp;确&nbsp;定&nbsp;" style="margin-right:5px;" />
  296. <input type="button" class="mybutton" value="&nbsp;取&nbsp;消&nbsp;" onclick="new RoadUI.Window().close();" />
  297. </div>
  298. <script type="text/javascript">
  299. var frame = null;
  300. var openerid = '<%=Request.QueryString["openerid"]%>';
  301. var nextStepsCount = <%=nextSteps.Count()%>;
  302. $(function ()
  303. {
  304. var iframes = top.frames;
  305. for (var i = 0; i < iframes.length; i++)
  306. {
  307. if (iframes[i].name == openerid + "_iframe")
  308. {
  309. frame = iframes[i]; break;
  310. }
  311. }
  312. if (frame == null) return;
  313. if(nextStepsCount == 0)//如果后面没有步骤,则完成该流程实例
  314. {
  315. var options = {};
  316. options.type = "completed";
  317. options.steps = [];
  318. frame.formSubmit(options);
  319. new RoadUI.Window().close();
  320. }
  321. else if(nextStepsCount>2)
  322. {
  323. top.mainDialog.resize(480,(nextStepsCount-2)*45+280);
  324. }
  325. });
  326. function confirm1()
  327. {
  328. var opts = {};
  329. opts.type = "submit";
  330. opts.steps = [];
  331. var isSubmit = true;
  332. $(":checked[name='step']").each(function ()
  333. {
  334. var step = $(this).val();
  335. var member = $("#user_" + step).val() || "";
  336. if ($.trim(member).length == 0)
  337. {
  338. alert($(this).next().text() + " 没有选择处理人员!");
  339. isSubmit = false;
  340. return false;
  341. }
  342. opts.steps.push({ id: step, member: member });
  343. });
  344. if(!isSubmit)
  345. {
  346. return false;
  347. }
  348. if(opts.steps.length==0)
  349. {
  350. alert("没有选择要处理的步骤!");
  351. return false;
  352. }
  353. if (isSubmit)
  354. {
  355. frame.formSubmit(opts);
  356. new RoadUI.Window().close();
  357. }
  358. }
  359. </script>
  360. </form>
  361. </body>
  362. </html>