public void RecordResultGenTest() { string categoryID = "48BE753C-630D-42F4-A02D-D2B50818F817";//集团公司/管道板块/运输 RecordResultCollection data = GetMockData(); string masterEntityID = DEObjectOperations.InstanceWithoutPermissions.RecordResultGenerate(categoryID, data); DynamicEntity entity = DESchemaObjectAdapter.Instance.Load(masterEntityID) as DynamicEntity; //Assert.IsTrue(entity != null && entity.Fields.Any() && entity.OuterEntities.Any(), "生成实体及映射失败!"); Assert.IsTrue(entity != null && entity.Fields.Any(), "生成实体及映射失败!"); }
public RecordResultCollection GetData(string tCode) { //Saplocalhost.WebServiceConnectSAP srv = new Saplocalhost.WebServiceConnectSAP(); var srv = new Saplocalhost.WebServiceConnectSAPSoapClient(); DataTable table = srv.GetEntityDefine(tCode); RecordResultCollection resultList = new RecordResultCollection(); var parentRows = table.Select(); int sortNumber = 0; foreach (var item in parentRows) { sortNumber++; RecordResult result = new RecordResult(); result.SortNo = sortNumber; result.EntityName = Convert.ToString(item["实体名"]); result.EntityDesc = Convert.ToString(item["实体描述"]); result.DefaultValue = Convert.ToString(item["默认值"]); result.IsMasterTable = Convert.ToString(item["主子标识"]) == "主" ? true : false; result.FieldName = Convert.ToString(item["字段名"]); FieldTypeEnum type = new FieldTypeEnum(); switch (Convert.ToString(item["字段类型"]).ToLower()) { case "string": type = FieldTypeEnum.String; break; case "int": type = FieldTypeEnum.Int; break; case "bool": type = FieldTypeEnum.Bool; break; case "datetime": type = FieldTypeEnum.DateTime; break; case "decimal": type = FieldTypeEnum.Decimal; break; } result.FieldType = type; result.FieldDesc = Convert.ToString(item["字段描述"]); result.FieldLength = int.Parse(Convert.ToString(item["字段长度"])); resultList.Add(result); } return(resultList); }
/// <summary> /// 根据录屏结果生成实体及映射 /// </summary> /// <param name="categoryID">分类ID</param> /// <param name="recordCollection">录屏集合</param> public string RecordResultGenerate(string categoryID, RecordResultCollection recordCollection) { categoryID.CheckStringIsNullOrEmpty <ArgumentNullException>("categoryID"); recordCollection.NullCheck <ArgumentNullException>("录屏集合不能为空!"); string masterEntityID = string.Empty; #region 验证 //只验证主表,子表可以为空 recordCollection.Any().FalseThrow("没有找到信息项,请重新填写!"); //验证CodeName唯一性 recordCollection.Select(p => p.EntityName).Distinct().ForEach(p => DESchemaObjectAdapter.Instance.CheckCodeNameExist(categoryID, p).TrueThrow(string.Format("已存在同名[{0}]", p))); #endregion List <string> listFullName = recordCollection.Select(p => p.TempFullPath).Distinct().ToList(); //按长度倒序排序,确保从最子级节点开始添加实体 listFullName = listFullName.OrderByDescending(p => p.Split('/').Length).ToList(); using (TransactionScope scope = TransactionScopeFactory.Create()) { listFullName.ForEach(fullName => { //准备数据 var entityRecordList = recordCollection.Where(r => r.TempFullPath.Equals(fullName)); var entityResultColl = new RecordResultCollection(); entityResultColl.CopyFrom(entityRecordList); //实体入库 var childEntity = entityResultColl.BuildEntity(categoryID); DEObjectOperations.InstanceWithoutPermissions.DoOperation(SCObjectOperationMode.Add, childEntity, null); //为父实体指定“引用实体”属性值 if (fullName.Contains("/")) { string parentFullName = fullName.Substring(0, fullName.LastIndexOf("/")); string parentFieldName = fullName.Replace(parentFullName + "/", ""); recordCollection.First(pe => pe.TempFullPath.Equals(parentFullName) && pe.FieldName.Equals(parentFieldName)).ReferenceEntityCodeName = childEntity.CodeName; } //映射入库 EntityMapping childMapping = BuildEntityMapping(childEntity); DEObjectOperations.InstanceWithoutPermissions.AddEntityMapping(childMapping); //最后一个被添加的实体为主实体 masterEntityID = childEntity.ID; }); scope.Complete(); #region 以前方法,先注释掉 /////////////////////////////////////////////////////////////////////////////////////// //#region 实体定义 ////先入子表 //recordCollection.Where(p => !p.IsMasterTable).GroupBy(p => p.EntityName).ToList().ForEach(p => //{ // RecordResultCollection child = new RecordResultCollection(); // child.CopyFrom(p.ToList()); // var childEntity = child.BuildEntity(categoryID); // DEObjectOperations.InstanceWithoutPermissions.DoOperation(SCObjectOperationMode.Add, childEntity, null); // //添加子类引用 // recordCollection.Add(new Dynamics.Objects.RecordResult() // { // EntityName = recordCollection.FirstOrDefault(m => m.IsMasterTable).EntityName, // EntityDesc = recordCollection.FirstOrDefault(m => m.IsMasterTable).EntityName, // IsMasterTable = true, // FieldName = p.Key, // FieldType = FieldTypeEnum.Collection, // ReferenceEntityCodeName = childEntity.CodeName, // FieldDesc = p.Key, // FieldLength = 99999, // SortNo = recordCollection.Count(m => m.IsMasterTable) + 1, // IsStruct = p.All(f => f.EntityDesc == "STRUCTURE") // }); //}); //// 主表 //RecordResultCollection master = new RecordResultCollection(); //master.CopyFrom(recordCollection.Where(p => p.IsMasterTable).ToList()); //var masterEntity = master.BuildEntity(categoryID); //DEObjectOperations.InstanceWithoutPermissions.DoOperation(SCObjectOperationMode.Add, masterEntity, null); //#endregion //// 主表映射 //EntityMapping masterMapping = BuildEntityMapping(masterEntity); //DEObjectOperations.InstanceWithoutPermissions.AddEntityMapping(masterMapping); ////子表映射 //masterEntity.Fields.Where(p => p.FieldType == FieldTypeEnum.Collection).ForEach(f => //{ // DynamicEntity childEntity = DEDynamicEntityAdapter.Instance.LoadByCodeName(f.ReferenceEntityCodeName) as DynamicEntity; // EntityMapping childMapping = BuildEntityMapping(childEntity); // DEObjectOperations.InstanceWithoutPermissions.AddEntityMapping(childMapping); //}); //masterEntityID = masterEntity.ID; //scope.Complete(); #endregion } return(masterEntityID); }
/// <summary> /// 生成模拟数据 /// </summary> /// <returns></returns> private RecordResultCollection GetMockData() { RecordResultCollection result = new RecordResultCollection(); //主表 result.Add(new Dynamics.Objects.RecordResult() { EntityName = "ZR521", EntityDesc = "销售订单", IsMasterTable = true, FieldName = "ZR5_SS02-KUNNR", FieldType = FieldTypeEnum.String, FieldDesc = "客户", FieldLength = 255, SortNo = 1 }); result.Add(new Dynamics.Objects.RecordResult() { EntityName = "ZR521", EntityDesc = "销售订单", IsMasterTable = true, FieldName = "ZR5_SS02-OIC_MOT", FieldType = FieldTypeEnum.String, FieldDesc = "运输方式", FieldLength = 255, SortNo = 2 }); result.Add(new Dynamics.Objects.RecordResult() { EntityName = "ZR521", EntityDesc = "销售订单", IsMasterTable = true, FieldName = "ZR5_SS02-BUKRS", FieldType = FieldTypeEnum.String, FieldDesc = "公司代码", FieldLength = 255, SortNo = 3 }); result.Add(new Dynamics.Objects.RecordResult() { EntityName = "ZR521", EntityDesc = "销售订单", IsMasterTable = true, FieldName = "ZR5_SS02-VKORG", FieldType = FieldTypeEnum.String, FieldDesc = "销售主题", FieldLength = 255, SortNo = 4 }); result.Add(new Dynamics.Objects.RecordResult() { EntityName = "ZR521", EntityDesc = "销售订单", IsMasterTable = true, FieldName = "ZR5_SS02-CZDAT", FieldType = FieldTypeEnum.String, FieldDesc = "单据日期", FieldLength = 255, SortNo = 5 }); result.Add(new Dynamics.Objects.RecordResult() { EntityName = "ZR521", EntityDesc = "销售订单", IsMasterTable = true, FieldName = "ZR5_SS02-VTWEG", FieldType = FieldTypeEnum.String, FieldDesc = "销售方式", FieldLength = 255, SortNo = 6 }); result.Add(new Dynamics.Objects.RecordResult() { EntityName = "ZR521", EntityDesc = "销售订单", IsMasterTable = true, FieldName = "ZR5_SS02-VKBUR", FieldType = FieldTypeEnum.String, FieldDesc = "销售部门", FieldLength = 255, SortNo = 7 }); result.Add(new Dynamics.Objects.RecordResult() { EntityName = "ZR521", EntityDesc = "销售订单", IsMasterTable = true, FieldName = "ZR5_SS02-YSHHS", FieldType = FieldTypeEnum.String, FieldDesc = "提货方式", FieldLength = 255, SortNo = 8 }); result.Add(new Dynamics.Objects.RecordResult() { EntityName = "ZR521", EntityDesc = "销售订单", IsMasterTable = true, FieldName = "ZR5_SS02-NAME", FieldType = FieldTypeEnum.String, FieldDesc = "" }); result.Add(new Dynamics.Objects.RecordResult() { EntityName = "ZR521", EntityDesc = "销售订单", IsMasterTable = true, FieldName = "ZR5_SS02-RID_XJXS", FieldType = FieldTypeEnum.String, FieldDesc = "" }); //子表 result.Add(new Dynamics.Objects.RecordResult() { EntityName = "ZR521_Items1", EntityDesc = "销售订单详细", IsMasterTable = false, FieldName = "ZR5_SS02P-MATNR", FieldType = FieldTypeEnum.String, FieldDesc = "油品代码", FieldLength = 255, SortNo = 9 }); result.Add(new Dynamics.Objects.RecordResult() { EntityName = "ZR521_Items1", EntityDesc = "销售订单详细", IsMasterTable = false, FieldName = "ZR5_SS02P-KWMENG", FieldType = FieldTypeEnum.String, FieldDesc = "数量", FieldLength = 255, SortNo = 10 }); result.Add(new Dynamics.Objects.RecordResult() { EntityName = "ZR521_Items1", EntityDesc = "销售订单详细", IsMasterTable = false, FieldName = "ZR5_SS02P-WERKS", FieldType = FieldTypeEnum.String, FieldDesc = "业务单元代码", FieldLength = 255, SortNo = 11 }); result.Add(new Dynamics.Objects.RecordResult() { EntityName = "ZR521_Items1", EntityDesc = "销售订单详细", IsMasterTable = false, FieldName = "ZR5_SS02P-LGORT", FieldType = FieldTypeEnum.String, FieldDesc = "库存地点代码", FieldLength = 255, SortNo = 12 }); return(result); }
protected void btn_getEntityDefine_Click(object sender, EventArgs e) { center_panel.Visible = true; RecordResultCollection rrc = GetData(txt_Code.Text.Trim()); List <string> cou = rrc.Select(p => p.EntityName).Distinct().ToList(); foreach (string entityName in cou) { ClientGrid gr = new ClientGrid(); gr.EnableViewState = false; gr.ID = entityName; gr.AllowPaging = false; gr.ShowEditBar = true; gr.AutoPaging = false; gr.ShowCheckBoxColumn = true; gr.ID = Guid.NewGuid().ToString(); controlIDs.Add(gr.ID); var recordCollention = rrc.Where(p => p.EntityName.Equals(entityName)); ClientGridColumn cgc = new ClientGridColumn(); //checkbox cgc.SelectColumn = true; cgc.ShowSelectAll = true; cgc.HeaderStyle = "{width:'30px',textAlign:'left',fontWeight:'bold'}"; cgc.ItemStyle = "{width:'30px',textAlign:'left'}"; gr.Columns.Add(cgc); ClientGridColumn cgIndex = new ClientGridColumn(); cgIndex.DataField = "rowIndex"; cgIndex.HeaderText = "序号"; cgIndex.HeaderStyle = "{width:'30px',textAlign:'center'}"; cgIndex.ItemStyle = "{width:'30px',textAlign:'center'}"; cgIndex.DataType = DataType.Integer; gr.Columns.Add(cgIndex); ClientGridColumn cgFieldName = new ClientGridColumn(); cgFieldName.DataField = "FieldName"; cgFieldName.HeaderText = "字段名"; cgFieldName.HeaderStyle = "{textAlign:'left'}"; cgFieldName.ItemStyle = "{textAlign:'left'}"; cgFieldName.DataType = DataType.String; cgFieldName.EditTemplate.EditMode = ClientGridColumnEditMode.TextBox; gr.Columns.Add(cgFieldName); ClientGridColumn cgFieldDesc = new ClientGridColumn(); cgFieldDesc.DataField = "FieldDesc"; cgFieldDesc.HeaderText = "字段描述"; cgFieldDesc.HeaderStyle = "{textAlign:'left'}"; cgFieldDesc.ItemStyle = "{textAlign:'left'}"; cgFieldDesc.DataType = DataType.String; cgFieldDesc.EditTemplate.EditMode = ClientGridColumnEditMode.TextBox; gr.Columns.Add(cgFieldDesc); ClientGridColumn cgFieldTypeName = new ClientGridColumn(); cgFieldTypeName.DataField = "FieldType"; cgFieldTypeName.HeaderText = "字段类型"; cgFieldTypeName.HeaderStyle = "{textAlign:'left'}"; cgFieldTypeName.ItemStyle = "{textAlign:'left'}"; cgFieldTypeName.DataType = DataType.String; cgFieldTypeName.EditTemplate.EditMode = ClientGridColumnEditMode.TextBox; gr.Columns.Add(cgFieldTypeName); ClientGridColumn cgFieldLength = new ClientGridColumn(); cgFieldLength.DataField = "FieldLength"; cgFieldLength.HeaderText = "字段长度"; cgFieldLength.HeaderStyle = "{textAlign:'left'}"; cgFieldLength.ItemStyle = "{textAlign:'left'}"; cgFieldLength.DataType = DataType.String; cgFieldLength.EditTemplate.EditMode = ClientGridColumnEditMode.TextBox; gr.Columns.Add(cgFieldLength); ClientGridColumn cgFieldDefaultValue = new ClientGridColumn(); cgFieldDefaultValue.DataField = "DefaultValue"; cgFieldDefaultValue.HeaderText = "字段默认值"; cgFieldDefaultValue.HeaderStyle = "{textAlign:'left'}"; cgFieldDefaultValue.ItemStyle = "{textAlign:'left'}"; cgFieldDefaultValue.DataType = DataType.String; cgFieldDefaultValue.EditTemplate.EditMode = ClientGridColumnEditMode.TextBox; gr.Columns.Add(cgFieldDefaultValue); ClientGridColumn cgOuterFieldName = new ClientGridColumn(); cgOuterFieldName.DataField = "FieldName"; cgOuterFieldName.HeaderText = "关联字段/结构"; cgOuterFieldName.HeaderStyle = "{textAlign:'left'}"; cgOuterFieldName.ItemStyle = "{textAlign:'left'}"; cgOuterFieldName.DataType = DataType.String; gr.Columns.Add(cgOuterFieldName); gr.InitialData = recordCollention.ToList(); DataBindingItem dbItem = new DataBindingItem(); dbItem.ControlID = entityName; dbItem.DataPropertyName = "EntityFieldMappingCollection"; dbItem.ControlPropertyName = "InitialData"; dbItem.Direction = BindingDirection.Both; Panel pa = new Panel(); Label lb = new Label(); lb.Text = string.Format(@"<div class='dialogTitle'> <div class='lefttitle' style='text-align: left;'> <img src='../Images/icon_01.gif'/> 编辑{0}主实体字段及关联</div> </div>", entityName); pa.Controls.Add(lb); Panel pn = new Panel(); pn.ID = "Panel_" + entityName; pn.CssClass = "dialogContent"; pn.Controls.Add(gr); center_panel.Controls.Add(pa); center_panel.Controls.Add(pn); } ViewState["controlids"] = controlIDs; EntityMapping mapping = new EntityMapping(); }