找回密码
 立即注册

QQ登录

只需一步,快速开始

DannyChan

注册会员

8

主题

24

帖子

90

积分

注册会员

积分
90
DannyChan
注册会员   /  发表于:2024-11-7 17:09  /   查看:374  /  回复:7
1金币


【V18 core】自定义的函数无法使用,预览时空白!



附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

这个问题已经解决: 是因为AR18使用的 useReportDesigner 这个里面默认吧报表预览的包含了。所以写这个导致 useReportViewer的里面的自定义不生效了。 如果想要生效,可以使用以前的 useDesigner。这个会只影响设计器。然后useReportViewer的自定义设定就可以生效了

7 个回复

倒序浏览
最佳答案
最佳答案
Felix.LiWyn认证
超级版主   /  发表于:2024-11-7 17:09:40
来自 8#
这个问题已经解决:
是因为AR18使用的 useReportDesigner

这个里面默认吧报表预览的包含了。所以写这个导致
useReportViewer的里面的自定义不生效了。
如果想要生效,可以使用以前的
useDesigner。这个会只影响设计器。然后useReportViewer的自定义设定就可以生效了
回复 使用道具 举报
Felix.LiWyn认证
超级版主   /  发表于:2024-11-8 17:08:58
2#
您好,AR18的自定义获取报表已经重构,所以以前的会有点不一样,新版本的写法需要用到

UseReportProvider
您可以参考这个Demo:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
DannyChan
注册会员   /  发表于:2024-11-11 10:41:25
3#
Felix.Li 发表于 2024-11-8 17:08
您好,AR18的自定义获取报表已经重构,所以以前的会有点不一样,新版本的写法需要用到

UseReportProvide ...

按照您说的,依然没法显示。
回复 使用道具 举报
DannyChan
注册会员   /  发表于:2024-11-11 10:44:17
4#
Felix.Li 发表于 2024-11-8 17:08
您好,AR18的自定义获取报表已经重构,所以以前的会有点不一样,新版本的写法需要用到

UseReportProvide ...

按照您说的也没用;




  1. namespace FunctionExt
  2. {
  3.     public static class CustomCode
  4.     {
  5.         public static string PadLeft(string input, int width)//自定义函数 PadLeft
  6.         {
  7.             return "测试";//返回值
  8.         }
  9.     }
  10. }
