利用开源报表FineReport实现定时任务的权限控制

  • 格式:pdf
  • 大小:911.46 KB
  • 文档页数:8

利用开源报表FineReport实现定时任务的权限控制
1、描述
定时任务生成的cpr文件和邮件附件内容可根据用户的不同而不同,实现向不同用户分发相应用户数据的报表。

2、实现原理
如果数据决策系统中创建的定时任务执行之后,系统会在工程文件夹%FR_HOME%\WebReport\WEB-INF下面新建一个schedule,如下图:
schedul文件夹中保存的定时任务根据定时任务名称,执行日期和执行时间的不同分三级目录保存,如下图:
如果创建定时任务的时候如果勾选了根据用户显示不同内容或根据收件人不同发送不同附件这两项,那么在执行定时任务的时候,会在定时任务模板中实现勾选的用户过滤,保存结果是,在时间文件夹下面增加以及目录—用户名称,定时任务执行后生成的cpr文件以
及导出的附件均保存在用户名称文件夹下,如下图:
在用户名称文件夹下的所有文件的内容均只有与相应用户相关的内容,而挂载在虚拟目录下的cpr文件根据系统登录用户不同到不同文件夹下去拿cpr文件,故可以实现不同用户在cpr中只能看到自己的信息,同理,根据收件人不同发送不同附件在发送附件的时候去相应文件夹下拿取附件并发送出去。

(一)定时任务cpr文件内容权限控制
1、描述
一般在公司的系统中会有工资选项,在月底的时候就可点击查看当月的工资信息,即定时的在每个月月底,将当前用户当月的工资信息挂载在指定的工资节点上,这个该如何实现呢?
2、解决方案
在定时任务的输出设置的挂载虚拟目录中,有一个选项根据用户选择不同的内容,可以在此处选择不同的用户,在执行定时任务时,会根据参数$fr_username进行数据过滤,根据用不选择不同的内容选项后面的下拉框中的值相当于给$fr_username赋值,则在schedule 文件夹的用户文件夹下生成的cpr文件内容是相应用户的工资信息,
3、示例
在系统虚拟目录树FRTest下面有个工资表的节点,每个月月底的时候,可查看当前用户该月的工资信息。

3.1模板准备
▪数据准备
在设计器中点击服务器>服务器数据集,新建一个内置服务器数据集staff,其内容如下图:
注:由于需要将该用户信息同步到数据决策系统中,故只能使用服务器数据集。

▪模板制作
新建一张模板,将服务器数据集staff中的数据列拖曳至单元格中,并给name数据列添加过滤条件,如下图:
已完成模板请参
照%FR_HOME%\WebReport\ReportServer\reportlets\doc\SpecialSubject\timer.cpt
3.2用户配置
点击管理系统>用户管理,导入staff数据集中的用户,如下图:
用户导入详细请查看导入用户。

3.3新建定时任务
是用户配置好之后,点击管理系统>定时调度,新建一个定时任务工资表,模板为上面新建的模板timer.cpt,调度周期为每个月的最后一天12点执行,如下图:
具体添加过程请查看定时生成日报。

3.4输出设置
上面提到定时任务执行完成之后,在系统的虚拟目录树FRTest下面显示用户的工资表节点,当员工登陆系统之后,点击工资表节点,即可看到自己的工资信息。

▪根据用户选择不同的内容
点击下一步进入定时任务输出设置界面,文件名称为工资表,挂载虚拟目录为FRTest,附件类型选择excel,勾选根据用户选择不同的内容,并在下拉框中选择全部用户,此时虚拟目录上的cpr节点就会根据下拉框中的数据进行过滤,比如说上面的模板,有过滤条件name=$fr_username,那么在将保存cpr文件时,会根据用户名来存档,并实现过滤,定时任务执行完成之后,会在%FR_HOME%\WebReport\WEB-INF\schedule\文件名称\日期\时间会生成用户文件夹,如
此时虚拟目录上的cpr节点就会根据下拉框中的数据进行过滤,比如说上面的模板,有过滤条件name=$fr_username,在保存cpr文件时,会根据用户名来存档,并实现过滤,定时任务执行完成之后,会在%FR_HOME%\WebReport\WEB-INF\schedule\文件名称\日期\时间会生成4个用户文件夹,文件夹名称分别为上图下拉框中的用户名,如,Anna文件夹下的cpr文件在保存之前就会先将$fr_username赋值为Anna,实现过滤之后再保存,这样就保证,该cpr文件中只有Anna的信息,当Anna登陆系统的时候,挂载在FRTest下面的工资表节点就指向该cpr文件,那么Anna就只能看到自己的工资信息了。

