mm-bzu 发表于 2023-3-20 16:31:09

报表文件和Resources文件夹之间多了一级目录,SDK默认的方法怎么去访问报表文件

本帖最后由 Felix.Li 于 2023-3-28 09:58 编辑

报表文件和Resources文件夹之间多了一级目录,SDK默认的方法怎么去访问报表文件

Bella.Yuan 发表于 2023-3-20 18:30:11

您好,可以参考下图进行路径的修改:


mm-bzu 发表于 2023-3-21 15:17:16

我们的第二级目录名不固定,需要动态更改,这种情况怎么获取到下面的报表文件

Eden.Sun 发表于 2023-3-21 15:53:28

mm-bzu 发表于 2023-3-21 15:17
我们的第二级目录名不固定,需要动态更改,这种情况怎么获取到下面的报表文件

那您可以尝试试用动态的变量来获取二级目录名称,然后拼接成最终的地址呢。

Quincy 发表于 2024-10-28 16:15:50

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;
}

需要调整哪个位置才能访问报表文件?

Felix.Li 发表于 2024-10-28 18:34:37

这个目录必须确定,如果是动态的,就不能走这个了,需要走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]
查看完整版本: 报表文件和Resources文件夹之间多了一级目录,SDK默认的方法怎么去访问报表文件