当前位置: 首页 > news >正文

FastReport在线报表设计器工作原理

FastReport Online Designer工作原理

working-principle.jpg
Online Designer可以与FastReport.Net的Win+Web版,专业版,企业版中的FastReport.Net WebReport对象一起使用。
在线设计器可以改变报表的报告和事件处理程序的脚本,但默认情况下,出于安全原因,该选项被禁用。该功能可在WebReport对象的属性中来启用。当这个选项在脚本内容中被禁用,之后的设计将被忽略被原来的文本替换。此外,为了安全起见,我们不发送Designer中内置的连接字符串。

  1. WebReport对象在ASP.NET页面加载。

  2. WebReport发送一个Ajax请求到FastReport的处理程序,以获得在iframe环境的在线设计器容器(报表设计器的代码被放置在应用程序站点的一个单独的文件夹里)。

  3. 当在线设计器在浏览器中加载,它发送AJAX查询到处理程序以获取报表模板(getReportByUUIDFrom)。

  4. 服务器应用程序准备并发送一个报表模板到在线设计器。

  5. 设计器可以请求预览当前报表,通过发送请求到服务器中的处理器(makePreviewByUUID)。服务器应用程序运行收到的报表,并以html返回结果。然后设计器在预览窗口显示出来,该预览可以打印或以多种格式导出。

  6. 设计器可以通过带有报表内容的AJAX查询(saveReportByUUIDTo)将报表保存在服务器中。服务器应用程序准备接收数据并发送请求到应用程序的回拨页面。

WebReport对象存在服务器缓存中的时间有限,然后从存储器中被删除。对象在内存中的保存时间由WebReport.CacheDelay属性决定,以分钟计算(默认情况下是60)。

>>FastREport Online Designer立即在线体验

Online Designer的设置手册:

  1. 首先,从安装路径复制带有在线设计器的文件夹(默认:WebReportDesigner)到Web应用程序根的目录。

2.然后检查WebReport功能所需的处理程序设置文件web.config:
IIS6:

< system.web>
…
< httpHandlers>
< add path="FastReport.Export.axd" verb="*" type="FastReport.Web.Handlers.WebExport"/>
< /httpHandlers>
< /system.web>

IIS7:

< system.webServer>
< handlers>
< add name="FastReportHandler" path="FastReport.Export.axd" verb="*"
type="FastReport.Web.Handlers.WebExport"/>
< /handlers>
< /system.webServer>

3.然后检查Web/ ReportDesigner/scripts/ cofig-data.js文件中的报表设计器的设置:

'getReportByUUIDFrom': '/FastReport.Export.axd?getReport=',
'saveReportByUUIDTo': '/FastReport.Export.axd?putReport=',
'makePreviewByUUID': '/FastReport.Export.axd?makePreview=',

这些参数应包含FastReport处理器相对于网站的根目录的路径。如果路径与所写不同,必须要纠正,例如:

'getReportByUUIDFrom': '/oursite/FastReport.Export.axd?getReport=',

4.当WebReport用于ASPX标记中,你需要将对象拖拽到页面上并设置其属性。对于MVC,你需要在控制器中写入代码:

4.1. 启用报表的编辑功能:

webReport.DesignReport = true;

4.2. 设置的唯一对象名称WebReport,必要时可以在回调页面设置可进一步可区分的对象名称:

webReport.ID = "MyDesignReport1";

4.3. 在在线设计器中禁止报表的脚本编辑,或者如果你想启用编辑功能 - 设置为true即可:

webReport.DesignScriptCode = false;

4.4. 指定报表设计器的主文件的路径,将带有设计器的文件夹复制到网页应用程序的适当位置:

webReport.DesignerPath = "~/WebReportDesigner/index.html";

4.5. 设置网页上的回调页面路径,该调用在报表被保存到临时文件夹后执行。例如:MVC的视图路径(你需要专门在控制器中创建一个新的相同名称的空白视图来执行回调):

webReport.DesignerSaveCallBack = "~/Home/SaveDesignedReport";

或ASPX示例:

webReport.DesignerSaveCallBack = "~/DesignerCallBack.aspx";

下面是GET请求发送的参数:

reportID="here is webReport.ID"&reportUUID="here is saved report file name"

在这儿的reportID对应WebReport.ID对象,并且名为reportUUID的文件被存储在临时文件夹中。开发人员执行进一步的操作,将报表保存到磁盘,数据库或云存储中。在保存后,名为reportUUID的临时文件必须从临时文件夹删除。也可以使用POST查询来回调报表文件的回拨转移,性情见下面的4.6。
回调页的示例代码如下。

