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); }