/// <summary> /// 生成数据集 /// </summary> /// <param name="ionicCompile"></param> /// <param name="screenDef"></param> /// <param name="doc"></param> /// <returns></returns> public static Dictionary <string, MetaDataDataSet> RegisterDataSets(IonicCompile ionicCompile, ScreenDefinition screenDef, ProjectDocument doc) { Dictionary <string, MetaDataDataSet> DataSetData = new Dictionary <string, MetaDataDataSet>(); var items = screenDef.Children.Where(a => a.MemberType == EMemberType.DataSet || a.MemberType == EMemberType.Objects).ToList(); foreach (var item in items) { if (item.MemberType == EMemberType.DataSet) { #region 远程数据集(有实体) DataSet dats = item as DataSet; var entityItem = ionicCompile.ProjectItems.Where(a => a.Value.DocumentType == GlobalIds.DocumentType.Entity && a.Key == dats.EntityId).FirstOrDefault(); if (entityItem.Value != null) { MetaDataDataSet metaDataSet = BuildMetaDataDataSet(entityItem.Value.Name, item); if (metaDataSet != null) { DataSetData.Add(item.Name, metaDataSet); } } #endregion } else { Objects objs = item as Objects; var entityItem = ionicCompile.ProjectItems.Where(a => a.Value.DocumentType == GlobalIds.DocumentType.Entity && a.Key == objs.EntityId).FirstOrDefault(); if (entityItem.Value != null) { #region 本地对象(有实体) MetaDataDataSet metaDataSet = BuildMetaDataDataSet(entityItem.Value.Name, item); if (metaDataSet != null) { DataSetData.Add(item.Name, metaDataSet); } #endregion } else { #region 本地对象(无实体) MetaDataDataSet metaDataSet = BuildMetaDataDataSet("", item); if (metaDataSet != null) { DataSetData.Add(item.Name, metaDataSet); } #endregion } } } return(DataSetData); }
private static MetaDataDataSet BuildMetaDataDataSet(string entityName, MemberBase memberBase) { string optionStr = string.Empty, dataSetType = string.Empty; StringBuilder options = new StringBuilder(); dynamic dats = memberBase as DataSet; if (memberBase.MemberType == EMemberType.DataSet) { dats = memberBase as DataSet; if (dats.EntityId > 0) { if (dats.IsCollection) { dataSetType = "RemoteDataSet"; } else { dataSetType = "RemoteDataObject"; } } else { if (dats.IsCollection) { dataSetType = "LocalDataSet"; } else { dataSetType = "LocalDataObject"; } } options.AppendLine("refreshOnLoaded:true,"); } else { dats = memberBase as Objects; if (dats.EntityId > 0) { if (dats.IsCollection) { dataSetType = "RemoteDataSet"; } else { dataSetType = "RemoteDataObject"; } } else { if (dats.IsCollection) { dataSetType = "LocalDataSet"; } else { dataSetType = "LocalDataObject"; } } } #region 过滤条件 string filters = GetFilterContent(dats); if (!string.IsNullOrEmpty(filters)) { options.AppendLine($"where:{filters},"); } #endregion #region 数据集中的属性,方法,事件,选中项中的数据成员/方法/展开成员 StringBuilder expand = new StringBuilder(); List <MetaDataProperty> listProperty = new List <MetaDataProperty>(); List <MetaDataMethod> listMethod = new List <MetaDataMethod>(); List <MetaDataMethod> listEvent = new List <MetaDataMethod>(); List <MetaDataProperty> listSelectedItemMember = new List <MetaDataProperty>(); List <MetaDataMethod> listSelectedItemMethod = new List <MetaDataMethod>(); foreach (var child in dats.Children) { if (child.MemberType == EMemberType.Property) { MetaDataProperty propertyMember = GetPropertyContent(child); listProperty.Add(propertyMember); } else if (child.MemberType == EMemberType.Method) { MetaDataMethod methodMember = GetMethodContent(child); listMethod.Add(methodMember); } else if (child.MemberType == EMemberType.Events) { foreach (var evt in child.Children) { MetaDataMethod eventMember = GetEventContent(evt); if (eventMember != null) { listEvent.Add(eventMember); } } } else if (child.MemberType == EMemberType.SelectedItem) { foreach (var item in child.Children) { if (item.MemberType == EMemberType.DataMember) { MetaDataProperty propertyMember = GetDataMemberContent(item); listSelectedItemMember.Add(propertyMember); } else if (item.MemberType == EMemberType.Method) { MetaDataMethod methodMember = GetMethodContent(item); listSelectedItemMethod.Add(methodMember); } else if (item.MemberType == EMemberType.NavigateMember) { GetExpandContent(item, expand, ""); } } } else if (child.MemberType == EMemberType.QueryParameters) { StringBuilder queryParas = new StringBuilder(); string parasStr = GetParameterContent(child); if (!string.IsNullOrEmpty(parasStr)) { parasStr = parasStr.Substring(0, parasStr.Length - 3); } queryParas.AppendLine("parameters:{"); queryParas.AppendLine(parasStr); queryParas.AppendLine("},"); options.Append(queryParas); } } if (!string.IsNullOrEmpty(expand.ToString())) { string expandStr = expand.ToString().Substring(0, expand.ToString().Length - 1); options.AppendLine($"orderBy:[{expandStr.ToString()}],"); } #endregion #region 排序 StringBuilder orderByStr = new StringBuilder(); foreach (var sort in dats.Sorts) { string sortStr = string.Format("{0} {1}", sort.Name, sort.Direction == 0 ? "asc" : "desc"); if (orderByStr.ToString().Length == 0) { orderByStr.Append("\"" + sortStr + "\""); } else { orderByStr.Append(",\"" + sortStr + "\""); } } if (!string.IsNullOrEmpty(orderByStr.ToString())) { options.AppendLine($"expand:[{orderByStr.ToString()}],"); } #endregion if (!string.IsNullOrEmpty(options.ToString())) { optionStr = options.ToString().Substring(0, options.ToString().Length - 3); } var DataSetMember = new MetaDataDataSet { Type = dataSetType, Name = dats.Name, Title = dats.Title, EntityName = entityName, Options = optionStr, DataPropertys = listProperty, DataMethods = listMethod, DataEvents = listEvent, SelectedItemMembers = listSelectedItemMember, SelectedItemMethods = listSelectedItemMethod }; return(DataSetMember); }