4.6设置在执行回调前用来保存编辑后的报表的临时文件夹的路径,该文件夹必须设置写入权限:

webReport.DesignerSavePath = "~/App_Data/DesignedReports";

你也可以设置属性webReport.DesignerSavePath为空字符串以激活POST模式。

4.7. 在服务器缓存中设置WebReport对象的生命周期,以分为单位,默认时间为60:

webReport.CacheDelay = 120;

5.创建一个回调页面来保存编辑后的报表。

5.1. 如果你使用的是ASPX布局,你需要在Page_Load事件处理程序添加以下代码:

protected void Page_Load(object sender, EventArgs e)
{
string reportID = Request.QueryString["reportID"];
string reportUUID = Request.QueryString["reportUUID"];
// 1. ReportID value identifies the object that caused the designer. The value
corresponds to the property webReport.ID, which was filled by a call of the designer.
// 2. Combining the path that we have filled in the property webReport.DesignerSavePath,
and the resulting reportUUID, we get the path to the temporary file with edited report.
// 3. This file can be opened and saved in the right place for us to drive or the cloud
or in a database.
// 4. The temporary file must be deleted after saving.
}

5.2. 在MVC标记中,你需要在控制器和空视图中创建一个方法。控制器中的代码如下:

public ActionResult SaveDesignedReport(string reportID, string reportUUID)
{
// 1. ReportID value identifies the object that caused the designer. The value
corresponds to the property webReport.ID, which was filled by a call of the designer.
// 2. Combining the path that we have filled in the property webReport.DesignerSavePath,
and the resulting reportUUID, we get the path to the temporary file with edited report.
// 3. This file can be opened and saved in the right place for us to drive or the cloud
or in a database.
// 4. The temporary file must be deleted after saving.
return View();
}

在处理POST传送时需要在控制器前添加[HttpPost] ,如下:

[HttpPost]
 public ActionResult SaveDesignedReport(string reportID, string reportUUID)
{
...
}

5.3. 你可以通过webReport.DesignerLocale=“EN”属性使用在线设计器的任何本地化版本; ("en" 可以更改为其它任何支持的语言,支持的语言的完整列表存放在设计器分发包中的文件中)。
当创建回调页保存报表的处理器时应特别注意过滤和检查收到的Get请求的参数。务必确认它们为null。
在线设计器对象的最好放置地方是在页面的底部。推荐的宽度为100%或至少930px像素。对象的高度建议设置至少600px。

相关文章:

  • JavaScript是怎样AOP实现?
  • 常用公共DNS服务器地址
  • BZOJ 2733: [HNOI2012]永无乡 启发式合并treap
  • TCP/IP中的四元组、五元组、七元组
  • Win8/Win10下程序经常无响应的解决办法
  • 使用zt-exec库定时清理linux休眠进程
  • 像素密度和分辨率
  • 链表的销毁与清空(转)
  • NChome如何创建单据跟主子表还有扩展开发要怎么弄?
  • 数据库 外存储器读写数据物理过程
  • android四大组件之Service 简单音乐播放器
  • 已安装pymysql 但Pycharm 中import pymysql出错的解决方案
  • 关于字符串的倒置
  • 实时计算Flink——独享模式——Batch功能介绍
  • jQuery页面加载初始化的3种方法
  • (三)从jvm层面了解线程的启动和停止
  • Angular 响应式表单 基础例子
  • Apache的基本使用
  • C学习-枚举(九)
  • Flex布局到底解决了什么问题
  • gops —— Go 程序诊断分析工具
  • GraphQL学习过程应该是这样的
  • isset在php5.6-和php7.0+的一些差异
  • javascript数组去重/查找/插入/删除
  • MySQL-事务管理(基础)
  • python 学习笔记 - Queue Pipes,进程间通讯
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • Web设计流程优化:网页效果图设计新思路
  • 创建一种深思熟虑的文化
  • 浮动相关
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 删除表内多余的重复数据
  • 微信开放平台全网发布【失败】的几点排查方法
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 自动记录MySQL慢查询快照脚本
  • 【干货分享】dos命令大全
  • Android开发者必备:推荐一款助力开发的开源APP
  • 昨天1024程序员节,我故意写了个死循环~
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #Linux(Source Insight安装及工程建立)
  • #控制台大学课堂点名问题_课堂随机点名
  • (1)Nginx简介和安装教程
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (二)linux使用docker容器运行mysql
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (七)c52学习之旅-中断
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (三)模仿学习-Action数据的模仿
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)