EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

当前对象参数

eXpressApp框架提供了过滤查找属性编辑器的方法列表视图。该DataSourceCriteria属性应用于商业类的参考属性和用于过滤列表视图。属性的“查找属性编辑器”(Lookup Property Editor)下拉窗口中的“列表视图”(List View)根据作为属性参数传递的条件进行过滤。在定义应用于对象参考属性的过滤条件时,通常有必要在过滤条件中访问对象的属性。为此,eXpressApp框架提供了“当前对象参数”。本主题描述了“当前对象参数”的目的并演示了如何使用它。

重点
  • 在本文未介绍的场景中(例如,使用XPCollection外观规则安全权限等)以及在Entity Framework XAF应用程序中,不能使用“当前对象参数”功能。

在下面的示例中,有两个持久性类-ContactPosition。无论是联系人位置类有部财产。该联系类有位置型位置属性。由于这是参考属性,因此默认情况下使用“查找属性编辑器”在UI中表示该属性。如果要限制在“查找属性编辑器”的下拉列表视图中显示的位置,请将DataSourceCriteria属性应用于“联系人”的“位置”属性并指定过滤条件。使用常规条件语法时,您只能比较排名类的属性设置为过滤条件中的一些预定义值,并使用功能条件运算符。若要定义仅列出部门中可分配的职位的条件,已编辑的“联系人”被分配到该位置,则需要基于“联系人”对象的属性值的条件。在这种情况下,应使用当前对象参数。通过“当前对象参数”,您可以按照应用于对象引用属性的条件来访问对象属性。

在标准中,' @This。必需对象属性名称前的'前缀表示当前对象参数。以下代码段基于所描述的“接触-位置”示例说明了如何使用“当前对象”参数:

public class Contact : BaseObject {
    public Contact(Session session) : base(session) { }

    public string Name {
        get { return GetPropertyValue<string>(nameof(Name)); }
        set { SetPropertyValue<string>(nameof(Name), value); }
    }

    [Association("Contact-Department")]
    public Department Department {
        get { return GetPropertyValue<Department>(nameof(Department)); }
        set { SetPropertyValue<Department>(nameof(Department), value); }
    }

    [DataSourceCriteria("Department = '@This.Department'")]
    public Position Position {
        get { return GetPropertyValue<Position>(nameof(Position)); }
        set { SetPropertyValue<Position>(nameof(Position), value); }
    }
}

public class Position : BaseObject {
    public Position(Session session) : base(session) { }

    public string Title {
        get { return GetPropertyValue<string>(nameof(Title)); }
        set { SetPropertyValue<string>(nameof(Title), value); }
    }

    [Association("Department-Position")]
    public Department Department {
        get { return GetPropertyValue<Department>(nameof(Department)); }
        set { SetPropertyValue<Department>(nameof(Department), value); }
    }
}

public class Department : BaseObject {
    public Department(Session session) : base(session) { }

    public string Title {
        get { return GetPropertyValue<string>(nameof(Title)); }
        set { SetPropertyValue<string>(nameof(Title), value); }
    }

    [Association("Contact-Department")]
    public XPCollection<Contact> Contacts {
        get { return GetCollection<Contact>(nameof(Contacts)); }
    }

    [Association("Department-Position")]
    public XPCollection<Position> Positions {
        get { return GetCollection<Position>(nameof(Positions)); }
    }
}

在下面的代码段中,“当前对象参数”在应用于“位置”属性的DataSourceCriteria属性中使用。

public class Contact : BaseObject {
    // ...
    [DataSourceCriteria("Department = '@This.Department'")]
    public Position Position {
        // ...
    }
    // ...
}

该属性指定代表Contact类的Position属性的Lookup属性编辑器应仅列出编辑后的联系人所在部门中的可用职位。

当前对象参数可以在以下上下文中使用:

使用@This时。注意DataSourceCriteria中的前缀,即使查找显示了复杂的属性,也要引用主对象(为其显示查找编辑器)。例如,如果lookup属性是 Task.Project.Manager,则@This引用Task而不是Project ..

[提示]您可以在MySolution.Module | MyView中看到另一个“当前对象参数”示例。业务对象| XAF附带的Main Demo的Contact.csContact.vb)文件。该MainDemo应用程序安装在%PUBLIC%\文件\ DevExpress的演示19.2 \组件\ eXpressApp框架\ MainDemo默认。可在http://demos.devexpress.com/XAF/MainDemo/上在线获得ASP.NET版本。此示例的代码在《综合教程的实现依赖参考属性》一文中进行了描述。

相关文章

转载保留此链接,注明出处