信息系统开发平台OpenExpressApp - 模型相关Attribute介绍

  在《信息系统开发平台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:在《内置支持的模块类型 》提到的列表模块的泊靠样式,在选择记录添加时,需要根据一个函数来判断是否允许新增,系统通过此属性来获取判断方法

 

更多内容: 开源信息系统开发平台之OpenExpressApp框架.pdf

  在《信息系统开发平台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递归生成它的子对象UI。在查询面板时,一般都不需要级联生成所有对象的UI,所以会需要设置这个参数

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:在《内置支持的模块类型 》提到的列表模块的泊靠样式,在选择记录添加时,需要根据一个函数来判断是否允许新增,系统通过此属性来获取判断方法

posted on 2009-12-14 12:22  周 金根  阅读(1974)  评论(10编辑  收藏  举报

导航