public DataTable GetTable() { if (this.ToNode == 0) { throw new Exception("@流程设计错误,没有转向的节点。举例说明: 当前是A节点。如果您在A点的属性里启用了[接受人]按钮,那么他的转向节点集合中(就是A可以转到的节点集合比如:A到B,A到C, 那么B,C节点就是转向节点集合),必须有一个节点是的节点属性的[访问规则]设置为[由上一步发送人员选择]"); } NodeStations stas = new NodeStations(this.ToNode); if (stas.Count == 0) { BP.WF.Node toNd = new BP.WF.Node(this.ToNode); throw new Exception("@流程设计错误:设计员没有设计节点[" + toNd.Name + "],接受人的岗位范围。"); } string BindByStationSql = ""; string DdlEmpSql = ""; string ParSql = "select No from Port_Dept where ParentNo='0'"; DataTable ParDt = DBAccess.RunSQLReturnTable(ParSql); BindByStationSql = string.Format("select No,Name,ParentNo,'1' IsParent from Port_Dept where ParentNo='0' union" + " select No,Name,b.FK_Station as ParentNo,'0' IsParent from Port_Emp a inner" + " join " + BP.WF.Glo.EmpStation + " b on a.No=b.FK_Emp and b.FK_Station in" + " (SELECT FK_STATION FROM WF_NodeStation WHERE FK_Node='{0}') WHERE No in" + " (SELECT FK_EMP FROM " + BP.WF.Glo.EmpStation + " " + " WHERE FK_STATION IN (SELECT FK_STATION FROM WF_NodeStation WHERE FK_Node='{0}'))" + " AND No IN (SELECT FK_Emp FROM Port_EmpDept) " + " union select No,Name,'{2}' ParentNo,'1' IsParent from Port_Station where no " + "in(SELECT FK_STATION FROM WF_NodeStation WHERE FK_Node='{0}')", ToNode, WebUser.FK_Dept, ParDt.Rows[0][0].ToString()); DdlEmpSql = string.Format("select No,Name,b.FK_Station as ParentNo,'0' IsParent from Port_Emp a inner" + " join " + BP.WF.Glo.EmpStation + " b on a.No=b.FK_Emp and b.FK_Station in" + " (SELECT FK_STATION FROM WF_NodeStation WHERE FK_Node='{0}') WHERE No in" + " (SELECT FK_EMP FROM " + BP.WF.Glo.EmpStation + " " + " WHERE FK_STATION IN (SELECT FK_STATION FROM WF_NodeStation WHERE FK_Node='{0}'))" + " AND No IN (SELECT FK_Emp FROM Port_EmpDept) ", ToNode, WebUser.FK_Dept, ParDt.Rows[0][0].ToString()); if (BP.WF.Glo.OSModel == BP.Sys.OSModel.OneMore) { BindByStationSql = BindByStationSql.Replace("Port_EmpDept", "Port_DeptEmp"); DdlEmpSql = DdlEmpSql.Replace("Port_EmpDept", "Port_DeptEmp"); } else { BindByStationSql = BindByStationSql.Replace("Port_DeptEmp", "Port_EmpDept"); DdlEmpSql = DdlEmpSql.Replace("Port_DeptEmp", "Port_EmpDept"); BindByStationSql = BindByStationSql.Replace("Port_DeptEmpStation", "Port_EmpSTATION"); DdlEmpSql = DdlEmpSql.Replace("Port_DeptEmpStation", "Port_EmpSTATION"); } DdlEmpDt = DBAccess.RunSQLReturnTable(DdlEmpSql); return(DBAccess.RunSQLReturnTable(BindByStationSql)); }
public DataTable GetTable() { if (this.MyToNode == 0) { throw new Exception("@流程设计错误,没有转向的节点。举例说明: 当前是A节点。如果您在A点的属性里启用了[接受人]按钮,那么他的转向节点集合中(就是A可以转到的节点集合比如:A到B,A到C, 那么B,C节点就是转向节点集合),必须有一个节点是的节点属性的[访问规则]设置为[由上一步发送人员选择]"); } NodeStations stas = new NodeStations(this.MyToNode); if (stas.Count == 0) { BP.WF.Node toNd = new BP.WF.Node(this.MyToNode); throw new Exception("@流程设计错误:设计员没有设计节点[" + toNd.Name + "],接受人的岗位范围。"); } string sql = ""; if (this.Request.QueryString["IsNextDept"] != null) { int len = this.FK_Dept.Length + 2; string sqlDept = "SELECT No FROM Port_Dept WHERE " + BP.SystemConfig.AppCenterDBLengthStr + "(No)=" + len + " AND No LIKE '" + this.FK_Dept + "%'"; sql = "SELECT A.No,A.Name, A.FK_Dept, B.Name as DeptName FROM Port_Emp A,Port_Dept B WHERE A.FK_Dept=B.No AND a.NO IN ( "; sql += "SELECT FK_EMP FROM Port_EmpSTATION WHERE FK_STATION "; sql += "IN (SELECT FK_STATION FROM WF_NodeStation WHERE FK_Node=" + MyToNode + ") "; sql += ") AND A.No IN( SELECT No FROM Port_Emp WHERE " + BP.SystemConfig.AppCenterDBLengthStr + "(FK_Dept)=" + len + " AND FK_Dept LIKE '" + this.FK_Dept + "%')"; sql += " ORDER BY FK_DEPT "; return(BP.DA.DBAccess.RunSQLReturnTable(sql)); } // 优先解决本部门的问题。 if (this.FK_Dept == WebUser.FK_Dept) { sql = "SELECT A.No,A.Name, A.FK_Dept, B.Name as DeptName FROM Port_Emp A,Port_Dept B WHERE A.FK_Dept=B.No AND a.NO IN ( "; sql += "SELECT FK_EMP FROM Port_EmpSTATION WHERE FK_STATION "; sql += "IN (SELECT FK_STATION FROM WF_NodeStation WHERE FK_Node=" + MyToNode + ") "; sql += ") AND a.No IN (SELECT FK_Emp FROM Port_EmpDept WHERE FK_Dept ='" + WebUser.FK_Dept + "')"; sql += " ORDER BY FK_DEPT "; DataTable dt = BP.DA.DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count != 0) { return(dt); } } sql = "SELECT A.No,A.Name, A.FK_Dept, B.Name as DeptName FROM Port_Emp A,Port_Dept B WHERE A.FK_Dept=B.No AND a.NO IN ( "; sql += "SELECT FK_EMP FROM Port_EmpSTATION WHERE FK_STATION "; sql += "IN (SELECT FK_STATION FROM WF_NodeStation WHERE FK_Node=" + MyToNode + ") "; sql += ") ORDER BY FK_DEPT "; return(BP.DA.DBAccess.RunSQLReturnTable(sql)); }
protected void Btn_Save_Click(object sender, EventArgs e) { //获取选择的 09.与指定节点处理人相同. string strzdjd = ""; foreach (ListItem li in this.CBL_BySpecNodeEmp.Items) { if (li.Selected) { strzdjd += li.Value + ","; } } strzdjd = strzdjd.TrimEnd(','); //12.按指定节点的人员岗位计算 string strzdjdgw = ""; foreach (ListItem li in this.CBL_BySpecNodeEmpStation.Items) { if (li.Selected) { strzdjdgw += li.Value + ","; } } strzdjdgw = strzdjdgw.TrimEnd(','); Node nd = new Node(this.NodeID); string sql = ""; if (this.RB_ByStation.Checked) { //按岗位(以部门为纬度) nd.HisDeliveryWay = DeliveryWay.ByStation; nd.DirectUpdate(); //按照岗位. NodeStations nss = new NodeStations(); nss.Retrieve(NodeStationAttr.FK_Node, this.NodeID); if (nss.Count == 0) { BP.Sys.PubClass.Alert("@您选择的是请设置岗位来计算接受人,请设置岗位没有岗位无法计算该节点的接受人。"); } } if (this.RB_ByDept.Checked) { // 按部门 nd.HisDeliveryWay = DeliveryWay.ByDept; nd.DirectUpdate(); //按照岗位. NodeDepts nss = new NodeDepts(); nss.Retrieve(NodeStationAttr.FK_Node, this.NodeID); if (nss.Count == 0) { BP.Sys.PubClass.Alert("@您选择的是请设置部门来计算接受人,请设置部门没有部门无法计算该节点的接受人。"); } } if (this.RB_BySQL.Checked) { //按SQL nd.HisDeliveryWay = DeliveryWay.BySQL; nd.DeliveryParas = this.TB_BySQL.Text; nd.DirectUpdate(); sql = this.TB_BySQL.Text; if (sql.Length <= 5) { BP.Sys.PubClass.Alert("@请设置完整的SQL"); } //检查SQL是否符合要求. try { sql = BP.WF.Glo.DealExp(sql, null, null); DataTable dt = BP.DA.DBAccess.RunSQLReturnTable(sql); if (dt.Columns.Contains("No") == false || dt.Columns.Contains("Name") == false) { BP.Sys.PubClass.Alert("@查询结果集合里不包含No,Name两个列, 分别标识操作员编号,操作员名称。"); } } catch (Exception ex) { BP.Sys.PubClass.Alert("@设置的SQL不符合要求SQL=" + sql + ",其他信息:" + ex.Message); } } if (this.RB_ByBindEmp.Checked) { //按本节点绑定的人员 nd.HisDeliveryWay = DeliveryWay.ByBindEmp; nd.DirectUpdate(); //按照岗位. NodeEmps nss = new NodeEmps(); nss.Retrieve(NodeEmpAttr.FK_Node, this.NodeID); if (nss.Count == 0) { BP.Sys.PubClass.Alert("@您选择的是请设置人员来计算接受人,请设置人员没有人员无法计算该节点的接受人。"); } } if (this.RB_BySelected.Checked) { //由上一步发送人选择 nd.HisDeliveryWay = DeliveryWay.BySelected; } if (this.RB_ByPreviousNodeFormEmpsField.Checked) { //按表单选择人员 nd.HisDeliveryWay = DeliveryWay.ByPreviousNodeFormEmpsField; nd.DeliveryParas = this.DDL_ByPreviousNodeFormEmpsField.SelectedValue; } if (this.RB_ByPreviousNodeEmp.Checked) { //与上一节点的人员相同 nd.HisDeliveryWay = DeliveryWay.ByPreviousNodeEmp; } if (this.RB_ByStarter.Checked) { //与开始节点的人员相同 nd.HisDeliveryWay = DeliveryWay.ByStarter; } if (this.RB_BySpecNodeEmp.Checked) { //与指定节点的人员相同 nd.HisDeliveryWay = DeliveryWay.BySpecNodeEmp; nd.DeliveryParas = strzdjd; } if (this.RB_ByDeptAndStation.Checked) { //按岗位与部门交集计算 nd.HisDeliveryWay = DeliveryWay.ByDeptAndStation; } if (this.RB_ByStationAndEmpDept.Checked) { //按岗位计算(以部门集合为纬度) nd.HisDeliveryWay = DeliveryWay.ByStationAndEmpDept; } if (this.RB_BySpecNodeEmpStation.Checked) { //按指定节点的人员或者指定字段作为人员的岗位计算 nd.HisDeliveryWay = DeliveryWay.BySpecNodeEmpStation; nd.DeliveryParas = strzdjdgw; } if (this.RB_BySQLAsSubThreadEmpsAndData.Checked) { sql = this.TB_BySQLAsSubThreadEmpsAndData.Text; if (sql.Length <= 5) { BP.Sys.PubClass.Alert("@请设置完整的SQL"); } //按SQL确定子线程接受人与数据源. nd.HisDeliveryWay = DeliveryWay.BySQLAsSubThreadEmpsAndData; nd.DeliveryParas = this.TB_BySQLAsSubThreadEmpsAndData.Text; } if (this.RB_ByDtlAsSubThreadEmps.Checked) { sql = this.TB_ByDtlAsSubThreadEmps.Text; if (sql.Length <= 5) { BP.Sys.PubClass.Alert("@请设置完整的SQL"); } //按明细表确定子线程接受人. nd.HisDeliveryWay = DeliveryWay.ByDtlAsSubThreadEmps; nd.DeliveryParas = this.TB_ByDtlAsSubThreadEmps.Text; } if (this.RB_ByStationOnly.Checked) { //仅按岗位计算. nd.HisDeliveryWay = DeliveryWay.ByStationOnly; } if (this.RB_ByFEE.Checked) { // FEE计算. nd.HisDeliveryWay = DeliveryWay.ByFEE; } if (this.RB_BySetDeptAsSubthread.Checked) { //按照按绑定部门计算,该部门一人处理标识该工作结束(子线程) nd.HisDeliveryWay = DeliveryWay.BySetDeptAsSubthread; } if (this.RB_ByCCFlowBPM.Checked) { //按照ccflow的BPM模式处理 nd.HisDeliveryWay = DeliveryWay.ByCCFlowBPM; } //是否可以分配工作? nd.IsTask = this.CB_IsSSS.Checked; //是否启用自动记忆功能 nd.IsRememberMe = this.CB_IsRememme.Checked; //本节点接收人不允许包含上一步发送人 nd.IsExpSender = this.CB_IsExpSender.Checked; //发送后转向 nd.DirectUpdate(); }