﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Web报表工具-专业博客 &#187; Web报表</title>
	<atom:link href="http://reportblog.cn/archives/tag/web%e6%8a%a5%e8%a1%a8/feed" rel="self" type="application/rss+xml" />
	<link>http://reportblog.cn</link>
	<description>报表技术知识：web报表，报表工具，表单工具，报表设计，报表系统，java报表</description>
	<lastBuildDate>Thu, 12 Jan 2012 03:24:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Web报表FineReport通过权限控制数据访问方案</title>
		<link>http://reportblog.cn/archives/1472</link>
		<comments>http://reportblog.cn/archives/1472#comments</comments>
		<pubDate>Mon, 21 Nov 2011 02:26:40 +0000</pubDate>
		<dc:creator>FineReport——web报表技术领跑者</dc:creator>
				<category><![CDATA[Web报表工具-技术园地]]></category>
		<category><![CDATA[finereport报表]]></category>
		<category><![CDATA[Web报表]]></category>
		<category><![CDATA[控制数据访问]]></category>

		<guid isPermaLink="false">http://reportblog.cn/?p=1472</guid>
		<description><![CDATA[问题：实际应用环境中，不同角色的人可能对数据具有不同的访问权限，通过直接在SQL语句中筛选出需要的数据制作模板可以解决该需求，但对于角色较多的情况，就需要制作很多张样式相同只是数据集不同的报表，不利于后期的维护并且加大了报表制作的工作量。 方案：针对该问题，在Web报表FineReport中，可以利用SQL参数配合参数处理器再结合权限以完成该需求。使用该方案只需要制作一张表样，利用SQL中的参数进行动态过滤达到该目的。下面具体描述该方案的实施过程。 第一步：数据准备 这里使用的是DEMO数据，主要为了演示该方案的操作，具体使用的时候需要根据具体的数据情况进行调整： 表：datas ID DATA ROLE 1 100 0 2 200 0 3 300 0 4 400 1 5 500 1 6 600 2 7 700 2 8 800 3 ID：编号 DATA：数据 ROLE：可查看角色编码 表：roles ID ROLENANME ROLE 1 总裁 0 2 总经理 1 3 部门经理 2 4 销售人员 3 第二步：制作模板 2.1 新建一张模板，报表数据集中新建一个“数据库查询数据集”，名称为：datas，SQL语句写成“select * [...]]]></description>
			<content:encoded><![CDATA[<p><strong>问题</strong>：实际应用环境中，不同角色的人可能对数据具有不同的访问权限，通过直接在SQL语句中筛选出需要的数据制作模板可以解决该需求，但对于角色较多的情况，就需要制作很多张样式相同只是数据集不同的<a title="报表" href="http://www.finereport.com/">报表</a>，不利于后期的维护并且加大了<a title="报表制作" href="http://www.finereport.com/knowledge/professional/webreport.html">报表制作</a>的工作量。<br />
<strong>方案</strong>：针对该问题，在<a title="web报表" href="http://www.finereport.com/knowledge/professional/webreport.html">Web报表</a>FineReport中，可以利用SQL参数配合参数处理器再结合权限以完成该需求。使用该方案只需要制作一张表样，利用SQL中的参数进行动态过滤达到该目的。下面具体描述该方案的实施过程。<span id="more-1472"></span></p>
<p><strong>第一步：数据准备</strong><br />
这里使用的是DEMO数据，主要为了演示该方案的操作，具体使用的时候需要根据具体的数据情况进行调整：<br />
表：datas</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="197">ID</td>
<td valign="top" width="197">DATA</td>
<td valign="top" width="197">ROLE</td>
</tr>
<tr>
<td valign="top" width="197">1</td>
<td valign="top" width="197">100</td>
<td valign="top" width="197">0</td>
</tr>
<tr>
<td valign="top" width="197">2</td>
<td valign="top" width="197">200</td>
<td valign="top" width="197">0</td>
</tr>
<tr>
<td valign="top" width="197">3</td>
<td valign="top" width="197">300</td>
<td valign="top" width="197">0</td>
</tr>
<tr>
<td valign="top" width="197">4</td>
<td valign="top" width="197">400</td>
<td valign="top" width="197">1</td>
</tr>
<tr>
<td valign="top" width="197">5</td>
<td valign="top" width="197">500</td>
<td valign="top" width="197">1</td>
</tr>
<tr>
<td valign="top" width="197">6</td>
<td valign="top" width="197">600</td>
<td valign="top" width="197">2</td>
</tr>
<tr>
<td valign="top" width="197">7</td>
<td valign="top" width="197">700</td>
<td valign="top" width="197">2</td>
</tr>
<tr>
<td valign="top" width="197">8</td>
<td valign="top" width="197">800</td>
<td valign="top" width="197">3</td>
</tr>
</tbody>
</table>
<p>ID：编号<br />
DATA：数据<br />
ROLE：可查看角色编码</p>
<p>表：roles</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="197">ID</td>
<td valign="top" width="197">ROLENANME</td>
<td valign="top" width="197">ROLE</td>
</tr>
<tr>
<td valign="top" width="197">1</td>
<td valign="top" width="197">总裁</td>
<td valign="top" width="197">0</td>
</tr>
<tr>
<td valign="top" width="197">2</td>
<td valign="top" width="197">总经理</td>
<td valign="top" width="197">1</td>
</tr>
<tr>
<td valign="top" width="197">3</td>
<td valign="top" width="197">部门经理</td>
<td valign="top" width="197">2</td>
</tr>
<tr>
<td valign="top" width="197">4</td>
<td valign="top" width="197">销售人员</td>
<td valign="top" width="197">3</td>
</tr>
</tbody>
</table>
<p><strong>第二步：制作模板</strong><br />
2.1 新建一张模板，<a title="报表" href="http://www.finereport.com">报表</a>数据集中新建一个“数据库查询数据集”，名称为：datas，SQL语句写成“select * from datas where ROLE&gt;=[?ROLE?]”<br />
2.2 拖拽新建的<a title="报表" href="http://www.finereport.com/">报表</a>数据集datas的数据列至<a title="报表" href="http://www.finereport.com/">报表</a>中，如下图所示：<br />
<a title="http://www.finereport.com/forumimages/tgqxkzsjfw1.jpg" href="http://www.finereport.com/forumimages/tgqxkzsjfw1.jpg"><img class="alignnone" src="http://www.finereport.com/forumimages/tgqxkzsjfw1.jpg" alt="" width="693" height="212" /></a><br />
2.3 新建一个服务器数据字典，用于进行角色名称与角色编码的转换，因为这里是演示用，就直接将数据写死了，使用自定义的服务器数据字典，用户可以根据具体的情况使用数据库查询数据字典来定义，关键点是要将“角色名”设置为key，“角色编码”设置为value。因为在应用的过程中，一个用户的角色是通过角色名来定义的，而对数据的访问控制是通过角色编码来控制的，这里需要一个值转换的过程。如果角色名与角色编码一致则可以不经过下列步骤的设置。<br />
数据字典的名称为:roles_map</p>
<p><a title="http://www.finereport.com/forumimages/tgqxkzsjfw2.jpg" href="http://www.finereport.com/forumimages/tgqxkzsjfw2.jpg"><img class="alignnone" src="http://www.finereport.com/forumimages/tgqxkzsjfw2.jpg" alt="" width="780" height="220" /></a></p>
<p>2.4 设置参数处理器，选择菜单中的“<a title="报表" href="http://www.finereport.com/">报表</a>”-“参数处理器”，定义先前SQL语句中定义的参数“ROLE”的参数处理器，这里采用公式类型，用于将角色名处理为角色编码，公式为：“MAP($ROLE,”roles_map”)”如下图所示：</p>
<p><a title="http://www.finereport.com/forumimages/tgqxkzsjfw3.jpg" href="http://www.finereport.com/forumimages/tgqxkzsjfw3.jpg"><img class="alignnone" src="http://www.finereport.com/forumimages/tgqxkzsjfw3.jpg" alt="" width="400" height="360" /></a><br />
2.5 保存模板文件即可。<br />
2.6 用户在集成应用的时候，需要在系统登录后设置当前登录的用户的角色，或者使用FineReport自带的权限管理系统。如果采用FineReport自带的权限管理系统，上述SQL语句中的ROLE参数可使用FR_ROLE_NAME来替代，该参数是FineReport权限系统中的默认登录角色参数名。具体登录角色设置方式请参见FineReport权限集成帮助文档或咨询FineReport服务人员。</p>

<p><strong>Web报表主题相关文章：</strong></p>
<ul>
<li><a href="http://reportblog.cn/archives/1700">IIS集成配置</a></li>
<li><a href="http://reportblog.cn/archives/1697">Jboss 服务器 JNDI 配置数据源连接数据库</a></li>
<li><a href="http://reportblog.cn/archives/1694">Oracle 数据库实现自增长列</a></li>
<li><a href="http://reportblog.cn/archives/1689">Weblogic 10.1 配置JNDI 数据源</a></li>
<li><a href="http://reportblog.cn/archives/1685">Sql server 2000 连接测试</a></li>
</ul><br />
]]></content:encoded>
			<wfw:commentRss>http://reportblog.cn/archives/1472/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

