EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:在非XAF应用程序中使用XAF报告

本主题描述如何在非XAF应用程序中创建,设置和导出XAF报告。由于XAF将报告存储在数据库中,并且XAF报告使用对象空间来检索数据,因此您应该手动连接到XAF数据库并在非XAF应用程序中创建对象空间。

提示

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

  1. 实现IReportObjectSpaceProviderIObjectSpaceCreator接口。

    using DevExpress.ExpressApp;
    using DevExpress.ExpressApp.ReportsV2;
    using DevExpress.Persistent.Base.ReportsV2;
    // ...
    public class MyReportObjectSpaceProvider : IReportObjectSpaceProvider, IObjectSpaceCreator {
        IObjectSpaceProvider objectSpaceProvider;
        IObjectSpace objectSpace;
        public MyReportObjectSpaceProvider(IObjectSpaceProvider objectSpaceProvider)  {
            this.objectSpaceProvider = objectSpaceProvider;
        }
        public void DisposeObjectSpaces() {
            if (objectSpace != null) {
                objectSpace.Dispose();
                objectSpace = null;
            }
        }
        public IObjectSpace GetObjectSpace(Type type) {
            if (objectSpace == null) {
                objectSpace = objectSpaceProvider.CreateObjectSpace();
            }
            return objectSpace;
        }
        public IObjectSpace CreateObjectSpace(Type type) {
            return objectSpaceProvider.CreateObjectSpace();
        }
    }
    
  2. 继承ReportDataSourceHelper类,并重写CreateReportObjectSpaceProviderCore方法。

    using DevExpress.ExpressApp;
    using DevExpress.ExpressApp.ReportsV2;
    using DevExpress.Persistent.Base.ReportsV2;
    // ...
    public class MyReportDataSourceHelper : ReportDataSourceHelper {
        IObjectSpaceProvider objectSpaceProvider;
        public MyReportDataSourceHelper(IObjectSpaceProvider objectSpaceProvider) : base(null) {
            this.objectSpaceProvider = objectSpaceProvider;
        }
        protected override IReportObjectSpaceProvider CreateReportObjectSpaceProvider() {
            return new MyReportObjectSpaceProvider(objectSpaceProvider);
        }
    }
    
  3. 使用非XAF应用程序文章中的Access XAF应用程序数据中的方法创建对象空间提供程序,然后在Types Info Subsystem中注册所需的类型。

    实体框架的示例。

    using DevExpress.ExpressApp;
    using DevExpress.ExpressApp.DC;
    using DevExpress.ExpressApp.EF;
    using DevExpress.Persistent.BaseImpl.EF;
    // ...
    connectionString = 
        @"Integrated Security=SSPI;Pooling=false;MultipleActiveResultSets=True;Data Source=(localdb)\v11.0;Initial Catalog=ExportReportDemoEF";
    EFObjectSpaceProvider objectSpaceProvider = new EFObjectSpaceProvider(typeof(ExportReportDemoEFDbContext), connectionString);
    ((TypesInfo)XafTypesInfo.Instance).AddEntityStore(objectSpaceProvider.EntityStore);
    XafTypesInfo.Instance.RegisterEntity(typeof(Person));
    

    XPO的示例。

    using DevExpress.ExpressApp;
    using DevExpress.ExpressApp.DC;
    using DevExpress.ExpressApp.DC.Xpo;
    using DevExpress.ExpressApp.Xpo;
    using DevExpress.Persistent.BaseImpl;
    // ...
    connectionString =
        @"Integrated Security=SSPI;Data Source=(localdb)\v11.0;Initial Catalog=ExportReportDemo";
    XpoTypesInfoHelper.ForceInitialize();
    ITypesInfo typesInfo = XpoTypesInfoHelper.GetTypesInfo();
    XpoTypeInfoSource xpoTypeInfoSource = XpoTypesInfoHelper.GetXpoTypeInfoSource();
    typesInfo.RegisterEntity(typeof(Person));
    typesInfo.RegisterEntity(typeof(ReportDataV2));
    ConnectionStringDataStoreProvider dataStoreProvider = new ConnectionStringDataStoreProvider(connectionString);
    XPObjectSpaceProvider objectSpaceProvider = new XPObjectSpaceProvider(dataStoreProvider, typesInfo, xpoTypeInfoSource);
    
  4. 使用如何:在不显示预览的情况下打印报告主题中描述的方法来访问和打印报告。

    using DevExpress.ExpressApp;
    using DevExpress.XtraReports.UI;
    using DevExpress.ExpressApp.ReportsV2;
    // ...
    IObjectSpace objectSpace = objectSpaceProvider.CreateObjectSpace();
    ReportDataV2 reportData = objectSpace.FindObject<ReportDataV2>(
        new BinaryOperator("DisplayName", "Employees Report"));
    XtraReport report = ReportDataProvider.ReportsStorage.LoadReport(reportData);
    MyReportDataSourceHelper reportDataSourceHelper = new MyReportDataSourceHelper(objectSpaceProvider);
    ReportDataProvider.ReportObjectSpaceProvider = new MyReportObjectSpaceProvider(objectSpaceProvider);
    reportDataSourceHelper.SetupBeforePrint(report);
    report.ExportToPdf("report.pdf");
    

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