- 博客(394)
- 资源 (19)
- 收藏
- 关注
原创 finereport动态数据源插件教程2
两个数据集ds1,ds2,ds1的绑定到参数面板的下拉框上,ds2显示到模板正文中,现在需要ds1根据不同的参数显示不同的值。模板中有多个数据集,只需要其中一个数据集按照不同的参数显示不同数据库的数据。
2025-01-05 19:47:48
268
原创 finereport动态数据源插件教程1
3 要实现的效果,URL上加参数role=A,使用连接finedb10的数据,URL上加参数role=B,使用连接finedb10_dep中的数据。用连接finedb10新建SQL数据集ds1来制作报表。分别新建连接finedb10,finedb10_dep。到决策系统--动态数据源配置中配置两条记录。
2025-01-05 13:44:38
379
原创 finereport动态数据源插件的来源
1 何为动态数据源,官方的解释为:用户存在多个数据库,一部分是测试库,一部分是正式库。数据库中每张表的表结构是完全一样的,只有存放的数据不同。动态数据源插件解决的问题就是不要让数据库名字,IP地址,端口等敏感信息不要暴露出来。实现方式就是将不同的数据库创建对应的连接,再模板运行时来切换到不同的连接上来达到展现不同库里的数据。根据官方的解决方案,需要将数据库名字,IP地址,端口定义成变量,通过URL来传递这些参数的值来达到替换的目的,但是这样就造成了数据库IP,端口等信息的暴露,是非常不安全的。
2025-01-05 11:35:45
197
原创 finereport新的数据工厂插件使用场景 二 参数混合计算场景
还是两个接口,一个接口获取一个accessToken,另外一个接口通过accessToken来获取数据,但是第二个接口需要传递一个base64的签名信息,签名规则为: accessToken + ":"+ signSecret + ":" + timestamp ,其中timestamp需要作为参数传递,signSecret是前后端约定的一个参数,这里把signSecret的值放在报表单元格上。从断点中可以看到传过来的sign参数与重新签名的参数mySign的值是一样的。
2024-12-20 17:42:41
93
原创 finereport新的数据工厂插件使用场景一 通过accessToken获取数据
1 有两个接口,一个接口获取一个accessToken,一个接口根据accessToken来获取数据。结果path配的{"dataPath":"$.data.accessToken","fields":[]}第一步,配置接口df_test/getAccessToken,如下图。可以看到以及把accessToken取到了。现在通过新的数据工厂来实现获取接口数据。第二步配置获取数据的接口服务。3 到设计器中去使用。
2024-12-19 21:11:08
204
原创 finereport新的数据工厂插件
参数是否混合计算:这个用于该场景下,比如有个接口有个参数a,他的值是当前时间戳进行MD5加密而来,那么添加两个参数b,a,在设计器那边将参数a的值定义为设计器中的公司,公式这样写:md5(b), 如果不勾选参数是否混合计算,那么公式计算时会得不到b的值,只有勾选后才会将b的值放到公式的上下文中去。依赖的参数的配置位置一定要在被定义的参数之前,比如上面的场景,需要先添加参数b,再添加参数a,也就是说当计算参数a的值时,参数b的值一定是计算好了。其他服务:可以将其他接口的返回值作为该接口的参数值。
2024-12-19 18:25:30
189
原创 FR动态数据源插件支持配置模板中某个数据集进行数据连接的切换
当访问模板A时,URL的参数role的值为A时就使用finedb10中的test_data表中的数据,当role的值为B时,就使用数据连接finedb10_dep中的test_data表中的数据。这样有效的保护了数据库的信息,配置对象可以为所有的模板,也可以为单个模板,甚至是单个数据集。如果你选择参数来源类型是来源URL,那么这里你需要输入一个role值,如果你选择的是来源决策系统角色,那么这里是一个下拉列表,会将当前系统的所有角色列出来选择。一个模板中有多个数据集,配置只有某个数据集可以切换数据连接。
2024-11-05 18:29:49
98
原创 FineBi工具栏增加按钮
分别再两个场景中,第一个场景是决策系统的目录界面里的报表工具栏增加按钮与我的分析中的仪表板的工具栏增加按钮,这两个地方是一样的方式增加,第二个场景是仪表板的编辑界面的工具栏增加按钮。
2024-06-11 07:22:40
379
原创 finebi或者finereport发邮件
我们二次开发中,如果想利用产品自带的发邮件的功能,来发送自己的邮件内容。这里配好了发件人,以及默认发件人后,
2024-06-02 09:21:52
801
原创 FineBi导出Excel后台版实现
我这里是将这个帮助文档中导出的excel文件写到服务器某个地方后,对excel进行其他操作后再下载。由于原有接口耦合了HttpServletRequest req, HttpServletResponse res对象,所以想要再后台运行需要改造原有代码。需要将DirectExcelExportServiceImpl改造,参考他的实现,改造类有两个:MyAbstractDirectExportService,MyDirectExcelExportServiceImpl。就是不通过浏览器,在后台运行的导出。
2024-06-01 18:16:07
540
2
原创 FR在开发组件时的注意事项
另外就是决策系统中的组件如果是想修改产品组件本身的功能,这里建议不要去继承产品的组件来修改,这里产品的组件不是标准的组件,很难去继承实现,很困难,最好是写自己的新组件来实现。而普通报表的参数面板组件,填报下的组件是标准的组件,很容易继承来实现。决策系统下就没有FR.ComboBoxEditor组件了,可以参考report.single_select_combo类,但这并不是下拉框的真正实现类,它外面还有一层。FR目前可以在三个地方开发自己的组件,普通报表参数面板上,普通报表填报下,决策系统中。
2024-05-05 16:47:05
350
原创 Fr目录挂载第三方连接后,在目录里打开的时候是直接弹出一个新窗口打开,而不是在决策系统打开,并且菜单上不要有选中状态,
如果有选中状态,如果想点击其他的,需要先取消这个的选中状态。
2024-04-22 07:24:40
122
原创 FineBi中创建自定义的图表
这里会发送方几个消息。4 在bi.plugin.client.min.js中定义了window.BIPlugin对象,我们的自定义组表组件的js就是通过BIPlugin对象来将我们自己的逻辑注入进去。从init方法中可以看到,他会监听iframe的外部的消息,init可以有两个参数,第一个是render函数,第二个是refresh函数。3 自定义图表组件是用conf.min.js中的 bi.custom.chartdisplay 组件来渲染的。-- 下面的js代码是我们代码中要求引入的 -->
2024-04-22 06:54:09
836
原创 finereport11远程设计器保存模板时源码分析
相关的类有:ServerTplOperator,RemoteDesignHelper,FileLockHelper,TplOperator。5 下一步ServerWorkResource的save方法。它实现了接口WorkResource,里面就是对文件的基本操作。messageListener的默认实现类是WorkspaceServerInvoker,可以修改它来做自己的事。2 远程设计器收到本地保存消息是在RemoteDesignResource的onMessage方法。
2024-04-16 08:41:40
157
原创 fr中如果要调整FVS中的图表类组件的相关属性的研究摘要
resource=/com/fr/plugin/wysiwyg/web/static/js/preview.f8c6df67.chunk.js中。用svg画的,vancharts-all.js中搜索_svgRender方法,他内部是遍历this.series来绘制每条path。对dom元素inner-widget-container就行管理的类是:27085行, function A(t) ,加了一些事件的监听。搜索 t.ctx.fillText(r, u, h),// 这里可以执行你需要的操作。
2024-04-09 07:02:20
226
原创 FR中隐藏系统管理--用户管理中 表格中每条数据中的编辑按钮,删除按钮
【代码】FR中隐藏系统管理--用户管理中 表格中每条数据中的编辑按钮,删除按钮。
2024-04-09 06:58:07
129
原创 完美解决Iframe嵌入帆软报表出现跨域cookie写不进去的问题
那报表后续的请求如何加上这个fine_auth_token,通过观察,我们发现,如果给报表url上加上fine_auth_token,后续的请求中的Refer也会有这个fine_auth_token。我们可以这样想,如果帆软内部获取token,如果从cookie中获取不到,就从url上获取,如果url上也获取不到,那么就从请求Refer请求头中获取也可以拿到这个token了。从上面看到,如果从cookie中没有获取到,就从请求头中获取,还是没有就从paramter中获取。
2024-02-29 15:45:22
2412
1
原创 FCRP第一题详解一
所以这里不能通过SQL语句来过滤,SQL语句中中只能全部查询出来,这样保证了下拉框的数据是全部,单元格里的数据只能通过数据列过滤来实现。公式里这样写:if(len($productName)==0,nofilter,$productName)整个模板只能出现一个数据集,下拉复选框与报表主体共用一个数据集,且不影响互相显示。然后运行模板,初步做到了下拉框里是所有的商品名,选中商品,查询出来的结果就是谁。下拉框的控件名字改为 productName,绑定模板参数。返回值为数组,返回值里放的是产品名。
2024-01-09 20:41:48
962
原创 如何将ElementUI组件库中的时间控件迁移到帆软报表中
appearanceForWidget:返回组件属性的实现类,这里面就是设计器右边属性面板上的属性,实现当修改了属性面板的值会传递到 classForWidget对应的类中来保存。classForWidget:返回组件的定义类,里面定义组件的属性,运行时需要向前端传递哪些属性,序列化保存,读出配置的属性。需求:需要将ElementUI组件库中的时间控件迁移到帆软报表中,具体为普通报表的参数面板中,填报报表的组件中,决策报表的组件与参数面板中。iconPathForWidget:设计器上该组件的图标。
2024-01-05 11:59:39
930
原创 帆软报表如何灵活控制水印的显示
经过分析发现报表预览时,这个属性是在MemXPageWorkBookExecutor类的dealWithExecutedAttr方法中来做的,填报是在WriteWorkBookExecutor类的dealWithExecutedAttr类中实现的。在他的newAppExporter方法中使用自己的exporter,在自己的exporter的exportFor2007方法中提前去处理ResultWorkBook的WatermarkAttr属性。这时产品的功能就实现不了了。
2023-12-30 20:58:37
869
原创 帆软报表中定时调度中的最后一步如何增加新的处理方式
2 后端改造,首先定义一个com.fr.plugin.xxxx.bean的类,来封装这些属性,他需要实现BaseOutputAction类,他的runType需要返回RunType.SEND_FILE。在定时调度中,到调度执行完之后,我们可能想做一些别的事情,当自带的处理方式不满足时,可以自定义自己的处理方式。可以从bean里拿到页面配置的信息,从Map中拿到调度里配置的其他信息,就可以完成你想做的事了。前端需要处理新的处理方式的界面,后端需要读出前端的配置信息来做实际的处理。
2023-12-29 21:11:12
1178
原创 帆软报表中定时调度中使用自己的短信平台,并且不使用官方商城里的模板
首先我们观察 这里获取短信模板信息的请求是v10/config/sms,我们可以将他返回的内容更改,就能达到读取我们自己的模板信息。限制太多,使用起来非常不方便,如果我们想要使用自己的短信签名,并且使用自己的短信发送平台。其次,通过官方的开放接口SMSServiceProvider可以调用自己的短信平台来发送短信。此时需要帆软市场,并且短信模板只能使用帆软市场里配置的短信模板。调用自己的短信平台来发送。
2023-12-29 11:31:37
620
原创 帆软报表初始化时关于SessionPoolManager的过程
首先看到这里有个开放接口 RequestParameterCollector,如果我们想要收集一些特殊参数,可以通过他来实现。Weblet的dealWeblet方法中,不同的报表类型返回的是不同的Weblet,比如cpt返回的就是StreamReportlet。最后,如果我们想要获取,怎么获取呢,在每个报表访问的时候有个sessionId,我们可以跟他他来获取。这里是他的创建过程,这里首先是收集相关参数到一个Map中。可以看到我们平常用的一些变量比如fine_username是在这里收集到的。
2023-12-15 12:46:55
593
原创 帆软报表分页预览如何增加一种新的导出类型。
首先该页面的内容是通过MemXPageActor的flushHtml方法产生的。所以我们需要继承MemXPageActor来重载flushHtml。在里面加入自己的新的菜单项以及调用的js。通过分析源码,发现这个菜单的定义是再报表预览加载的html页面里面。如图,这里要在 导出下拉菜单中新增一个签章PDF的导出。咋们如何再这里面插入我们新加的菜单项呢。
2023-07-14 20:20:20
605
原创 帆软报表二次开发 树组件节点上添加自己的按钮
那怎么实现呢,这里采用拦截makeDOMNodeMainAfte方法,在它的内部先插入我们自己的组件,最后再插入标签。这就是构建li的方法,我们可以在调用makeDOMNodeMainAfte之前插入我们的内容来达到在树节点上添加自己的组件。我这里是有条件的加入自己的组件,加入了一个复制按钮,点击时将url属性复制到剪贴板上。通过查找源码发现这个组件内部构建树是通过BI.$.fn.zTree来构建的,我这里的需求是在树组件的子节点上加一个复制按钮。它里面有个view,通过view来构建的。
2023-06-12 06:21:17
851
原创 帆软报表分页预览打印,如果列数过多,打印时会将多余的列放到第二页来打印,现在需要把所有的列都放在一页来打印。并且填满整个区域
但是我现在想要的效果是所有的列都在一页里,列不分页。并且要填满整个区域。当我们的报表列数过多时,打印的时候多余的列会分页。可以看到27列都显示在一页里了。
2023-05-30 20:57:14
2031
原创 帆软报表决策系统定时调度后台代码知识点
1 添加定时调度的控制器是com.fr.web.controller.schedule.web.api.ScheduleTaskResource,里面有对任务的添加,执行,删除,更新等操作。2 定时调度的执行是在com.fr.schedule.extension.report.job.execute.ExecutePageJob的doJob方法,2 定时任务执行是在com.fr.schedule.feature.job.result.ExecuteResultJobdoJob方法中。
2023-03-31 17:08:17
1136
原创 帆软报表设计器 数据集之数据库查询
然后调用TableDataFactory的creatTableDataPane。当点击数据库查询时,调用TableDataTreePane的。看到他会从map中来获取。
2023-03-21 23:05:36
483
原创 帆软报表中使用悦享版文件上传下载插件UUID问题
这里只说上传,当我们使用悦享版文件上传下载插件做上传填报时,按照插件说明,如果文件名配置为uuid,通过函数FILENAME获取到的其实是文件的原始名称,并不是uuid名称.那么如果我想拿到这个uuid,并且保存到数据库中时,如何做呢?这里做上传有两种方案,第一种是根据插件说明中的使用事件,就是另外放一个按钮,点击按钮先上传文件后拿到uuid,再点报表的提交,将uuid拿到后与其他填报字段一起入库。
2023-03-21 16:37:21
913
原创 帆软报表设计器零碎知识点
var10.getRoleType() == RoleType.CUSTOM 表示是角色,远程设计权限分为按用户,按角色来配置,RoleType.CUSTOM表示这条数据是按角色来配置的。设计器中获取模板目录树有个组件叫 com.fr.design.remote.ui.tree.FileAuthorityTree。1 设计器上的远程设计权限管理菜单类是RemoteDesignAuthManagerAction。选择了用户或者角色最后保存时,是通过下面存的。当设计器连接的是远程时。
2023-03-21 06:01:06
307
原创 帆软报表各种情形下引入js
3.EncryptionComponent.KEY——$HOST/v10/encryption/page 平台切换国密的时候才可能会用到,主要用于提示异常。8.MigrationComponent.KEY——$HOST/v10/migration/page FineDb迁移数据时的进度页面,在插件中用处不大。12.WorkflowComponent.KEY——$HOST/workflow/authority 单独访问多级上报权限控制页面时生效。被依赖组件——前端页面。被依赖组件——前端页面。
2023-03-16 21:39:04
1099
原创 FineBi实现同一张仪表板,不同的人看到的数据是不同数据库的数据
配置角色finedb_role对应的数据库是finedb,角色my_finedb_role对应的数据库是myfindb。使用场景:这个主要针对的是fineBI直连模式下的数据库表与SQL数据集,因为只有这两种才谈得上去动态切换数据连接。6 新建用户gb102101,gb102102, 角色分别是finedb_role,my_finedb_role。3 在公共数据中将demo_holiday_entity加进来。7 将仪表板的权限,与数据库表的权限赋给这两人。8 分别用这两个用户登录查看仪表板。
2023-03-05 20:48:18
945
原创 分析帆软填报报表点提交的逻辑
比如op=fr_write这个服务中定义的动作处理不仅包括submit_w_report,还包括cal_write_cell,read_w_contentappend_w_data,delete_w_data等。这些都在FbtfrGtjocxa类中定义的,submit_w_report.对应的是类FbtfrGjrdamLwiimpXasipp。2 我们知道当点提交时,发送的请求中的参数为 op=fr_write,cmd=submit_w_report.他里面的dealWithConn方法是来创建连接的。
2023-03-01 13:17:47
1247
5
原创 分析finebi5.x仪表板组件获取数据过程(数据是数据集或者sql的)
当我们访问这个连接时,会来到FineLinkAction的getShareReport方法。这里面会加载一个show.min.js。
2023-02-12 10:36:03
516
原创 帆软报表动态数据源插件2.0使用教程
目前两种方案只能选择一种来使用,不能两种同时使用。如上图种配的来源于决策系统的两条数据表示,当访问报表 动态数据源\查假期数据.cpt时,如果当前登录人角色是zhangsan,就使用myfindb这个数据连接,如果当前登录人角色是lisi,就使用finedb这个数据连接。这里可以对报表进行配置,如图,这里显示了那两种方案,一种是角色的数据来源于URL上的role变量,另外一种是来源于决策系统种的角色。这里定义某个人再访问某张报表是,如果他的角色是A,就使用数据连接A,如果他的角色是B,就使用数据连接B。
2023-02-05 22:05:34
1890
原创 帆软报表设计器中如何获取单元格中的widget以及当前选中的widget
【代码】帆软报表设计器中如何获取单元格中的widget以及当前选中的widget。
2023-01-24 18:02:24
528
帆软报表Oracle存储过程解决storeParameter1参数试用插件
2022-12-12
FineBi帮助文档Word版
2022-12-02
FineReport帮助文档Word版
2022-12-02
fine-plugin-com.fr.plugin.wx.customer.login-1.0.zip
2021-09-15
zk开发文档pdf
2013-03-22
Focal.Press.Flash.Mobile.Developing.Android.and.iOS.Applications.Mar.2011
2012-09-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人