Example #1
0
        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));
        }
Example #2
0
        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));
        }
Example #3
0
        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();
        }