/// <summary> /// 查找逻辑: /// 先找元数据中的 AutomationPropertyKey /// 如果没有,再尝试使用 Title 属性。 /// 如果没有,再尝试使用 "Name" 属性。 /// </summary> /// <param name="evm"></param> /// <returns></returns> public static string TryGetPrimayDisplayProperty(this EntityViewMeta evm) { var autoProperty = TryGetAutomationNameBinding(evm); if (autoProperty != null) { return(autoProperty); } var title = evm.TitleProperty; if (title != null) { return(title.Name); } var nameProperty = evm.Property("Name"); if (nameProperty != null) { return(nameProperty.Name); } return(null); }
private EntityPropertyViewMeta CreateEntityPropertyViewMeta(IManagedProperty mp, EntityViewMeta evm) { var item = evm.CreatePropertyViewMeta(); item.Owner = evm; item.PropertyMeta = evm.EntityMeta.Property(mp); //如果这个托管属性有对应的 CLR 属性,并且这个 CLR 属性上标记了 Label 标签,则设置元数据的 Label 属性。 var runtimeProperty = item.PropertyMeta.CLRProperty; if (runtimeProperty != null) { var labelAttri = runtimeProperty.GetSingleAttribute<LabelAttribute>(); if (labelAttri != null) item.Label = labelAttri.Label; } item.Readonly(mp.IsReadOnly || mp == EntityConvention.Property_TreeIndex); //如果是引用实体的属性,创建 SelectionViewMeta if (item.IsReference) { item.SelectionViewMeta = new SelectionViewMeta(); } evm.EntityProperties.Add(item); return item; }
/// <summary> /// 尝试为 evm 生成一个运行时的 Id,以方便这个没有数据库的类也能运行在 Rafy 界面框架上。 /// </summary> /// <param name="evm"></param> /// <returns></returns> private static int GetRuntimeUniqueId(EntityViewMeta evm) { var viewName = evm.ExtendView; //if (string.IsNullOrEmpty(viewName)) return evm.EntityMeta.Id; var entityType = evm.EntityType; var res = _viewIds.FirstOrDefault(i => i.EntityType == entityType && i.ViewName == viewName); if (res == null) { lock (_viewIds) { res = _viewIds.FirstOrDefault(i => i.EntityType == entityType && i.ViewName == viewName); if (res == null) { res = new EVMUniqueId { EntityType = entityType, ViewName = viewName, Id = RafyEnvironment.NewLocalId() }; _viewIds.Add(res); } } } return(res.Id); }
public void Config(EntityViewMeta evm) { if (PageSize != null && evm is WebEntityViewMeta) { evm.AsWebView().PageSize = PageSize.Value; } if (GroupBy != null) { if (GroupBy == NullString) { evm.GroupBy = null; } else { evm.GroupBy = evm.Property(GroupBy); } } foreach (var property in this.EntityProperties) { if (property.IsChanged()) { var pvm = evm.Property(property.Name); if (pvm != null) { property.Config(pvm); } } } if (RafyEnvironment.Location.IsWebUI) { foreach (var cmd in this.Commands) { if (cmd.IsChanged()) { var jsCmd = evm.AsWebView().Commands.Find(cmd.Name); if (jsCmd != null) { cmd.Config(jsCmd); } } } } else { foreach (var cmd in this.Commands) { if (cmd.IsChanged()) { var wpfCmd = evm.AsWPFView().Commands.Find(cmd.Name); if (wpfCmd != null) { cmd.Config(wpfCmd); } } } } }
protected override void UseBlockDefaultCommands(EntityViewMeta meta) { if (!RafyEnvironment.Location.IsWebUI) { //如果当前模块是一个条件面板,应该添加上查询按钮。 meta.AsWPFView().UseCommands(WPFCommandNames.FireQuery); } base.UseBlockDefaultCommands(meta); }
internal static void EntityToJson(EntityViewMeta evm, IEnumerable <Entity> entities, IList <EntityJson> list) { foreach (var entity in entities) { var entityJson = new EntityJson(); EntityToJson(evm, entity, entityJson); list.Add(entityJson); } }
/// <summary> /// 表格中某一行在自动化测试中应该以哪个属性来作为“查找属性”。 /// </summary> /// <param name="evm"></param> /// <returns></returns> public static string TryGetAutomationNameBinding(this EntityViewMeta evm) { var autoProperty = evm.GetPropertyOrDefault <string>(AutomationPropertyKey); if (!string.IsNullOrWhiteSpace(autoProperty)) { return(autoProperty); } return(null); }
internal static void EntityToJson(EntityViewMeta evm, IEnumerable<Entity> entities, IList<EntityJson> list) { foreach (var entity in entities) { var entityJson = new EntityJson(); EntityToJson(evm, entity, entityJson); list.Add(entityJson); } }
internal void Read(EntityViewMeta evm) { this.Id = GetRuntimeUniqueId(evm); if (evm.GroupBy != null) this.GroupBy = evm.GroupBy.Name; if (evm is WebEntityViewMeta) { this.PageSize = evm.AsWebView().PageSize; } this.EntityType = ClientEntities.GetClientName(evm.EntityType); if (!string.IsNullOrEmpty(evm.ExtendView)) this.ViewName = evm.ExtendView; }
internal EntityPropertyViewMeta CreateExtensionPropertyViewMeta(IManagedProperty mp, EntityViewMeta evm) { var epm = evm.EntityMeta.Property(mp); var epvm = evm.CreatePropertyViewMeta(); epvm.Owner = evm; epvm.PropertyMeta = epm; evm.EntityProperties.Add(epvm); return epvm; }
/// <summary> /// 自动生成树形列表UI /// </summary> /// <param name="evm"></param> /// <param name="listShowInWhere"> /// 这个表格需要显示在哪个位置。 /// <remarks>生成引擎根据元数据中各属性定义的显示逻辑来生成列。</remarks> /// </param> /// <returns></returns> public RafyTreeGrid CreateTreeGrid(EntityViewMeta evm, ListShowInWhere listShowInWhere) { if (evm == null) { throw new ArgumentNullException("vm"); } //使用TreeGrid作为TreeListControl var treeGrid = new RafyTreeGrid { OnlyGridMode = !evm.EntityMeta.IsTreeEntity, GroupingStyle = RafyResources.GroupContainerStyle, CheckingColumnTemplate = RafyResources.Rafy_MTTG_SelectionColumnTemplate, NoDataText = "没有数据".Translate(), CheckingColumnHeader = "选择".Translate(), SummaryRowTitle = "合计:".Translate(), ShowSummaryRow = GetNeedSummary(evm) }; if (!string.IsNullOrEmpty(evm.Label)) { AutomationProperties.SetName(treeGrid, evm.Label); } TreeGridRow.SetAutomationProperty(treeGrid, evm.TryGetPrimayDisplayProperty()); var showInWhere = (ShowInWhere)listShowInWhere; //使用list里面的属性生成每一列 foreach (WPFEntityPropertyViewMeta property in evm.OrderedEntityProperties()) { if (property.CanShowIn(showInWhere)) { var column = this.TreeColumnFactory.Create(property); treeGrid.Columns.Add(column); } } treeGrid.ApplyTemplate(); /*********************** 代码块解释 ********************************* * 表格的设计,与 FocusTrackerAdorner 不兼容,暂时把它排除。 * 目前,有以下问题: * * 表格中横向拖动滚动条时,焦点跟踪框的位置没有更新。 * * 表格中从一行的编辑框进入另一行某个单元格的编辑时,跟踪框位置没有更新。 **********************************************************************/ FocusTrackerAdorner.SetTrackFocusScope(treeGrid, TrackFocusScope.Exclude); return(treeGrid); }
private static TreeEntityJson ConvertRecur(Entity entity, EntityViewMeta evm) { var jEntity = new TreeEntityJson(); EntityJsonConverter.EntityToJson(evm, entity, jEntity); foreach (Entity child in entity.TreeChildren) { var c = ConvertRecur(child, evm); jEntity.children.Add(c); } return(jEntity); }
/// <summary> /// 创建指定自定义块类型对应的视图。 /// </summary> /// <param name="evm"></param> /// <param name="customBlockType"></param> /// <returns></returns> private LogicalView CreateCustomBlockView(EntityViewMeta evm, BlockType customBlockType) { ICustomViewFactory factory = null; if (!this._factories.TryGetValue(customBlockType, out factory)) { throw new InvalidOperationException("还没有注册对应块类型 {" + customBlockType + "} 的视图构造器。请使用 RegisterBlockType 方法注册。"); } var view = factory.CreateView(evm); this.OnViewCreated(view); return(view); }
private static void AddFields(XElement fields, EntityViewMeta meta) { foreach (WPFEntityPropertyViewMeta property in meta.EntityProperties) { var label = FormatPropertyLabel(property); var propertyType = property.PropertyMeta.Runtime.PropertyType; if (TypeHelper.IsEnumNullable(propertyType)) { propertyType = typeof(string); } fields.Add(new XElement(n + "Field", new XAttribute("Name", label), new XElement(n + "DataField", property.Name), new XElement(rd + "TypeName", propertyType.FullName) )); } }
/// <summary> /// 如果当前 Rafy 运行时环境中,已经拥有 UI 层界面的元数据,则获取属性对应的的显示名称,并进行翻译后返回。 /// 否则,直接返回以下格式的字符串,方便替换:[属性名称]。(服务端一般都没有 UI 层元数据。) /// </summary> /// <param name="property">The property.</param> /// <returns></returns> public static string Display(IManagedProperty property) { if (RafyEnvironment.Location.IsWebUI || RafyEnvironment.Location.IsWPFUI) { //以线程安全的方式获取最后一次缓存的 View。 EntityViewMeta safeView = _lastViewMeta; var ownerType = property.OwnerType; if (safeView == null || safeView.EntityType != ownerType) { safeView = UIModel.Views.CreateBaseView(ownerType); _lastViewMeta = safeView; } string res = null; var pvm = safeView.Property(property); if (pvm != null) { res = pvm.Label; } //如果是引用 Id 属性没有配置 Label,则尝试使用它对应的引用实体属性的 Label 来显示。 if (string.IsNullOrEmpty(res)) { var refMP = property as IRefIdProperty; if (refMP != null) { pvm = safeView.Property(refMP.RefEntityProperty); if (pvm != null) { res = pvm.Label; } } } if (!string.IsNullOrEmpty(res)) { return(res.Translate()); } } return('[' + property.Name + ']'); }
/// <summary> /// 如果当前 Rafy 运行时环境中,已经拥有 UI 层界面的元数据,则获取实体对应的的显示名称,并进行翻译后返回。 /// 否则,直接返回以下格式的字符串,方便替换:[实体类型名称]。(服务端一般都没有 UI 层元数据。) /// </summary> /// <param name="entityType">Type of the entity.</param> /// <returns></returns> public static string Display(Type entityType) { if (RafyEnvironment.Location.IsWebUI || RafyEnvironment.Location.IsWPFUI) { //以线程安全的方式获取最后一次缓存的 View。 EntityViewMeta safeView = _lastViewMeta; var ownerType = entityType; if (safeView == null || safeView.EntityType != ownerType) { safeView = UIModel.Views.CreateBaseView(ownerType); _lastViewMeta = safeView; } string res = safeView.Label; if (!string.IsNullOrEmpty(res)) { return(res.Translate()); } } return('[' + entityType.FullName + ']'); }
internal static EntityViewMeta GetEVMByParentId(int parentId) { EntityViewMeta evm = null; var dest = RafyEnvironment.BranchProvider.HasBranch ? BlockConfigType.Customization : BlockConfigType.Config; var viewId = TryGetViewUniqueId(parentId); if (viewId != null) { evm = UIModel.Views.Create(viewId.EntityType, viewId.ViewName, dest); } //else //{ // var entityMeta = CommonModel.Entities.Find(parentId); // if (entityMeta != null) // { // evm = WebModel.Views.GetDefaultView(entityMeta.EntityType, dest); // } //} return evm; }
/// <summary> /// 自动生成树形列表UI /// </summary> /// <param name="evm"></param> /// <param name="listShowInWhere"> /// 这个表格需要显示在哪个位置。 /// <remarks>生成引擎根据元数据中各属性定义的显示逻辑来生成列。</remarks> /// </param> /// <returns></returns> public RafyTreeGrid CreateTreeGrid(EntityViewMeta evm, ListShowInWhere listShowInWhere) { if (evm == null) throw new ArgumentNullException("vm"); //使用TreeGrid作为TreeListControl var treeGrid = new RafyTreeGrid { OnlyGridMode = !evm.EntityMeta.IsTreeEntity, GroupingStyle = RafyResources.GroupContainerStyle, CheckingColumnTemplate = RafyResources.Rafy_MTTG_SelectionColumnTemplate, NoDataText = "没有数据".Translate(), CheckingColumnHeader = "选择".Translate(), SummaryRowTitle = "合计:".Translate(), ShowSummaryRow = GetNeedSummary(evm) }; if (!string.IsNullOrEmpty(evm.Label)) { AutomationProperties.SetName(treeGrid, evm.Label); } TreeGridRow.SetAutomationProperty(treeGrid, evm.TryGetPrimayDisplayProperty()); var showInWhere = (ShowInWhere)listShowInWhere; //使用list里面的属性生成每一列 foreach (WPFEntityPropertyViewMeta property in evm.OrderedEntityProperties()) { if (property.CanShowIn(showInWhere)) { var column = this.TreeColumnFactory.Create(property); treeGrid.Columns.Add(column); } } treeGrid.ApplyTemplate(); /*********************** 代码块解释 ********************************* * 表格的设计,与 FocusTrackerAdorner 不兼容,暂时把它排除。 * 目前,有以下问题: * * 表格中横向拖动滚动条时,焦点跟踪框的位置没有更新。 * * 表格中从一行的编辑框进入另一行某个单元格的编辑时,跟踪框位置没有更新。 **********************************************************************/ FocusTrackerAdorner.SetTrackFocusScope(treeGrid, TrackFocusScope.Exclude); return treeGrid; }
/// <summary> /// 加载所有属性元数据 /// </summary> /// <param name="viewMeta"></param> private void CreatePropertiesViewMeta(EntityViewMeta viewMeta) { foreach (var property in EntityMetaHelper.GetEntityProperties(viewMeta.EntityMeta)) { this.CreateEntityPropertyViewMeta(property, viewMeta); } //加入扩展属性元数据 foreach (var mp in EntityMetaHelper.GetEntityPropertiesExtension(viewMeta.EntityMeta)) { this.CreateExtensionPropertyViewMeta(mp, viewMeta); } }
internal static void SetNeedSummary(EntityViewMeta meta, bool value) { meta.SetExtendedProperty(BlockUIFactory_NeedSummary, value); }
internal void InitViewMeta() { if (this._ViewMeta == null) { this._ViewMeta = UIModel.Views.Create(this.EntityType, ViewConfig.GetViewName(this.ExtendView)); this.UseBlockDefaultCommands(this._ViewMeta); } }
internal static void EntityToJson(EntityViewMeta evm, Entity entity, EntityJson entityJson) { var isTree = evm.EntityMeta.IsTreeEntity; foreach (var propertyVM in evm.EntityProperties) { var property = propertyVM.PropertyMeta; var mp = property.ManagedProperty; if (mp != null) { //如果非树型实体,则需要排除树型实体的两个属性。 if (!isTree && (mp == Entity.TreeIndexProperty || mp == Entity.TreePIdProperty)) { continue; } //引用属性 if (propertyVM.IsReference) { var refMp = mp as IRefProperty; object value = string.Empty; var id = entity.GetRefNullableId(refMp.RefIdProperty); if (id != null) { value = id; } var idName = refMp.RefIdProperty.Name; entityJson.SetProperty(idName, value); //同时写入引用属性的视图属性,如 BookCategoryId_Label if (id != null && propertyVM.CanShowIn(ShowInWhere.List)) { var titleProperty = propertyVM.SelectionViewMeta.RefTypeDefaultView.TitleProperty; if (titleProperty != null) { var lazyRefEntity = entity.GetRefEntity(refMp.RefEntityProperty); var titleMp = titleProperty.PropertyMeta.ManagedProperty; if (titleMp != null) { value = lazyRefEntity.GetProperty(titleMp); } else { value = ObjectHelper.GetPropertyValue(lazyRefEntity, titleProperty.Name); } var name = EntityModelGenerator.LabeledRefProperty(idName); entityJson.SetProperty(name, value); } } } //一般托管属性 else { var pRuntimeType = property.PropertyType; var serverType = ServerTypeHelper.GetServerType(pRuntimeType); if (serverType.Name != SupportedServerType.Unknown) { var value = entity.GetProperty(mp); value = ToClientValue(pRuntimeType, value); entityJson.SetProperty(mp.Name, value); } } } //一般 CLR 属性 else { var pRuntimeType = property.PropertyType; var serverType = ServerTypeHelper.GetServerType(pRuntimeType); if (serverType.Name != SupportedServerType.Unknown) { var value = ObjectHelper.GetPropertyValue(entity, property.Name); value = ToClientValue(pRuntimeType, value); entityJson.SetProperty(property.Name, value); } } } }
/// <summary> /// 创建指定自定义块类型对应的视图。 /// </summary> /// <param name="evm"></param> /// <param name="customBlockType"></param> /// <returns></returns> private LogicalView CreateCustomBlockView(EntityViewMeta evm, BlockType customBlockType) { ICustomViewFactory factory = null; if (!this._factories.TryGetValue(customBlockType, out factory)) throw new InvalidOperationException("还没有注册对应块类型 {" + customBlockType + "} 的视图构造器。请使用 RegisterBlockType 方法注册。"); var view = factory.CreateView(evm); this.OnViewCreated(view); return view; }
public EntityPropertyViewMeta CreateExtensionPropertyViewMeta(IManagedProperty mp, EntityViewMeta evm) { return this._codeReader.CreateExtensionPropertyViewMeta(mp, evm); }
/// <summary> /// 尝试为 evm 生成一个运行时的 Id,以方便这个没有数据库的类也能运行在 Rafy 界面框架上。 /// </summary> /// <param name="evm"></param> /// <returns></returns> private static int GetRuntimeUniqueId(EntityViewMeta evm) { var viewName = evm.ExtendView; //if (string.IsNullOrEmpty(viewName)) return evm.EntityMeta.Id; var entityType = evm.EntityType; var res = _viewIds.FirstOrDefault(i => i.EntityType == entityType && i.ViewName == viewName); if (res == null) { lock (_viewIds) { res = _viewIds.FirstOrDefault(i => i.EntityType == entityType && i.ViewName == viewName); if (res == null) { res = new EVMUniqueId { EntityType = entityType, ViewName = viewName, Id = RafyEnvironment.NewLocalId() }; _viewIds.Add(res); } } } return res.Id; }
/// <summary> /// 定义列到属性的映射。 /// </summary> /// <param name="properties"> /// Key:列名,将会使用这个列名来显示。 /// Value:列名在对象中所对应的属性名。 /// </param> protected virtual void DefineTable(List<WPFEntityPropertyViewMeta> properties, EntityViewMeta evm) { foreach (WPFEntityPropertyViewMeta property in evm.OrderedEntityProperties()) { if (property.CanShowIn(ShowInWhere.List)) { properties.Add(property); } } }
/// <summary> /// 获取一个列表视图是否需要显示合计行。 /// </summary> /// <param name="meta"></param> /// <returns></returns> public static bool GetNeedSummary(EntityViewMeta meta) { return meta.GetPropertyOrDefault<bool>(BlockUIFactory_NeedSummary); }
/// <summary> /// 定义列到属性的映射。 /// </summary> /// <param name="properties"> /// Key:列名,将会使用这个列名来显示。 /// Value:列名在对象中所对应的属性名。 /// </param> protected virtual void DefineTable(List <WPFEntityPropertyViewMeta> properties, EntityViewMeta evm) { foreach (WPFEntityPropertyViewMeta property in evm.OrderedEntityProperties()) { if (property.CanShowIn(ShowInWhere.List)) { properties.Add(property); } } }
private void ReplaceControl(EntityViewMeta evm) { var newControl = AutoUI.BlockUIFactory.CreateTreeGrid(evm, ListShowInWhere.List); this._view.ReplaceControl(newControl); }
private void UseSysCommands(EntityViewMeta evm) { //初始化实体视图中的命令按钮 var em = evm.EntityMeta; if (!RafyEnvironment.Location.IsWebUI) { if (em.EntityCategory == EntityCategory.QueryObject) { evm.AsWPFView().UseCommands(WPFCommandNames.SysQueryCommands); } else { evm.AsWPFView().UseCommands(WPFCommandNames.SysCommands); } } else { if (em.EntityCategory == EntityCategory.QueryObject) { evm.AsWebView().UseCommands(WebCommandNames.SysQueryCommands); } else { evm.AsWebView().UseCommands(WebCommandNames.SysCommands); } } }
/// <summary> /// 如果当前 Rafy 运行时环境中,已经拥有 UI 层界面的元数据,则获取属性对应的的显示名称,并进行翻译后返回。 /// 否则,直接返回以下格式的字符串,方便替换:[属性名称]。(服务端一般都没有 UI 层元数据。) /// </summary> /// <param name="property">The property.</param> /// <returns></returns> public static string Display(IManagedProperty property) { if (RafyEnvironment.Location.IsWebUI || RafyEnvironment.Location.IsWPFUI) { //以线程安全的方式获取最后一次缓存的 View。 EntityViewMeta safeView = _lastViewMeta; var ownerType = property.OwnerType; if (safeView == null || safeView.EntityType != ownerType) { safeView = UIModel.Views.CreateBaseView(ownerType); _lastViewMeta = safeView; } string res = null; var pvm = safeView.Property(property); if (pvm != null) res = pvm.Label; //如果是引用 Id 属性没有配置 Label,则尝试使用它对应的引用实体属性的 Label 来显示。 if (string.IsNullOrEmpty(res)) { var refMP = property as IRefIdProperty; if (refMP != null) { pvm = safeView.Property(refMP.RefEntityProperty); if (pvm != null) res = pvm.Label; } } if (!string.IsNullOrEmpty(res)) { return res.Translate(); } } return '[' + property.Name + ']'; }
/// <summary> /// 获取一个列表视图是否需要显示合计行。 /// </summary> /// <param name="meta"></param> /// <returns></returns> public static bool GetNeedSummary(EntityViewMeta meta) { return(meta.GetPropertyOrDefault <bool>(BlockUIFactory_NeedSummary)); }
private void owner_PropertyFound(object sender, EntityViewMeta.PropertyFoundEventArgs e) { var item = e.Property as WPFEntityPropertyViewMeta; if (!this.Properties.Contains(item)) { this.Properties.Add(item); } }
internal static void EntityToJson(EntityViewMeta evm, Entity entity, EntityJson entityJson) { var isTree = evm.EntityMeta.IsTreeEntity; foreach (var propertyVM in evm.EntityProperties) { var property = propertyVM.PropertyMeta; var mp = property.ManagedProperty; if (mp != null) { //如果非树型实体,则需要排除树型实体的两个属性。 if (!isTree && (mp == Entity.TreeIndexProperty || mp == Entity.TreePIdProperty)) { continue; } //引用属性 if (propertyVM.IsReference) { var refMp = mp as IRefProperty; object value = string.Empty; var id = entity.GetRefNullableId(refMp.RefIdProperty); if (id != null) { value = id; } var idName = refMp.RefIdProperty.Name; entityJson.SetProperty(idName, value); //同时写入引用属性的视图属性,如 BookCategoryId_Display if (id != null && propertyVM.CanShowIn(ShowInWhere.List)) { var titleProperty = propertyVM.SelectionViewMeta.RefTypeDefaultView.TitleProperty; if (titleProperty != null) { var lazyRefEntity = entity.GetRefEntity(refMp.RefEntityProperty); var titleMp = titleProperty.PropertyMeta.ManagedProperty; if (titleMp != null) { value = lazyRefEntity.GetProperty(titleMp); } else { value = ObjectHelper.GetPropertyValue(lazyRefEntity, titleProperty.Name); } var name = EntityModelGenerator.LabeledRefProperty(idName); entityJson.SetProperty(name, value); } } } //一般托管属性 else { var pRuntimeType = property.PropertyType; var serverType = ServerTypeHelper.GetServerType(pRuntimeType); if (serverType.Name != SupportedServerType.Unknown) { var value = entity.GetProperty(mp); value = ToClientValue(pRuntimeType, value); entityJson.SetProperty(mp.Name, value); } } } //一般 CLR 属性 else { var pRuntimeType = property.PropertyType; var serverType = ServerTypeHelper.GetServerType(pRuntimeType); if (serverType.Name != SupportedServerType.Unknown) { var value = ObjectHelper.GetPropertyValue(entity, property.Name); value = ToClientValue(pRuntimeType, value); entityJson.SetProperty(property.Name, value); } } } }
/// <summary> /// 如果当前 Rafy 运行时环境中,已经拥有 UI 层界面的元数据,则获取实体对应的的显示名称,并进行翻译后返回。 /// 否则,直接返回以下格式的字符串,方便替换:[实体类型名称]。(服务端一般都没有 UI 层元数据。) /// </summary> /// <param name="entityType">Type of the entity.</param> /// <returns></returns> public static string Display(Type entityType) { if (RafyEnvironment.Location.IsWebUI || RafyEnvironment.Location.IsWPFUI) { //以线程安全的方式获取最后一次缓存的 View。 EntityViewMeta safeView = _lastViewMeta; var ownerType = entityType; if (safeView == null || safeView.EntityType != ownerType) { safeView = UIModel.Views.CreateBaseView(ownerType); _lastViewMeta = safeView; } string res = safeView.Label; if (!string.IsNullOrEmpty(res)) { return res.Translate(); } } return '[' + entityType.FullName + ']'; }
/// <summary> /// 使用本块中默认的一些按钮。 /// </summary> protected virtual void UseBlockDefaultCommands(EntityViewMeta meta) { if (RafyEnvironment.Location.IsWPFUI) { if (this.BlockType == BlockType.Report) { meta.AsWPFView().UseCommands(WPFCommandNames.RefreshDataSourceInRDLC, WPFCommandNames.ShowReportData); } } }
/// <summary> /// 设置自动化测试中的需要绑定的“查找属性”名。 /// </summary> /// <typeparam name="TEntity"></typeparam> /// <param name="meta"></param> /// <param name="propertyExp"></param> public static void SetAutomationNameBinding( this EntityViewMeta meta, IManagedProperty property ) { meta.SetExtendedProperty(AutomationPropertyKey, property.Name); }
public void Config(EntityViewMeta evm) { if (PageSize != null && evm is WebEntityViewMeta) evm.AsWebView().PageSize = PageSize.Value; if (GroupBy != null) { if (GroupBy == NullString) { evm.GroupBy = null; } else { evm.GroupBy = evm.Property(GroupBy); } } foreach (var property in this.EntityProperties) { if (property.IsChanged()) { var pvm = evm.Property(property.Name); if (pvm != null) { property.Config(pvm); } } } if (RafyEnvironment.Location.IsWebUI) { foreach (var cmd in this.Commands) { if (cmd.IsChanged()) { var jsCmd = evm.AsWebView().Commands.Find(cmd.Name); if (jsCmd != null) { cmd.Config(jsCmd); } } } } else { foreach (var cmd in this.Commands) { if (cmd.IsChanged()) { var wpfCmd = evm.AsWPFView().Commands.Find(cmd.Name); if (wpfCmd != null) { cmd.Config(wpfCmd); } } } } }
private JsonModel QueryEntityList(HttpRequest request, EntityViewMeta evm) { var repo = RF.Find(evm.EntityType); var pagingInfo = ParsePagingInfo(request, repo); var entities = QueryEntityListCore(request, repo, pagingInfo); var list = new EntityJsonList { model = evm.EntityType }; if (repo.SupportTree) { var roots = entities; foreach (var rootItem in roots) { var i = ConvertRecur(rootItem, evm); i.expanded = true; list.entities.Add(i); } list.total = (entities as ITreeComponent).CountNodes(); } else { //如果此时,还需要进行统计,表示在数据层查询时,并没有对分页进行处理。这时,只能在内存中对实体进行分页。 if (pagingInfo.IsNeedCount) { entities = JumpToPageInMemory(repo, entities, pagingInfo); } EntityJsonConverter.EntityToJson(evm, entities, list.entities); list.total = pagingInfo.TotalCount; } return(list); #region //暂时不用 //var repo = RF.Create(evm.EntityType); //EntityList entities = QueryEntityListCore(request, repo); //if (repo.SupportTree) //{ // entities.EnsureObjectRelations(); // var root = new RootTreeEntityJson(); // var roots = entities.FindRoots(); // foreach (var rootItem in roots) // { // var i = ConvertRecur(rootItem, evm); // root.children.Add(i); // } // return root; //} //else //{ // var page = request.GetQueryStringOrDefault("page", 1); // var limit = request.GetQueryStringOrDefault("limit", 10); // var pagerInfo = new PagerInfo(page, limit, true); // entities = JumpToPage(repo, entities, pagerInfo); // var list = new EntityJsonList // { // totalCount = pagerInfo.TotalCount, // }; // EntityJsonConverter.EntityToJson(evm, entities, list.entities); // return list; //} #endregion }