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

  • 相关阅读:
    888. Uncommon Words from Two Sentences
    344. Reverse String
    151. Reverse Words in a String
    557. Reverse Words in a String III
    811. Subdomain Visit Count
    上海市公积金、养老保险、医疗保险转出事宜
    476. Number Complement
    方法重载的条件
    简单工厂模式
    单例模式
  • 原文地址:https://www.cnblogs.com/zhoujg/p/1623560.html
Copyright © 2020-2023  润新知