Felix.Li 发表于 2023-12-7 11:35:42

ActiveReports 17.2 新特性-WebDesigner 中的共享数据源支持

本帖最后由 Bella.Yuan 于 2023-12-11 10:25 编辑

17.2.0将共享数据源也添加到web设计器里面。以前只能在桌面设计器使用共享数据源。现在web端也可以了。

那什么是共享数据源和为什么要用他呢?
首先共享数据源简单的说就是可以共享使用,每个人都可以直接通过选择就是用这个数据源,而不在需要输入连接信息 。
那么使用场景当然也就可想而知了,就是不希望设计报表的人员看到数据库连接信息。他们只需要关注设计报表即可。而且也不用担心数据库连接信息被知道。
那么接下来就给大家说一下,web端如何使用共享数据源。(WebDesigner)
首先,共享数据源需要使用桌面设计器设计出来,具体操作如下:

只需要将桌面设计器设计好的数据源,右键点击共享数据员,即可保存为.rdsx文件(共享数据源)

WebDesigner:
添加共享数据源整体只需要3步。本文以如下链接示例为例子:
https://github.com/activereports/WebSamples17/tree/main/WebDesignerSamples/WebDesigner_MVC_Core
准备工作,将准备好的rdsx文件放置在resource文件夹下

1.自己新创建一个类,实现:ISharedDataSourceService接口,示例代码:
public class SharedDataSourceService : ISharedDataSourceService
{
      public SharedDataSourceInfo[] GetSharedDataSourceList()
      {
                return Startup.ResourcesRootDirectory
                        .EnumerateFiles("*.rdsx")
                        .Select(x =>
                        {
                              var dataSource = GetDataSource(x.Name);
                              return new SharedDataSourceInfo()
                              {
                                        Name = x.Name,
                                        Type = dataSource.ConnectionProperties.DataProvider
                              };
                        }).ToArray();
      }
      public DataSource GetDataSource(string name)
      {
                return DataSourceTools.LoadSharedDataSource(Path.Combine(Startup.ResourcesRootDirectory.FullName, name));
      }

}
如上代码其实就是读取 resource目录。然后把以.rdsx为后缀的文件全部拿到。返回为指定格式的数组。

2.修改startup文件。
在ConfigureServices 方法中,新添加.AddSingleton<ISharedDataSourceService, SharedDataSourceService>() 将我们刚实现的类注册进来。
完整代码:
public void ConfigureServices(IServiceCollection services)
{
      Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

      services
                .AddReporting()
                .AddDesigner()
                .AddSingleton<ITemplatesService>(new FileSystemTemplates(TemplatesRootDirectory))
                .AddSingleton<IDataSetsService>(new CustomDataSetTemplates())
                .AddSingleton<ISharedDataSourceService, SharedDataSourceService>()
                .AddMvc(options => options.EnableEndpointRouting = false)
                .AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null);
}其次修改Configure方法,新增一个入参,ISharedDataSourceService sharedDataSourceService 依旧是我们刚才注册的。
其次在useDesigner中,添加config.UseSharedDataSources(sharedDataSourceService);将入参传递进来。
完整代码:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IDataSetsService dataSetsService, ISharedDataSourceService sharedDataSourceService)
{
      if (env.IsDevelopment())
      {
                app.UseDeveloperExceptionPage();
      }
      
      app.UseFileServer();

      app.UseReporting(config => config.UseFileStore(ResourcesRootDirectory));
      app.UseDesigner(config =>
      {
                config.UseSharedDataSources(sharedDataSourceService);
                config.UseFileStore(ResourcesRootDirectory, false);
                config.UseDataSetTemplates(dataSetsService);
      });


      app.UseMvc();
}3.修改前段js,将共享数据源开放出来
这个我们只需要在create的时候,修改data的一个对象即可
完整代码:
arWebDesigner.create('#ar-web-designer', {
rpx: { enabled: true },
appBar: { openButton: { visible: true } },
data: {
    dataSets: { canModify: true }, dataSources: {
      canModify: true,
      shared: { enabled: true }
    }
},
preview: {
    openViewer: (options) => {
      if (viewer) {
      viewer.openReport(options.documentInfo.id);
      return;
      }
      viewer = createViewer({
      element: '#' + options.element,
      reportService: {
          url: 'api/reporting',
      },
      reportID: options.documentInfo.id,
      settings: {
          zoomType: 'FitPage',
      },
      });
    }
}
});data -> dataSource -> shared开启即可。
至此,一个webDesigner的共享数据源添加就完成了。

示例Demo:

页: [1]
查看完整版本: ActiveReports 17.2 新特性-WebDesigner 中的共享数据源支持