EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

通过应用程序分发分析

本主题描述如何使用应用程序分发和更新分析。为此,将用代码创建一个Analysis对象,并将其字段在数据透视网格中的布局保存到数据库中。

注意

您可以在XAF随附的Main Demo中找到此处演示的代码。该MainDemo应用程序安装在%PUBLIC%\文件\ DevExpress的演示19.2 \组件\ eXpressApp框架\ MainDemo默认。可从http://demos.devexpress.com/XAF/MainDemo/在线获得ASP.NET版本。

  • 将以下引用添加到模块项目。

    DevExpress.ExpressApp.PivotChart

    DevExpress.PivotGrid.Core

  • 要为DemoTask业务对象创建分析,请从模块项目中打开DatabaseUpdate \ Updater.csUpdater.vb)文件,并创建一个新的Analysis对象,如下所示。

    public class Updater : ModuleUpdater {
        //...
        public override void UpdateDatabaseAfterUpdateSchema() {
            base.UpdateDatabaseAfterUpdateSchema();
            //...
            Analysis taskAnalysis1 = ObjectSpace.FindObject<Analysis>(
                               CriteriaOperator.Parse("Name = 'Completed tasks'"));
            if (taskAnalysis1 == null) {
                taskAnalysis1 = ObjectSpace.CreateObject<Analysis>();
                taskAnalysis1.Name = "Completed tasks";
                taskAnalysis1.ObjectTypeName = typeof(DemoTask).FullName;
                taskAnalysis1.Criteria = "[Status] = ##Enum#DevExpress.Persistent.Base.General.TaskStatus,Completed#";
            }
        }
    }
    
  • 运行应用程序时,检查分析是否已创建。

    Tutorial_EM_Lesson_10

  • 要用代码保存用于创建的分析的枢轴网格字段的配置,请将以下代码添加到模块项目内的Updater.cs文件中。

    using DevExpress.ExpressApp.PivotChart;
    using DevExpress.Persistent.Base;
    using DevExpress.Persistent.BaseImpl.EF;
    
    namespace MySolution.Module.DatabaseUpdate {
        //... 
        public abstract class TaskAnalysisLayoutUpdaterBase {
            protected IObjectSpace objectSpace;
            protected abstract IAnalysisControl CreateAnalysisControl();
            protected abstract IPivotGridSettingsStore CreatePivotGridSettingsStore(IAnalysisControl control);
            public TaskAnalysisLayoutUpdaterBase(IObjectSpace objectSpace) {
                this.objectSpace = objectSpace;
            }
            public void Update(Analysis analysis) {
                if (analysis != null && !PivotGridSettingsHelper.HasPivotGridSettings(analysis)) {
                    IAnalysisControl control = CreateAnalysisControl();
                    control.DataSource = new AnalysisDataSource(analysis, objectSpace.GetObjects(typeof(DemoTask)));
                    control.Fields["Priority"].Area = DevExpress.XtraPivotGrid.PivotArea.ColumnArea;
                    control.Fields["Subject"].Area = DevExpress.XtraPivotGrid.PivotArea.DataArea;
                    control.Fields["AssignedTo.DisplayName"].Area = DevExpress.XtraPivotGrid.PivotArea.RowArea;
                    PivotGridSettingsHelper.SavePivotGridSettings(CreatePivotGridSettingsStore(control), analysis);
                }
            }
        }
    }
    

    CreateAnalysisControlCreatePivotGridSettingsStore方法是抽象的,因为特定平台的控制应在其中创建。因此,TaskAnalysisLayoutUpdaterBase类应在WinForms和ASP.NET模块中继承。

  • 在WinForms模块项目中实现TaskAnalysisLayoutUpdaterBase类的后代,并定义特定于WinForms的Updater。右键单击MySolution.Module.Win项目,然后选择“添加” |“添加”。新文件夹。将新的文件夹名称设置为DatabaseUpdate。右键单击DatabaseUpdate文件夹,然后选择添加|。类...。在调用的“添加新项”对话框中,将类名称设置为“ Updater”,然后单击“添加”。将以下代码添加到新创建的Updater.csUpdater.vb)文件中。

    using System;
    using DevExpress.Data.Filtering;
    using DevExpress.ExpressApp;
    using DevExpress.ExpressApp.PivotChart;
    using DevExpress.ExpressApp.PivotChart.Win;
    using DevExpress.ExpressApp.Updating;
    using DevExpress.Persistent.BaseImpl; //For XPO 
    using DevExpress.Persistent.BaseImpl.EF; //For EF 
    
    namespace MySolution.Module.Win.DatabaseUpdate {
        public class Updater : ModuleUpdater {
            public Updater(IObjectSpace objectSpace, Version currentDBVersion) : 
                base(objectSpace, currentDBVersion) { }
            public override void UpdateDatabaseAfterUpdateSchema() {
                base.UpdateDatabaseAfterUpdateSchema();
                new TaskAnalysisLayoutUpdater(ObjectSpace).Update(ObjectSpace.FindObject<Analysis>(
                    CriteriaOperator.Parse("Name = 'Completed tasks'")));
                ObjectSpace.CommitChanges();
            }
        }
        public class TaskAnalysisLayoutUpdater : 
                MySolution.Module.DatabaseUpdate.TaskAnalysisLayoutUpdaterBase {
            public TaskAnalysisLayoutUpdater(IObjectSpace objectSpace) : base(objectSpace) { }
            protected override IAnalysisControl CreateAnalysisControl() {
                return new AnalysisControlWin();
            }
            protected override DevExpress.Persistent.Base.IPivotGridSettingsStore 
                                          CreatePivotGridSettingsStore(IAnalysisControl control) {
                return new PivotGridControlSettingsStore(((AnalysisControlWin)control).PivotGrid);
            }
        }
    }
    
  • 在ASP.NET模块项目中实现TaskAnalysisLayoutUpdaterBase类的后代,并定义特定于Web的Updater。右键单击MySolution.Module.Web项目,然后选择“添加” |“添加”。新文件夹。将新的文件夹名称设置为DatabaseUpdate。右键单击DatabaseUpdate文件夹,然后选择添加|。类...。在调用的“添加新项”对话框中,将类名称设置为“ Updater”,然后单击“添加”。将以下代码添加到新创建的Updater.csUpdater.vb)文件中。

    using System;
    using DevExpress.Data.Filtering;
    using DevExpress.ExpressApp;
    using DevExpress.ExpressApp.PivotChart;
    using DevExpress.ExpressApp.PivotChart.Web;
    using DevExpress.ExpressApp.Updating;
    using DevExpress.Persistent.BaseImpl.EF;
    using MySolution.Module.BusinessObjects;
    using MySolution.Module.DatabaseUpdate;
    
    namespace MySolution.Module.Web.DatabaseUpdate {
        public class Updater : ModuleUpdater {
            public Updater(IObjectSpace objectSpace, Version currentDBVersion) : 
                base(objectSpace, currentDBVersion) { }
            public override void UpdateDatabaseAfterUpdateSchema() {
                base.UpdateDatabaseAfterUpdateSchema();
                new TaskAnalysisLayoutUpdater(ObjectSpace).Update(ObjectSpace.FindObject<Analysis>(
                    CriteriaOperator.Parse("Name = 'Completed tasks'")));
                ObjectSpace.CommitChanges();
            }
        }
        public class TaskAnalysisLayoutUpdater : 
            MySolution.Module.DatabaseUpdate.TaskAnalysisLayoutUpdaterBase {
            public TaskAnalysisLayoutUpdater(IObjectSpace objectSpace) : base(objectSpace) { }
            protected override IAnalysisControl CreateAnalysisControl() {
                return new AnalysisControlWeb();
            }
            protected override DevExpress.Persistent.Base.IPivotGridSettingsStore 
                    CreatePivotGridSettingsStore(IAnalysisControl control) {
                return new ASPxPivotGridSettingsStore(((AnalysisControlWeb)control).PivotGrid);
            }
        }
    }
    

    加载应用程序时,如果在数据库中找到了分析,则将保存为“完成的任务”分析指定的枢轴网格配置。

  • 若要注册创建的Updater类,请按照以下步骤在WinForms和ASP.NET模块(WinModule.cs和WebModule.cs或WinModule.vb和WebModule.vb)中重写GetModuleUpdaters方法实现。

    public override IEnumerable<ModuleUpdater> GetModuleUpdaters(
    IObjectSpace objectSpace, Version versionFromDB) {
        ModuleUpdater updater = new DatabaseUpdate.Updater(objectSpace, versionFromDB);
        return new ModuleUpdater[] { updater };
    }
    
  • 现在,如果您运行WinForms或ASP.NET应用程序,则调用自动创建的“完成的任务”分析,然后单击“绑定分析数据”按钮(绑定分析数据)。您将看到枢轴网格字段是自动配置的。

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