复制代码


  1. using System.IO;
  2. using Microsoft.AspNetCore.Builder;
  3. using Microsoft.AspNetCore.Hosting;
  4. using Microsoft.Extensions.Hosting;
  5. using Microsoft.Extensions.Configuration;
  6. using Microsoft.Extensions.DependencyInjection;

  7. using GrapeCity.ActiveReports.Aspnetcore.Viewer;
  8. using GrapeCity.ActiveReports.Aspnetcore.Designer;

  9. using System.Text;
  10. using GrapeCity.ActiveReports.Web.Designer;
  11. using GrapeCity.ActiveReports;
  12. using System.Web;
  13. using System;
  14. using System.Diagnostics;
  15. using DocumentFormat.OpenXml.Wordprocessing;
  16. using GrapeCity.ActiveReports.Web.Viewer;
  17. using GrapeCity.DataVisualization.TypeScript;
  18. using System.Xml;
  19. using WebDesignerMvcCore;
  20. using FunctionExt;


  21. namespace WebDesignerMvcCore
  22. {
  23.     public class Startup
  24.     {
  25.         private static readonly DirectoryInfo ResourcesRootDirectory =
  26.             new DirectoryInfo(Path.Combine(Directory.GetCurrentDirectory(), "resources" + Path.DirectorySeparatorChar));


  27.         // 构建 Report 文件夹的路径
  28.         public static string currentDirectory = AppDomain.CurrentDomain.BaseDirectory;
  29.         public static string reportFolderPath = Path.Combine(currentDirectory, "../../../report/");
  30.         public static readonly DirectoryInfo ReportsDirectory = new DirectoryInfo(reportFolderPath);

  31.         public Startup(IConfiguration configuration)
  32.         {
  33.             Configuration = configuration;
  34.         }

  35.         public IConfiguration Configuration { get; }

  36.         // This method gets called by the runtime. Use this method to add services to the container.
  37.         public void ConfigureServices(IServiceCollection services)
  38.         {
  39.             Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

  40.             services
  41.                 .AddReportViewer()
  42.                 .AddReportDesigner()
  43.                 .AddMvc(options => options.EnableEndpointRouting = false)
  44.                 .AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null);
  45.         }

  46.         // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.


  47.         public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  48.         {
  49.             if (env.IsDevelopment())
  50.             {
  51.                 app.UseDeveloperExceptionPage();
  52.             }
  53.             app.UseReportDesigner(config =>
  54.                 config.UseFileStore(ResourcesRootDirectory, null, FileStoreOptions.NestedFoldersLookup));
  55.             app.UseFileServer();

  56.             app.UseReportViewer(settings =>
  57.             {
  58.                 settings.UseReportProvider(new reportProvider());
  59.                 //settings.UseFileStore(ReportsDirectory);
  60.             });

  61.             app.UseMvc();

  62.         }
  63.     }
  64. }


  65. public class reportProvider : IReportProvider
  66. {

  67.     public Stream GetReport(string reportId)
  68.     {
  69.         reportId = reportId.replace(".rdlx", "");
  70.         //var reportStream = Startup.reportCacheService.GetCachedReport(reportId);
  71.        // if (reportStream == null) {
  72.         var reportXML = getReportFromXML(reportId);
  73.         PageReport pageReport;
  74.         using (TextReader reader = new StringReader(reportXML.OuterXml))
  75.         {
  76.             pageReport = new PageReport(reader);
  77.             var customCodeAssembly = typeof(CustomCode).Assembly;
  78.             pageReport.Report.CodeModules.Add(customCodeAssembly.ToString());
  79.         }
  80.         byte[] xmlBytes;


  81.         xmlBytes = Encoding.UTF8.GetBytes(pageReport.ToRdlString());
  82.         return new MemoryStream(xmlBytes);
  83.        // }
  84.         //return reportStream;
  85.     }

  86.     public ReportDescriptor GetReportDescriptor(string reportId)
  87.     {
  88.         return new ReportDescriptor(ReportType.RdlXml);
  89.     }

  90.     public XmlDocument getReportFromXML(string name)
  91.     {
  92.         string xmlFilePath = Startup.ReportsDirectory + name + ".rdlx";
  93.         Console.WriteLine(xmlFilePath);

  94.         try
  95.         {
  96.             // 加载 XML 文件
  97.             XmlDocument xmlDoc = new XmlDocument();
  98.             xmlDoc.Load(xmlFilePath);
  99.             return xmlDoc;
  100.         }
  101.         catch (Exception ex)
  102.         {
  103.             Console.WriteLine("Exception: " + ex.Message);
  104.             throw ex;
  105.         }
  106.     }
  107. }

复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Felix.LiWyn认证
超级版主   /  发表于:2024-11-11 11:42:42
5#
您好,应该是您的方法调用错了,看您的类是

  1. public static class CustomCode
复制代码
您的调用应该是:
  1. FunctionExt.CustomCode.PadLeft("123",121)
复制代码
别的看起来没有什么问题
回复 使用道具 举报
DannyChan
注册会员   /  发表于:2024-11-12 10:09:55
6#
Felix.Li 发表于 2024-11-11 11:42
您好,应该是您的方法调用错了,看您的类是

您的调用应该是:

抱歉,图贴错了

但是不行,不会显示目标值

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Felix.LiWyn认证
超级版主   /  发表于:2024-11-12 15:27:58
7#
目前看着应该没有什么问题了。要不您在试试改改引用的AR的版本?


这是我Demo中的,或者您上传一个简单的Demo能复现的,从发的确实看不出什么问题了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部