Пример #1
0
        public override bool SyncConfigFromDataSet(DataSet ds, int targetFlowClassId, bool isCreateNew)
        {
            //isCreateNew是否是全新创建流程,创建流程版本不算全新创建,包括配置更新也不算。
            DbHelper _helper = new DbHelper("CPCommonIns", CPAppContext.CurDbType());

            bool b = true;


            #region 写入数据
            SqlCommand cmd = new SqlCommand(@"SELECT * FROM Flow_Template WHERE 1=2; 
                                    SELECT * FROM Flow_TemplatePhase WHERE 1=2;
                                    SELECT * FROM Flow_TemplatePhaseForm WHERE 1=2;
                                    SELECT * FROM Flow_TemplatePhaseLink WHERE 1=2;
                                    SELECT * FROM Flow_TemplatePhaseRule WHERE 1=2;
                                    SELECT * FROM Flow_TemplatePhaseRuleHandle WHERE 1=2",
                                            _helper.GetConnection() as SqlConnection);
            SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(cmd);
            // SqlCommandBuilder builder = new SqlCommandBuilder(da);
            //AddWithKey: 自动填充数据表结构,如:主键和限制
            //预设值Add,不填充结构
            da.MissingSchemaAction = MissingSchemaAction.AddWithKey;//Default Value is: Add
            DataSet dsStruct = new DataSet();
            da.Fill(dsStruct);
            dsStruct.Tables[0].TableName = "Flow_Template";
            dsStruct.Tables[1].TableName = "Flow_TemplatePhase";
            dsStruct.Tables[2].TableName = "Flow_TemplatePhaseForm";
            dsStruct.Tables[3].TableName = "Flow_TemplatePhaseLink";
            dsStruct.Tables[4].TableName = "Flow_TemplatePhaseRule";
            dsStruct.Tables[5].TableName = "Flow_TemplatePhaseRuleHandle";
            #region Flow_Template

            Dictionary <int, int> oldNewFlowVerId = new Dictionary <int, int>();
            foreach (DataRow dr in ds.Tables["Flow_Template"].Rows)
            {
                if (isCreateNew)
                {
                    dr["FlowName"] = dr["FlowName"].ToString() + "_副本";
                    string tmpSql    = "SELECT ISNULL(MAX(flowid),1) FROM Flow_Template";
                    int    newFlowId = int.Parse(_helper.ExecuteScalar(tmpSql).ToString());
                    dr["FlowId"] = newFlowId;
                }
                dr["FlowClassId"] = targetFlowClassId;
                string insertSql = CPAppContext.GetInsertSql("Flow_Template", dsStruct.Tables["Flow_Template"].Columns, dr);
                insertSql += ";select SCOPE_IDENTITY() as Id;";
                SqlCommand cmdInsert = new SqlCommand(insertSql, _helper.GetConnection() as SqlConnection);
                foreach (DataColumn dc in dsStruct.Tables["Flow_Template"].Columns)
                {
                    if (dc.AutoIncrement)
                    {
                        continue;
                    }
                    if (dr.Table.Columns.Contains(dc.ColumnName))
                    {
                        cmdInsert.Parameters.AddWithValue("@" + dc.ColumnName, dr[dc.ColumnName]);
                    }
                    else
                    {
                        cmdInsert.Parameters.AddWithValue("@" + dc.ColumnName, DBNull.Value);
                    }
                }
                int newId = int.Parse(_helper.ExecuteScalar(cmdInsert).ToString());
                oldNewFlowVerId.Add(int.Parse(dr["FlowVerId"].ToString()), newId);
            }

            #endregion

            #region Flow_TemplatePhase
            Dictionary <int, int> oldNewPhaseId = new Dictionary <int, int>();
            if (ds.Tables["Flow_TemplatePhase"] != null)
            {
                foreach (DataRow dr in ds.Tables["Flow_TemplatePhase"].Rows)
                {
                    dr["FlowVerId"] = oldNewFlowVerId[int.Parse(dr["FlowVerId"].ToString())];
                    string insertSql = CPAppContext.GetInsertSql("Flow_TemplatePhase", dsStruct.Tables["Flow_TemplatePhase"].Columns, dr);
                    insertSql += ";select SCOPE_IDENTITY() as Id;";
                    SqlCommand cmdInsert = new SqlCommand(insertSql, _helper.GetConnection() as SqlConnection);
                    foreach (DataColumn dc in dsStruct.Tables["Flow_TemplatePhase"].Columns)
                    {
                        if (dc.AutoIncrement)
                        {
                            continue;
                        }
                        if (dr.Table.Columns.Contains(dc.ColumnName))
                        {
                            cmdInsert.Parameters.AddWithValue("@" + dc.ColumnName, dr[dc.ColumnName]);
                        }
                        else
                        {
                            cmdInsert.Parameters.AddWithValue("@" + dc.ColumnName, DBNull.Value);
                        }
                    }
                    int newId = int.Parse(_helper.ExecuteScalar(cmdInsert).ToString());
                    oldNewPhaseId.Add(int.Parse(dr["PhaseId"].ToString()), newId);
                }
            }
            #endregion

            #region Flow_TemplatePhaseForm
            if (ds.Tables["Flow_TemplatePhaseForm"] != null)
            {
                foreach (DataRow dr in ds.Tables["Flow_TemplatePhaseForm"].Rows)
                {
                    dr["FlowVerId"] = oldNewFlowVerId[int.Parse(dr["FlowVerId"].ToString())];
                    dr["PhaseId"]   = oldNewPhaseId[int.Parse(dr["PhaseId"].ToString())];
                    string insertSql = CPAppContext.GetInsertSql("Flow_TemplatePhaseForm", dsStruct.Tables["Flow_TemplatePhaseForm"].Columns, dr);

                    SqlCommand cmdInsert = new SqlCommand(insertSql, _helper.GetConnection() as SqlConnection);
                    foreach (DataColumn dc in dsStruct.Tables["Flow_TemplatePhaseForm"].Columns)
                    {
                        if (dc.AutoIncrement)
                        {
                            continue;
                        }
                        if (dr.Table.Columns.Contains(dc.ColumnName))
                        {
                            cmdInsert.Parameters.AddWithValue("@" + dc.ColumnName, dr[dc.ColumnName]);
                        }
                        else
                        {
                            cmdInsert.Parameters.AddWithValue("@" + dc.ColumnName, DBNull.Value);
                        }
                    }
                    _helper.ExecuteNonQuery(cmdInsert);
                }
            }
            #endregion

            #region Flow_TemplatePhaseLink
            if (ds.Tables["Flow_TemplatePhaseLink"] != null)
            {
                foreach (DataRow dr in ds.Tables["Flow_TemplatePhaseLink"].Rows)
                {
                    dr["FlowVerId"]    = oldNewFlowVerId[int.Parse(dr["FlowVerId"].ToString())];
                    dr["StartPhaseId"] = oldNewPhaseId[int.Parse(dr["StartPhaseId"].ToString())];
                    dr["EndPhaseId"]   = oldNewPhaseId[int.Parse(dr["EndPhaseId"].ToString())];

                    string insertSql = CPAppContext.GetInsertSql("Flow_TemplatePhaseLink", dsStruct.Tables["Flow_TemplatePhaseLink"].Columns, dr);

                    SqlCommand cmdInsert = new SqlCommand(insertSql, _helper.GetConnection() as SqlConnection);
                    foreach (DataColumn dc in dsStruct.Tables["Flow_TemplatePhaseLink"].Columns)
                    {
                        if (dc.AutoIncrement)
                        {
                            continue;
                        }
                        if (dr.Table.Columns.Contains(dc.ColumnName))
                        {
                            cmdInsert.Parameters.AddWithValue("@" + dc.ColumnName, dr[dc.ColumnName]);
                        }
                        else
                        {
                            cmdInsert.Parameters.AddWithValue("@" + dc.ColumnName, DBNull.Value);
                        }
                    }
                    _helper.ExecuteNonQuery(cmdInsert);
                }
            }
            #endregion

            #region Flow_TemplatePhaseRule
            Dictionary <int, int> oldNewRuleId = new Dictionary <int, int>();
            if (ds.Tables["Flow_TemplatePhaseRule"] != null)
            {
                foreach (DataRow dr in ds.Tables["Flow_TemplatePhaseRule"].Rows)
                {
                    dr["FlowVerId"] = oldNewFlowVerId[int.Parse(dr["FlowVerId"].ToString())];
                    dr["PhaseId"]   = oldNewPhaseId[int.Parse(dr["PhaseId"].ToString())];
                    string insertSql = CPAppContext.GetInsertSql("Flow_TemplatePhaseRule", dsStruct.Tables["Flow_TemplatePhaseRule"].Columns, dr);
                    insertSql += ";select SCOPE_IDENTITY() as Id;";
                    SqlCommand cmdInsert = new SqlCommand(insertSql, _helper.GetConnection() as SqlConnection);
                    foreach (DataColumn dc in dsStruct.Tables["Flow_TemplatePhaseRule"].Columns)
                    {
                        if (dc.AutoIncrement)
                        {
                            continue;
                        }
                        if (dr.Table.Columns.Contains(dc.ColumnName))
                        {
                            cmdInsert.Parameters.AddWithValue("@" + dc.ColumnName, dr[dc.ColumnName]);
                        }
                        else
                        {
                            cmdInsert.Parameters.AddWithValue("@" + dc.ColumnName, DBNull.Value);
                        }
                    }
                    int newId = int.Parse(_helper.ExecuteScalar(cmdInsert).ToString());
                    oldNewRuleId.Add(int.Parse(dr["RuleId"].ToString()), newId);
                }
            }
            #endregion

            #region Flow_TemplatePhaseRuleHandle
            if (ds.Tables["Flow_TemplatePhaseRuleHandle"] != null)
            {
                foreach (DataRow dr in ds.Tables["Flow_TemplatePhaseRuleHandle"].Rows)
                {
                    dr["FlowVerId"] = oldNewFlowVerId[int.Parse(dr["FlowVerId"].ToString())];
                    dr["PhaseId"]   = oldNewPhaseId[int.Parse(dr["PhaseId"].ToString())];
                    dr["RuleId"]    = oldNewRuleId[int.Parse(dr["RuleId"].ToString())];

                    string insertSql = CPAppContext.GetInsertSql("Flow_TemplatePhaseRuleHandle", dsStruct.Tables["Flow_TemplatePhaseRuleHandle"].Columns, dr);

                    SqlCommand cmdInsert = new SqlCommand(insertSql, _helper.GetConnection() as SqlConnection);
                    foreach (DataColumn dc in dsStruct.Tables["Flow_TemplatePhaseRuleHandle"].Columns)
                    {
                        if (dc.AutoIncrement)
                        {
                            continue;
                        }
                        if (dr.Table.Columns.Contains(dc.ColumnName))
                        {
                            cmdInsert.Parameters.AddWithValue("@" + dc.ColumnName, dr[dc.ColumnName]);
                        }
                        else
                        {
                            cmdInsert.Parameters.AddWithValue("@" + dc.ColumnName, DBNull.Value);
                        }
                    }
                    _helper.ExecuteNonQuery(cmdInsert);
                }
            }
            #endregion

            #endregion
            return(b);
        }