在《信息系统开发平台OpenExpressApp - 应用模型ApplicationModel》中对模型进行了介绍,OpenExpressApp目前是通过属性实现模型支持,后续会增加建模支持。本篇将介绍具体的Attribute,以便大家知道在编写类库时应该写哪些自定义的Attribute。
BusinessObject:业务对象
[BusinessObject(Direction = Direction.Horizontal), Label("项目属性")]
public partial class ProjectPBS : GBusinessBase<ProjectPBS>, ITreeNode
BusinessObject:表明是OpenExpressApp管理的业务对象,业务对象会加入到业务模型的对象列表中
Direction:子对象是横向还是纵向显示,影响AutoUI生成界面的布局
DefaultObject:默认对象
[DefaultObject(Catalog = "指标管理", Index = 400), Label("项目信息")]
public class Project : GBusinessBase<Project>
DefaultObject:继承自BusinessObject,默认对象,会添加到系统的模块列表中。
Catalog:指定默认对象所属目录,目录是对象的一种分类方式,影响模块列表的分组
Index:对象的顺序,影响模块列表显示的顺序
Label:对象的标题,影响模块列表显示的标题
EntityProperty:实体属性
[EntityProperty]
[Required, IsTitle, ShowInLookup, ShowInList, ShowInDetail, Label("名称")]
public string Name
{
get { return GetProperty(NameProperty); }
set { SetProperty(NameProperty, value); }
}
EntityProperty:指定为OpenExpressApp管理的实体属性,实体属性会加入到业务模型对象的属性列表中,如果不加此属性,AutoUI也不会处理
Required:属性必填
IsTitle:每个业务对象只能有一个显示标题,其他对象引用此对象时,显示这个对象的此属性,有时可以理解为外键关联字段名称
ShowInLookup:当对象显示在下拉列表时,AutoUI根据此属性来决定是否显示此属性列
ShowInList:当对象显示在模块列表时,AutoUI根据此属性来决定是否显示此属性列
ShowInDetail:当对象显示在对象详细信息时,AutoUI根据此属性来决定是否显示此属性
Label:属性标题
Association:子对象关联
[DefaultObject(Catalog = "模板管理",Index=100), Label("PBS模板")]
public class PBSType : GBusinessBase<PBSType>
{private static PropertyInfo<PBSs> PBSsProperty =
RegisterProperty(new PropertyInfo<PBSs>("PBSs"));
[Association]
public PBSs PBSs
{…}
…
}
Association:关联子对象列表属性。
参数IsRecur判断是否AutoUI递归生成它的子对象U,在查询面板时,一般都不需要级联生成所有对象的UI
参数CreateToolbar判断是否需要生成操作按钮,。在查询面板时,一般都不需要生成toolbar
Lookup:对象关联
[Lookup("PBSType")]
public Guid? PBSTypeId
{
get { return GetProperty(PBSTypeIdProperty); }
set { SetProperty(PBSTypeIdProperty, value); }
}
public PBSType PBSType
{…}
LookupPropertyName:关联属性名称,下拉列表自动获取数据。AutoUI生成下拉列表时,通过(对应属性的类型名+s/List)表示的业务列表对象类的GetList来获取数据。如果属性可编辑,下拉列表可以选择后会把选择对象赋值给关联属性,选择对象的Id赋值给Lookup属性值。
public BQInfo BQInfo {get ; set;}
[Lookup("BQTrade", DataSourceProperty = "BQInfo.BQTrades")]
public int BQTradeId
{
get { return GetProperty(BQTradeIdProperty); }
set { SetProperty(BQTradeIdProperty, value); }
}
public BQTrade BQTrade {get; set;}
DataSourceProperty:关联数据源属性,下拉列表根据关联属性来获取数据
[Lookup("PBS", DataSourceProperty = "ContractBudget.Contract.PBSList", RootPIdProperty = "PBSRootPId")]
public Guid? PBSId
{…}
RootPidProperty:当关联列表为树形表,并想过滤从特定级别开始显示数据,可以通过根对象Id属性值来控制显示在树形控件的根级别的Pid值,这时只显示Pid为RootPidProperty代表的属性值下的记录
[Lookup(SelectedValuePath = "Value", DataSourceProperty = "PBSProperty.PBSPropertyOptionalValues",
LookupType = typeof(PBSPropertyOptionalValue))]
public string Value
{ … }
LookupType:当关联类型不好直接通过以上形式获取时,可以通过直接赋值获得
SelectedValuePath:当下拉赋值时,不是把选择对象的Id赋值给关联属性时可以通过SelectedValuePath指定返回值的属性
Editor:编辑器名称
[Required, ShowInList, Label("备注")]
[OpenExpressApp.MetaAttribute.EditorAttribute(EditorNames.Memo)]
public string Description
{…}
Editor:AutoUI会自动设定属性编辑器,但有时仍旧会需要自己指定,Editor属性可以指定特定的编辑器名称,如以上代码段指定了备注字段编辑器
CondtionQueryType:条件查询类
[CondtionQueryType(typeof(BQItemCondtionCriteria))]
public partial class BQItem : GBusinessBase<BQItem>
CondtionQueryType:参数QueryType指定对象的条件查询类,Header指定显示标题
NavigateQueryType:导航查询类
[NavigateQueryType(typeof(ContractNavigateCriteria), NavigateQueryRegionPosition = QueryRegionPosition.ResultView)]
public partial class Contract : GBusinessBase<Contract>
{
NavigateQueryType:参数QueryType指定对象的导航查询类,Header指定显示标题,NavigateQueryRegionPosition 指定导航面板显示在查询面板还是数据面板
NavigateQueryItem:导航项
[QueryItemValueType(QueryItemValueType.Id), NavigateQueryItem]
public BQSections BQSections
{
NavigateQueryItem:导航查询时,触发到服务器的查询项,一般在子对象集合上设置。设置后,AutoUI生成的子对象列表发生OnChanged之类事件后会自动触发查询命令
QueryItemValueType:查询项值类型
[QueryItemValueType(QueryItemValueType.Id), NavigateQueryItem]
public BQSections BQSections
{
QueryItemValueType:导航查询时作为查询条件项传递到服务器端,QueryItemValueType指定查询值类型,目前只支持单Id作为查询条件
ORM:对象和数据库映射
[Table]
public class Project : GBusinessBase<Project>
{
[Column]
public string Name {get; set; }
}
Table:指定对应的表名,参数Name映射指定表名,不加Name则表名默认为类名
Column:指定对应的字段名,参数Name映射指定字段名,,不加Name则表名默认为属性名
Serializable:序列化
[Serializable]
public partial class ProjectList : GReadOnlyListBase<ProjectList, Project>[Serializable]
public class Project : GBusinessBase<Project>
{
Serializable:CSLA定义的类库为可系列化对象
NotAllowEdit、NotAllowNew、NotAllowRemove:不允许编辑、新增、删除
[NotAllowEdit, NotAllowNew, NotAllowRemove]
public partial class BQItem : GBusinessBase<BQItem>
{ … }
NotAllowEdit:不允许编辑对象
NotAllowNew:不允许新增对象
NotAllowRemove:不允许删除对象
通过这些属性可以控制内置命令AutoUI是是否生成和显示,参考《信息系统开发平台OpenExpressApp - Command扩展机制》
NotCopy:拷贝新增时不复制
public partial class Contract : GBusinessBase<Contract>
{[NotCopy]
public ContractAttachments ContractAttachments
{…}
…
[NotCopy]
public string Value {…}
}
NotCopy:系统内置拷贝新增命令,有时拷贝对象时不需要把整个树都拷贝,例如附件之类的,通过NotCopy可以控制哪些内容不允许拷贝
Enum:枚举标题
public enum PropertyValueType
{
[EnumAttr("数字")]
Number=1,
[EnumAttr("字符串")]
String,
[EnumAttr("日期")]
Date,
}
Enum:设定枚举标题
IsReadOnly:是否只读
[ShowInList, ShowInDetail, Label("名称"), IsReadOnly(PropertyName = "IsLock")]
public string Name
{
get { return GetProperty(NameProperty); }
set { SetProperty(NameProperty, value); }
}
IsReadOnly:根据PropertyName代表的属性值来判断对象属性是否只读
IsVisible:是否可见
[EntityProperty, IsVisible(PropertyName = "IsExcel")]
public Guid? PBSId
{…}
IsVisible:根据PropertyName代表的属性值来判断对象属性是否显示
[Association, IsVisible(PropertyName = "IsGBBudgetSource")]
public CBFBFXBQItemTitles CBFBFXBQItemTitles
IsVisible:根据PropertyName代表的属性值来判断子对象集合页签是否显示
BackColor:显示背景颜色
[BackColor(225, 255, 255)]
public partial class CBFBFXBQItemTitle : GBusinessBase<CBFBFXBQItemTitle>, ITreeNode, IOrderedObject
BackColor:多级别对象树时可以根据此属性来分别使用不同颜色显示对象
CanAddMethod:是否允许添加
public partial class BQItemIndicatorEntitys : GBusinessListBase<BQItemIndicatorEntitys, BQItemIndicatorEntity>
{
[CanAddMethod]
public bool CanAdd(string code, int BqDbId)
{
foreach (BQItemIndicatorEntity item in this)
if ((item.Code == code) && (item.BqDbId == BqDbId))
return true;
return false;
}
CanAddMethod:在《内置支持的模块类型 》提到的列表模块的泊靠样式,在选择记录添加时,需要根据一个函数来判断是否允许新增,系统通过此属性来获取判断方法