Example #1
0
        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);
        }
Example #3
0
        /// <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);
        }
Example #4
0
        /// <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();
        }