EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:实现单例业务对象并显示其详细信息视图

在本主题中,您将学习如何实现单例-一个可以具有无法删除的单个实例的业务类。例如,您可以具有一个单一对象,该对象描述最终用户的公司详细信息或常规应用程序设置。还说明了可用于显示单例详细视图的方法。

提示

可在http://www.devexpress.com/example=E237的DevExpress代码示例数据库中找到完整的示例项目。

实施单例

要禁止单例删除和创建其他单例,请使用验证模块。应用以下属性。

using DevExpress.Persistent.Validation;
// ...
[RuleObjectExists("AnotherSingletonExists", DefaultContexts.Save, "True", InvertResult = true,
    CustomMessageTemplate = "Another Singleton already exists.")]
[RuleCriteria("CannotDeleteSingleton", DefaultContexts.Delete, "False",
    CustomMessageTemplate = "Cannot delete Singleton.")]
public class Singleton {
    // ...
}

辛格尔顿类本身可以是一个XPO持久化类或实体框架实体类-这并不重要。如果使用Entity Framework,请不要忘记将Singleton类型添加到DbContext中

要创建单例的实例,请按以下方式覆盖模块的Updater类的UpdateDatabaseAfterUpdateSchema方法。

public override void UpdateDatabaseAfterUpdateSchema() {
    base.UpdateDatabaseAfterUpdateSchema();
    if (ObjectSpace.GetObjectsCount(typeof(Singleton), null) == 0) {
        ObjectSpace.CreateObject<Singleton>();
    }
    ObjectSpace.CommitChanges();
}

添加上述代码后,将在应用程序数据库中创建单例对象(如果尚不存在)。

注意

UpdateDatabaseAfterUpdateSchema方法被称为每个应用调试模式下运行的时间。因此,此方法旨在在部署应用程序或其更新时创建初始数据。要查看有关如何使用此方法的示例,请参阅“供应初始数据(XPO)”主题。

提供对Singleton详细视图的访问

XAF应用程序可以根据单例的目的以不同方式显示单例对象。本主题详细介绍了两种可能的技术。第一个使用PopupWindowShowAction,第二个在主窗体的导航控件中添加一个项目。

使用PopupWindowShowAction

下面的代码说明了包含ShowSingleton动作的ShowSingleton窗口控制器。该操作将显示一个弹出窗口,其中包含Singleton对象的详细信息视图。

public class ShowSingletonController : WindowController {
    public ShowSingletonController() {
        //Comment out the following line if you implement this Controller for a Mobile application
        this.TargetWindowType = WindowType.Main;
        PopupWindowShowAction showSingletonAction =
            new PopupWindowShowAction(this, "ShowSingleton", PredefinedCategory.View);
        showSingletonAction.CustomizePopupWindowParams  = showSingletonAction_CustomizePopupWindowParams;
    }
    private void showSingletonAction_CustomizePopupWindowParams(object sender, CustomizePopupWindowParamsEventArgs e) {
        IObjectSpace objectSpace = Application.CreateObjectSpace(typeof(Singleton));
        DetailView detailView = Application.CreateDetailView(objectSpace, objectSpace.GetObjects<Singleton>()[0]);
        detailView.ViewEditMode = ViewEditMode.Edit;
        e.View = detailView;
    }
}

运行应用程序,并检查“显示单例操作”是否可用,您可以使用此操作修改单例。

ShowSingletonActionWin

ShowSingletonActionWeb

将项目添加到导航控件

使用模型编辑器将NavigationItem节点添加到应用程序模型中(请参阅将项目添加到导航控件中)。将新添加的节点的View属性设置为Singleton_DetailView。

SingletonNavItemME

运行该应用程序,并检查单例导航项是否可用。

SingletonNavItemWin

SingletonNavItemWeb

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