注:下拉框中勾选的用户就相当于给参数$fr_username赋值。

3.5cpr节点权限分配
定时任务执行完成之后会生成cpr文件,cpr文件挂载的虚拟目录FRTest下面,那么用户登录系统查看该cpr文件工资表的时候,首先需要有该节点的查看权限。

点击管理系统>权限管理>报表权限快捷配置,将FRTest整个文件夹的权限分配给技术支持整个部门,如下图:
详细的配置过程请查看根据部门职位分配权限。

注:给用户配置虚拟目录树的权限,如果将某个文件夹的权限分配给用户角色,那么之后添加在该文件夹下的新模板均会自动分配给该用户角色。

3.6效果查看
▪cpr节点效果查看
用Anna的账号登录系统,可以看到FRTest目录下面有一个工资表的节点,点开节点,可以看到模板中只显示了Anna的工资信息。

同理,用其他几个用户的账号登录后,点开工资表,均只能看到该用户的工资信息。

(二)定时任务邮件发送实现不同的人发送不同内容
1、描述
在一般的销售行业中,一个厂家下面会有很多分销商,分销商需要从厂家那里进行采购,汇款等等一系列操作,而厂家也会定期的给这些分销商发送邮件,告知他们货物的剩余情况,汇款情况等,而且在公司发工资的时候,也会给员工发送一份关于该员工的工资邮件,那么像这种定期给不同的人发送不同内容邮件的又该怎么用我们的报表实现呢?
2、解决方案
在定时任务的输出设置邮件设置中,有一个选项根据收件人不同生成不同附件,可以在此处选择不同的用户,在执行定时任务时,会根据参数$fr_username进行数据过滤,根据收件人不同生成不同附件选项后面的下拉框中的值相当于给$fr_username赋值,则可实现发送不同内容给不同用户。

3、示例
每个月月底发送一封邮件给所有用户,邮件内容为各个用户的个人信息以及工资信息,并在系统的虚拟目录树FRTest下面显示;
上一节已经介绍了虚拟目录树下的内容控制,下面介绍邮件内容控制的过程。

3.1模板准备
使用上一节新建的模板
%FR_HOME%\WebReport\ReportServer\reportlets\doc\SpecialSubject\timer.cpt
注:模板中的邮箱用作文档示例,并不真实有效,如用户使用示例模板,首先要将邮箱地址改为有效并可以查看的地址。

3.2邮箱配置
在上一节中收件人邮箱和发件人邮箱都已经配置好了,这里不再赘述。

注:收件人邮箱在添加用户的时候设置。

3.3新建定时任务
点击管理系统>定时调度,选中上一节创建的工资表定时任务,点击后面的编辑按钮,为该定时任务添加发送邮件的功能,并实现根据收件人不同生成不同附件,不同收件人收到的邮件中附件内容只是自己的工资信息。

3.4输出设置
▪邮件通知
勾选邮件通知,收件人勾选所有用户,只有配置了收件人通讯录,下拉框才会有用户可选,我们这里在上面配置了通讯录,如果没有配置的话,需手动输入邮箱,勾选根据收件人不同生成不同附件,如下图:
注:如果手动输入收件人邮箱地址,就无法根据收件人不同生成不同附件,即无法实现根据
收件人不同发送不同的邮件内容,故,必须配置邮件通讯录。

3.5效果查看
随便打开某一个收件人的邮箱,这里打开Anna用户的邮箱,可以看到有一封工资通知的邮件,邮件内容包含上面定时任务输出的3个附件:
▪附件内容
将工资表.pdf下载下来并打开,可以看到附件中只显示了Anna的工资信息,如下图:。