You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

194 lines
9.0 KiB
Plaintext

9 months ago
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using System.Web;
using BP.DA;
using BP.Sys;
using BP.Web;
using BP.Port;
using BP.En;
using BP.WF;
using BP.WF.Template;
namespace BP.Cloud.HttpHandler
{
/// <summary>
/// 页面功能实体
/// </summary>
public class Admin_TestingContainer : BP.WF.HttpHandler.DirectoryPageBase
{
/// <summary>
/// 构造函数
/// </summary>
public Admin_TestingContainer()
{
}
#region TestFlow2020_Init
/// <summary>
/// 发起.
/// </summary>
/// <returns></returns>
public string TestFlow2020_StartIt()
{
string sid = this.GetRequestVal("Token");
if (WebUser.IsAdmin == false)
return "err@非管理员无法测试";
//用户编号.
string userNo = this.GetRequestVal("UserNo");
//BP.Cloud.Dev2Interface.Port_Login(userID:,)
//判断是否可以测试该流程?
//组织url发起该流程.
string url = "../../../WF/Admin/TestingContainer/Default.html?RunModel=2&FK_Flow=" + this.FK_Flow + "&UserNo=" + userNo;
url += "&OrgNo=" + WebUser.OrgNo;
url += "&Adminer=" + WebUser.No;
url += "&AdminerToken=" + sid;
return url;
}
/// <summary>
/// 初始化
/// </summary>
/// <returns></returns>
public string TestFlow2020_Init()
{
//清除缓存.
BP.Difference.SystemConfig.DoClearCash();
if (BP.Web.WebUser.IsAdmin == false)
return "err@您不是管理员,无法执行该操作.";
FlowExt fl = new FlowExt(this.FK_Flow);
//if ( fl.Tester.Length <= 1)
//{
// string msg = "err@二级管理员[" + BP.Web.WebUser.Name + "]您好,您尚未为该流程配置测试人员.";
// msg += "您需要在流程属性里的底部[设置流程发起测试人]的属性里,设置可以发起的测试人员,多个人员用逗号分开.";
// return msg;
//}
#region 检查是否是测试用户
int nodeid = int.Parse(this.FK_Flow + "01");
DataTable dt = null;
string sql = "";
BP.WF.Node nd = new BP.WF.Node(nodeid);
if (nd.IsGuestNode)
{
/*如果是 guest 节点,就让其跳转到 guest登录界面让其发起流程。*/
//这个地址需要配置.
return "url@/SDKFlowDemo/GuestApp/Login.htm?FK_Flow=" + this.FK_Flow;
}
#endregion 测试人员.
#region 从配置里获取-测试人员.
/* 检查是否设置了测试人员,如果设置了就按照测试人员身份进入
* 设置测试人员的目的是太多了人员影响测试效率.
* */
if (fl.Tester.Length > 2)
{
// 构造人员表.
DataTable dtEmps = new DataTable();
dtEmps.Columns.Add("No");
dtEmps.Columns.Add("Name");
dtEmps.Columns.Add("FK_DeptText");
string[] strs = fl.Tester.Split(',');
foreach (string str in strs)
{
if (DataType.IsNullOrEmpty(str) == true)
continue;
BP.Cloud.Emp emp = new BP.Cloud.Emp();
emp.OrgNo = this.GetRequestVal("OrgNo");
emp.UserID = str;
emp.No = emp.OrgNo + "_" + emp.UserID;
//emp.SetValByKey("UserID", str);
int i = emp.RetrieveFromDBSources();
if (i == 0)
continue;
DataRow dr = dtEmps.NewRow();
dr["No"] = emp.No;
dr["Name"] = emp.Name;
dr["FK_DeptText"] = emp.FK_DeptText;
dtEmps.Rows.Add(dr);
}
if (dtEmps.Rows.Count > 0)
return BP.Tools.Json.ToJson(dtEmps);
}
#endregion 测试人员.
#region 从设置里获取-测试人员.
try
{
switch (nd.HisDeliveryWay)
{
case DeliveryWay.ByStation:
case DeliveryWay.ByStationOnly:
sql = "SELECT A.No AS No,A.Name AS Name,B.Name AS FK_DeptText FROM Port_Emp A ,Port_Dept B,Port_DeptEmpStation C,WF_NodeStation D WHERE A.FK_Dept=B.No AND C.FK_Emp=A.No AND C.FK_Dept=B.No AND D.FK_Station=C.FK_Station AND A.OrgNo='" + WebUser.OrgNo + "' AND D.FK_Node=" + nd.NodeID;
// emps.RetrieveInSQL_Order("select fk_emp from Port_Empstation WHERE fk_station in (select fk_station from WF_NodeStation WHERE FK_Node=" + nodeid + " )", "FK_Dept");
break;
case DeliveryWay.ByDept:
sql = "select A.No,A.Name,D.Name AS FK_DeptText from Port_Emp A,Port_Dept D where A.FK_Dept=D.No AND A.OrgNo='" + WebUser.OrgNo + "' AND A.FK_Dept in (select FK_Dept from WF_NodeDept where FK_Node='" + nodeid + "') ";
//emps.RetrieveInSQL("");
break;
case DeliveryWay.ByBindEmp:
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.SAAS)
sql = "SELECT A.No,A.Name,D.Name AS FK_DeptText FROM Port_Emp A,Port_Dept D where A.FK_Dept=D.No AND A.OrgNo='" + WebUser.OrgNo + "' AND A.No in (select FK_Emp from WF_NodeEmp where FK_Node='" + nodeid + "') ";
else
sql = "SELECT A.No,A.Name,D.Name AS FK_DeptText FROM Port_Emp A,Port_Dept D where A.FK_Dept=D.No AND A.OrgNo='" + WebUser.OrgNo + "' AND A.UserID in (select FK_Emp from WF_NodeEmp where FK_Node='" + nodeid + "') ";
//emps.RetrieveInSQL("select fk_emp from wf_NodeEmp WHERE fk_node=" + int.Parse(this.FK_Flow + "01") + " ");
break;
case DeliveryWay.ByDeptAndStation:
sql = "SELECT A.No AS No,A.Name AS Name ,B.Name AS FK_DeptText"
+ " FROM Port_Emp A,Port_Dept B, Port_DeptEmpStation C,WF_NodeDept D,WF_NodeStation E"
+ " WHERE A.FK_Dept = B.No AND (A.No=C.FK_Emp OR A.UserID=C.FK_Emp) AND B.No=C.FK_Dept AND C.FK_Dept = D.FK_Dept AND C.FK_Station=E.FK_Station AND D.FK_Node=E.FK_Node"
+ " AND E.FK_Node="+nodeid
+ " AND C.OrgNo='"+WebUser.OrgNo + "'"
+ " ORDER BY "
+ " C.FK_Emp";
break;
case DeliveryWay.BySelected: //所有的人员多可以启动, 2016年11月开始约定此规则.
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.Single)
sql = "SELECT a.No,a.Name,b.Name as FK_DeptText FROM Port_Emp A,Port_Dept B WHERE A.FK_Dept=B.No ";
else
sql = "SELECT a.No,a.Name,b.Name as FK_DeptText FROM Port_Emp A,Port_Dept B WHERE a.OrgNo='" + WebUser.OrgNo + "' AND A.FK_Dept=B.No AND B.OrgNo='" + WebUser.OrgNo + "' ";
dt = BP.DA.DBAccess.RunSQLReturnTable(sql);
break;
case DeliveryWay.BySQL:
if (DataType.IsNullOrEmpty(nd.DeliveryParas))
return "err@您设置的按SQL访问开始节点但是您没有设置sql.";
break;
default:
break;
}
dt = BP.DA.DBAccess.RunSQLReturnTable(sql);
if (dt.Rows.Count == 0)
return "err@您按照:" + nd.HisDeliveryWay + "的方式设置的开始节点的访问规则,但是开始节点没有人员。" + sql;
if (dt.Rows.Count > 2000)
return "err@可以发起开始节点的人员太多,会导致系统崩溃变慢,您需要在流程属性里设置可以发起的测试用户.";
//返回数据源.
return BP.Tools.Json.ToJson(dt);
#endregion 从设置里获取-测试人员.
}
catch (Exception ex)
{
return "err@<h2>您没有正确的设置开始节点的访问规则,这样导致没有可启动的人员,<a href='http://bbs.citydo.com.cn/showtopic-4103.aspx' target=_blank ><font color=red>点击这查看解决办法</font>.</a>。</h2> 系统错误提示:" + ex.Message + "<br><h3>也有可能你你切换了OSModel导致的什么是OSModel,请查看在线帮助文档 <a href='http://ccbpm.mydoc.io' target=_blank>http://ccbpm.mydoc.io</a> .</h3>";
}
}
#endregion
}
}