//翻译DataTable中的枚举 private void TransferEnum(DataTable dt, S_R_DataSet dataSet) { //if (dtFields == null) // return; UIFO uiFO = new UIFO(); foreach (var field in dataSet.S_R_Field) { string code = field.Code; string enumKey = field.EnumKey; if (string.IsNullOrEmpty(enumKey)) { continue; } //uiFO.TransferEnum(dt, code, dataSet.ConnName, dataSet.TableNames.Split(',')[0], enumKey); uiFO.TransferEnum(dt, dataSet.ConnName, dataSet.TableNames.Split(',')[0], code, enumKey); } }
public JsonResult Clone(string defID) { var def = entities.Set <S_R_Define>().SingleOrDefault(c => c.ID == defID); var newDef = new S_R_Define(); FormulaHelper.UpdateModel(newDef, def); newDef.ID = FormulaHelper.CreateGuid(); entities.Set <S_R_Define>().Add(newDef); foreach (var dataset in def.S_R_DataSet.ToList()) { var newDataSet = new S_R_DataSet(); FormulaHelper.UpdateModel(newDataSet, dataset); newDataSet.ID = FormulaHelper.CreateGuid(); newDataSet.DefineID = newDef.ID; entities.Set <S_R_DataSet>().Add(newDataSet); foreach (var field in dataset.S_R_Field.ToList()) { var newField = new S_R_Field(); FormulaHelper.UpdateModel(newField, field); newField.ID = FormulaHelper.CreateGuid(); newField.DataSetID = newDataSet.ID; entities.Set <S_R_Field>().Add(newField); } } newDef.Code += "copy"; newDef.Name += "(副本)"; newDef.ModifyTime = null; newDef.ModifyUserID = ""; newDef.ModifyUserName = ""; var user = FormulaHelper.GetUserInfo(); newDef.CreateUserID = user.UserID; newDef.CreateUserName = user.UserName; newDef.CreateTime = DateTime.Now; entities.SaveChanges(); return(Json("")); }
private XmlNode GetDataSet(string reportCode, S_R_DataSet dataSet) { StringBuilder sbCommendText = new StringBuilder(); StringBuilder sbData = new StringBuilder(); SQLHelper sqlHelper = SQLHelper.CreateSqlHelper(dataSet.ConnName); //去掉没被替换部分 Regex reg = new Regex("\\{[0-9a-zA-Z_\\.]*\\}"); string sql = reg.Replace(dataSet.Sql, (Match m) => { return(""); }); DataTable dt = sqlHelper.ExecuteDataTable(sql, 0, 10, CommandType.Text); TransferEnum(dt, dataSet); List <Dictionary <string, string> > dicFieldList = new List <Dictionary <string, string> >(); //if (fieldList != null) //{ foreach (var field in dataSet.S_R_Field) { Dictionary <string, string> dic = new Dictionary <string, string>(); dic.Add("Code", field.Code); dic.Add("Name", field.Name); dic.Add("Type", field.Type); dicFieldList.Add(dic); } //} //else //{ // foreach (DataColumn col in dt.Columns) // { // Dictionary<string, string> dic = new Dictionary<string, string>(); // dic.Add("Code", col.ColumnName); // dic.Add("Name", col.ColumnName); // dic.Add("Type", col.DataType.FullName); // dicFieldList.Add(dic); // } //} //xml数据格式 string fieldFormat = ""; foreach (var dic in dicFieldList) { string reportFieldType = "String"; string fieldType = dic["Type"].Replace("System.", ""); if (fieldType.StartsWith("Int")) { reportFieldType = "Integer"; } else if (fieldType == "Double") { reportFieldType = "Decimal"; } fieldFormat += string.Format("@{0}({1}),", dic["Code"], reportFieldType); } fieldFormat = fieldFormat.Trim(','); foreach (DataRow row in dt.Rows) { sbData.Append("<Row"); foreach (DataColumn col in dt.Columns) { sbData.AppendFormat(" {0}=\"{1}\"", col.ColumnName, row[col].ToString().Replace('\"', '\'')); } sbData.Append("></Row>"); } sbCommendText.Append("<Query>\n"); sbCommendText.Append("<ElementPath>Root/Row{" + fieldFormat + "}</ElementPath>"); sbCommendText.Append("<XmlData>"); sbCommendText.Append("<Root>"); sbCommendText.Append(sbData.ToString()); sbCommendText.Append("</Root>"); sbCommendText.Append("</XmlData>"); sbCommendText.Append("</Query>"); string path = HttpContext.Server.MapPath("/") + "AutoReport/Tmpl/dataSet.xml"; XmlDocument sourceDoc = new XmlDocument(); sourceDoc.Load(path); //数据源名称 var nodeDataSourceName = sourceDoc.GetElementsByTagName("DataSourceName")[0]; nodeDataSourceName.InnerXml = reportCode; //数据集 var nodeDataSet = sourceDoc.GetElementsByTagName("DataSet")[0]; nodeDataSet.Attributes["Name"].Value = reportCode; //查询语句 var nodeCommentText = sourceDoc.GetElementsByTagName("CommandText")[0]; nodeCommentText.InnerXml = HttpContext.Server.HtmlEncode(sbCommendText.ToString()); //设置字段集 var list = sourceDoc.GetElementsByTagName("Fields"); var fields = list[0]; var node = fields.FirstChild; fields.RemoveAll(); foreach (var dic in dicFieldList) { var newNode = node.Clone(); newNode.Attributes["Name"].Value = dic["Name"]; newNode.FirstChild.InnerXml = dic["Code"]; newNode.LastChild.InnerXml = dic["Type"]; fields.AppendChild(newNode); } return(sourceDoc.GetElementsByTagName("DataSet")[0].Clone()); }