EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:在XPO中使用默认属性值初始化业务对象

在设计业务类时,一项常见的任务是确保使用默认属性值初始化一个新创建的业务对象。本主题说明如何初始化不同类型的属性。例如,将实现“联系人”业务类。创建Contact对象后,其属性将使用默认值初始化。

InitializeObjects_Win

提示

DevExpress代码示例数据库(http://www.devexpress.com/example=E2053)中提供了完整的示例项目。

提示

如何:使用实体框架中的默认属性值初始化业务对象”主题中提供了有关实体框架的类似示例。

简单属性

所有基本持久性类均来自PersistentBase类。此类公开用于对象初始化的PersistentBase.AfterConstruction方法。创建对象后,仅对对象调用一次AfterConstruction方法。每当需要初始化对象时,都应覆盖这些方法,并将初始化代码放入其主体中。由于此方法是专门为初始化而设计的,因此在将值分配给对象属性时无需检查当前对象状态。以下代码段演示了如何初始化简单的值属性。

public class Contact : Person {
//...
    public override void AfterConstruction() {
        base.AfterConstruction();

        FirstName = "Sam";
        TitleOfCourtesy = TitleOfCourtesy.Mr;
    }
}

要查看初始化简单属性的另一个示例,请参阅创建对象后初始化属性(XPO)教程课程。

参考属性

引用属性的初始化与简单属性的初始化不同,主要在于您可能需要获取对现有对象的引用。为此,请使用对象的Session的Session.FindObject方法。以下代码段演示了如何使用新对象和现有对象初始化引用属性。

public class Contact : Person {
    //...
    public override void AfterConstruction() {
        base.AfterConstruction();
        Address1 = new Address(Session);
        Address1.Country = Session.FindObject<Country>(CriteriaOperator.Parse("Name = 'USA'"));
        if(Address1.Country == null) {
            Address1.Country = new Country(Session);
            Address1.Country.Name = "USA";                
            Address1.Country.Save();
        }
        Manager = Session.FindObject<Contact>(CriteriaOperator.Parse(
            "FirstName = 'John' && LastName = 'Doe'"));
    }
}

收藏物业

要填充业务对象集合,请使用XPCollection.Add方法。以下代码段演示了如何使用预定义的电话号码填充Phones集合。

public class Contact : Person {
//...
    public override void AfterConstruction() {
        base.AfterConstruction();

        PhoneNumber phone1 = Session.FindObject<PhoneNumber>(CriteriaOperator.Parse(
            "Number = '555-0101'"));
        PhoneNumber phone2 = Session.FindObject<PhoneNumber>(CriteriaOperator.Parse(
            "Number = '555-0102'"));
        PhoneNumbers.Add(phone1);
        PhoneNumbers.Add(phone2);
    }
}

计算属性

更改关联的属性值时,会自动更新计算出的属性值。要了解如何实现常规的计算属性,请参阅“使属性可计算”教程课程。若要了解如何基于子对象集合中包含的对象的属性值实现计算所得的属性,请参阅“如何:基于详细信息集合中的值计算属性值”帮助主题。

初始化通过New Action创建的对象

在某些情况下,您可能只需要初始化专门通过New Action创建的对象。若要了解如何执行此操作,请参阅“如何:初始化使用“新建操作”创建的对象”帮助主题。

使用从主对象获取的值初始化子对象的属性

您可以在引用主对象的属性的设置器中为子对象的属性设置默认值。

public class ChildObject : BaseObject {
    // ...
    public MasterObject MasterObject {
        get { return masterObject; }
        set {
            bool modified = SetPropertyValue(nameof(MasterObject), ref masterObject, value) ;
            if (!IsLoading && !IsSaving && value != null && modified) {
                this.SomeProperty = value.DefaultForChildren;
            }
        }
    }
}

在子对象的AfterConstruction方法中无法获得父对象的值,因为在从外部代码初始化任何属性之前都将调用此方法。如果需要根据分配的父对象执行某些代码,请在ChildObject.MasterObject属性设置器或XPBaseCollection.CollectionChanged事件处理程序中执行此操作。

相关文章

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