/// <summary>
        /// �ύһ��������
        /// </summary>
        /// <param name="functionNo">����</param>
        /// <param name="recordValue">����ֵ</param>
        /// <param name="recordTitle">����</param>
        /// <param name="submitEmpId">�ύ��id</param>
        /// <param name="stepNo">��ǰ������</param>
        /// <param name="type">0:��һ���ύ������1���Զ���ת��2:���</param>
        /// <param name="checkEmp">������ִ����</param>
        public void Submit(string functionNo, string recordValue, string recordTitle, int submitEmpId, int stepNo, int type, string checkEmp)
        {
            //�������״��ύ����ʱ���ȷ��͹�������Ϣ���ù����������µ�һ�����赱��
            //д�빤�����б�����
            vWFunctionData vfunctionData = new vWFunctionData();
            WFunctionBB functionBB = new WFunctionBB();
            HEemployeeBB userBB = new HEemployeeBB();
            WFunctionStepBB functionStepBB = new WFunctionStepBB();

            SqlTransaction trans = null;
            try
            {
                if (this.transaction == null)
                {
                    trans = this.connection.BeginTransaction("TransSubmit");
                    this.runListBB.Transaction = trans;
                    this.commBB.Transaction = trans;
                }

                //ȡ�øù�����������ǰ�������������������
                //ѭ�����뵽��������¼��
                DataSet ds = new DataSet();
                ds = functionStepBB.GetStepList(functionNo, stepNo);

                //ȡ�ù���������������Ϣ
                vfunctionData = functionBB.GetVModel(functionNo);

                int runNo;
                //�Զ���תʱ����ȡ�������������
                if (type == 1)
                {
                    runNo = this.runListBB.GetLastRunNo(functionNo, recordValue, 0);
                }
                else
                {
                    runNo = this.runListBB.GetNewRunNo(functionNo, recordValue);
                }

                if (ds.Tables[0].Rows.Count > 0)
                {
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        DataRow row = ds.Tables[0].Rows[i];
                        //ȡ��ԭʼ����������
                        string workTableNm;
                        string recordKeyField;
                        bool keyIsInt = false;
                        string condition = "";

                        workTableNm = vfunctionData.workTableNm;
                        recordKeyField = vfunctionData.recordKeyField;
                        keyIsInt = vfunctionData.keyIsInt;
                        condition = row["condition"].ToString();

                        //�жϵ�ǰ�������������������������Ƿ�����
                        string strSql = "select 1 from " + workTableNm;
                        if (keyIsInt)
                        {
                            strSql += " where " + recordKeyField + "=" + recordValue;
                        }
                        else
                        {
                            strSql += " where " + recordKeyField + "='" + recordValue + "'";
                        }
                        strSql += condition;
                        DataSet cds = new DataSet();
                        cds = this.commBB.Query(strSql);
                        if (cds.Tables[0].Rows.Count == 0)
                        {
                            continue;
                        }

                        WRunListData runListData = new WRunListData();

                        //д�빤������¼��
                        runListData.functionNo = functionNo;
                        runListData.runNo = runNo;
                        runListData.stepId = Convert.ToInt32(row["id"]);
                        runListData.isApplyChange = (type == 2 ? true : false);

                        if (checkEmp != "")
                        {
                            runListData.doEmp = checkEmp;
                        }
                        else
                        {
                            //ȡ��ÿһ����Ĺ�����ִ����
                            string useEmpId = "";

                            bool isUseEmpDo = false;
                            bool isUseEmpLeaderDo = false;
                            string doEmp;

                            if (row["isUseEmpDo"] != DBNull.Value)
                            {
                                isUseEmpDo = Convert.ToBoolean(row["isUseEmpDo"]);
                            }

                            if (row["isUseEmpLeaderDo"] != DBNull.Value)
                            {
                                isUseEmpLeaderDo = Convert.ToBoolean(row["isUseEmpLeaderDo"]);
                            }

                            doEmp = row["doEmp"].ToString();

                            //����ɼ�¼Я���߻��¼Я���ߵIJ��Ÿ�������������ȡ����¼Я����
                            if (isUseEmpDo || isUseEmpLeaderDo)
                            {
                                strSql = "select " + vfunctionData.useEmpField + " from " + workTableNm;
                                if (keyIsInt)
                                {
                                    strSql += " where " + recordKeyField + "=" + recordValue;
                                }
                                else
                                {
                                    strSql += " where " + recordKeyField + "='" + recordValue + "'";
                                }

                                DataSet dds = new DataSet();
                                dds = this.commBB.Query(strSql);
                                if (dds.Tables[0].Rows.Count == 0)
                                {
                                    throw new Exception("�������������ò���ȷ���޷�������");
                                }
                                useEmpId = Convert.ToString(dds.Tables[0].Rows[0][0]);
                            }

                            //����Ǽ�¼Я��������
                            if (isUseEmpDo)
                            {
                                runListData.doEmp += "p___" + useEmpId;
                            }
                            //����Ǽ�¼Я���ߵIJ��Ÿ���������
                            else if (isUseEmpLeaderDo)
                            {
                                //ȡ��ԭʼ���������˵IJ��Ÿ�����
                                DataSet dds = new DataSet();
                                dds = userBB.GetVList("empId=" + useEmpId);
                                if (dds.Tables[0].Rows.Count == 0)
                                {
                                    throw new Exception("��Ա�����쵼û�����ã��޷�������");
                                }

                                DataRow drow = dds.Tables[0].Rows[0];

                                //����н�ɫ���壬���ɾ��иý�ɫ�IJ��Ÿ����˽�������
                                if (doEmp != "")
                                {
                                    runListData.doEmp += doEmp.Replace("R_", "R_" + drow["nowDepartId"].ToString());
                                }
                                else
                                {
                                    runListData.doEmp += "p___" + drow["departLeader"].ToString();
                                }
                            }
                            //������ɫ����
                            else
                            {
                                runListData.doEmp += doEmp;
                            }
                        }

                        runListData.recordValue = recordValue;
                        runListData.recordTitle = recordTitle;
                        runListData.empId = submitEmpId;
                        runListData.creattime = DateTime.Now.ToString();
                        runListData.isRead = false;
                        runListData.isEnd = false;
                        runListData.workFlowState = WorkFlowState.WorkAuditing;

                        this.runListBB.AddRecord(runListData);
                    }
                    if (type == 0)
                    {
                        //����ԭʼ����״̬
                        this.SetWorkFlowState(functionNo, recordValue, WorkFlowState.WorkAuditing);
                    }
                }

                if (this.transaction == null) trans.Commit();
            }
            catch (Exception ex)
            {
                if (this.transaction == null) trans.Rollback("TransSubmit");
                throw ex;
            }
            finally
            {
                userBB.Dispose();
                functionBB.Dispose();
                functionStepBB.Dispose();
            }
        }
        /// <summary>
        /// ������Ϣ��
        /// </summary>
        /// <param name="functionNo">��Ϣ���</param>
        /// <param name="recordValue">����ֵ</param>
        /// <param name="recordTitle">����</param>
        /// <param name="useEmpId">������id</param>
        /// <param name="acceptEmpId">������id</param>
        public void Send(string functionNo, string recordValue, string recordTitle, int empId, int acceptEmpId)
        {
            //д����Ϣ���б�����
            MBusinessFunctionBB businessFunctionBB = new MBusinessFunctionBB();
            HEemployeeBB userBB = new HEemployeeBB();
            MBusinessData businessData = new MBusinessData();
            MBusinessFunctionData businessFunctionData = new MBusinessFunctionData();

            try
            {
                businessData.functionNo = functionNo;
                businessData.recordValue = recordValue;
                businessData.messageTitle = recordTitle;
                businessData.empId = empId;
                businessData.sendTime = DateTime.Now.ToString();
                businessData.isRead = false;

                //�ж���Ϣ��ִ����
                if (acceptEmpId != 0)
                {
                    businessData.acceptEmp = "p___" + acceptEmpId.ToString();
                }
                else
                {
                    businessFunctionData = businessFunctionBB.GetModel(functionNo);
                    string useEmpId = "";
                    if (businessFunctionData.isUseEmpAccept || businessFunctionData.isUseEmpLeaderAccept)
                    {
                        //ȡ��ԭʼ����������
                        string workTableNm;
                        string recordKeyField;
                        bool keyIsInt = false;
                        DataSet ds = new DataSet();

                        ds = businessFunctionBB.GetVList("functionNo='" + functionNo + "'");
                        if (ds.Tables[0].Rows.Count == 0)
                        {
                            throw new Exception("�Ҳ�����Ϣ��������¼���޷�������Ϣ��");
                        }
                        DataRow row = ds.Tables[0].Rows[0];

                        workTableNm = Convert.ToString(row["tableNm"]);
                        recordKeyField = Convert.ToString(row["recordKeyField"]);
                        if (row["keyIsInt"] != DBNull.Value)
                        {
                            keyIsInt = Convert.ToBoolean(row["keyIsInt"]);
                        }

                        string strSql = "select " + businessFunctionData.useEmpField + " from " + workTableNm;
                        if (keyIsInt)
                        {
                            strSql += " where " + recordKeyField + "=" + recordValue;
                        }
                        else
                        {
                            strSql += " where " + recordKeyField + "='" + recordValue + "'";
                        }

                        ds.Reset();
                        ds = this.commBB.Query(strSql);
                        if (ds.Tables[0].Rows.Count == 0)
                        {
                            throw new Exception("��Ϣ���������ò���ȷ���޷�������Ϣ��");
                        }
                        row = ds.Tables[0].Rows[0];
                        useEmpId = Convert.ToString(row[0]);
                    }

                    if (businessFunctionData.isUseEmpAccept)
                    {
                        businessData.acceptEmp = "p___" + useEmpId;
                    }
                    else if (businessFunctionData.isUseEmpLeaderAccept)
                    {
                        //ȡ��ԭʼ���������˵IJ��Ÿ�����
                        DataSet ds = new DataSet();
                        ds = userBB.GetList("empId=" + useEmpId);
                        if (ds.Tables[0].Rows.Count == 0)
                        {
                            throw new Exception("��Ա�����쵼û�����ã��޷�������Ϣ��");
                        }
                        DataRow row = ds.Tables[0].Rows[0];

                        //����н�ɫ���壬���ɾ��иý�ɫ�IJ��Ÿ����˽���
                        if (businessFunctionData.acceptEmp != "")
                        {
                            businessData.acceptEmp = businessFunctionData.acceptEmp.Replace("R_", "R_" + row["nowDepartId"].ToString());
                        }
                        else
                        {
                            businessData.acceptEmp = "p___" + row["departLeader"].ToString();
                        }
                    }
                    else
                    {
                        businessData.acceptEmp = businessFunctionData.acceptEmp;
                    }
                }

                this.businessBB.AddRecord(businessData);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                businessFunctionBB.Dispose();
                userBB.Dispose();
            }
        }