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]