报表文件和Resources文件夹之间多了一级目录,SDK默认的方法怎么去访问报表文件
本帖最后由 Felix.Li 于 2023-3-28 09:58 编辑报表文件和Resources文件夹之间多了一级目录,SDK默认的方法怎么去访问报表文件
您好,可以参考下图进行路径的修改:
我们的第二级目录名不固定,需要动态更改,这种情况怎么获取到下面的报表文件 mm-bzu 发表于 2023-3-21 15:17
我们的第二级目录名不固定,需要动态更改,这种情况怎么获取到下面的报表文件
那您可以尝试试用动态的变量来获取二级目录名称,然后拼接成最终的地址呢。 Eden.Sun 发表于 2023-3-21 15:53
那您可以尝试试用动态的变量来获取二级目录名称,然后拼接成最终的地址呢。
需要如何才能动态更改,这个不是在应用启动时就确定的路径吗?
我的代码如下:
private static readonly DirectoryInfo ResourcesRootDirectory =new DirectoryInfo(Path.Combine(Directory.GetCurrentDirectory(), "Reports/Resources" + Path.DirectorySeparatorChar));
public static IApplicationBuilder UseReport(this IApplicationBuilder app)
{
//初始化报表配置
ReportConfiguration.Instance.InitSettings();
app.UseReportViewer(config => {
//报表资源文件
config.UseFileStore(ResourcesRootDirectory);
config.LocateDataSource = args =>
{
//数据源类型,需要根据数据源类型返回对应的数据,例如:如果是Json类型,则需要返回Json类型的数据
var dataSourceType = args.Report.DataSources.ConnectionProperties.DataProvider;
var vals = (object[])args.ReportParameters.Value;
//var settings = ReportConfiguration.GetConfiguration(Regex.Replace(args.Report.Name.Replace(".rdlx",""), @"\d+$", ""));
var settings = ReportConfiguration.GetConfiguration(vals.ToString());
//内置数据源DataTable
if (settings != null && "DATASET".Equals(dataSourceType))
{
//动态获取数据源服务实例
var serviceProvider = app.ApplicationServices;
var reportServiceFactory = serviceProvider.GetService<IReportServiceFactory>();
var strategy = reportServiceFactory.GetReportService(settings.StrategyType);
if (strategy != null)
{
return strategy.LoadData(args).GetAwaiter().GetResult();
}
}
// TODO:处理不支持的数据源类型
return null;
};
});
app.UseReportDesigner(config =>
{
config.UseFileStore(ResourcesRootDirectory, null, FileStoreOptions.NestedFoldersLookup);
//config.UseResourcesProvider();
});
return app;
}
需要调整哪个位置才能访问报表文件? 这个目录必须确定,如果是动态的,就不能走这个了,需要走customerStore:
https://github.com/activereports/WebSamples17/tree/main/WebDesignerSamples/WebDesigner_CustomStore
config.UseCustomStore(id =>
{
if (".rpx".Equals(Path.GetExtension(id), StringComparison.InvariantCultureIgnoreCase))
return resourcesService.GetSectionReport(id);
return resourcesService.GetReport(id);
})这个方法返回一个pageReport即可。参考示例Demo即可
页:
[1]