<?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"
	>

<channel>
	<title>润乾软件 &#187; 报表知识库</title>
	<atom:link href="http://www.runqian.com.cn/?feed=rss2&#038;cat=590" rel="self" type="application/rss+xml" />
	<link>http://www.runqian.com.cn</link>
	<description>创新技术推动应用进步！</description>
	<pubDate>Thu, 09 Sep 2010 01:52:57 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>API修改润乾报表sql</title>
		<link>http://www.runqian.com.cn/archives/2160.html</link>
		<comments>http://www.runqian.com.cn/archives/2160.html#comments</comments>
		<pubDate>Thu, 09 Sep 2010 01:52:57 +0000</pubDate>
		<dc:creator>zangmingkun</dc:creator>
		
		<category><![CDATA[b.设计基础]]></category>

		<category><![CDATA[api]]></category>

		<category><![CDATA[bean]]></category>

		<category><![CDATA[jsp]]></category>

		<category><![CDATA[sql]]></category>

		<category><![CDATA[数据集]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2160</guid>
		<description><![CDATA[客户希望在报表计算之前修改报表数据集的sql语句，然后在计算报表的时候让报表的数据集执行这个新的sql语句，从而实现客户自己的业务逻辑。下面就用一个例子实现上面的需求... ]]></description>
			<content:encoded><![CDATA[<p>客户希望在报表计算之前修改报表数据集的sql语句，然后在计算报表的时候让报表的数据集执行这个新的sql语句，从而实现客户自己的业务逻辑。下面就用一个例子实现上面的需求。</p>
<p>实现思路：可以直接在jsp中解决，用API读入报表模板，再得到数据集的sql语句，让客户根据自己的需要对sql进行修改，然后再让报表重新读取这个数据集，然后计算报表，最后用bean的方式发布。</p>
<p><strong>第一步，制作一张报表，连接demo数据源。</strong></p>
<p>首先制作一张连接demo数据源的报表，报表的数据集ds1的sql为：SELECT 订单.订单ID,订单.货主名称,订单.货主国家,订单.货主地区 FROM 订单，报表的样式如下图所示：</p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/09/zrclip-016n7b00e646.png" alt="" width="576" height="413" /></p>
<p>将这个报表保存为test.raq。</p>
<p><strong>第二步，编写jsp，实现修改报表sql和发布报表。</strong></p>
<p>修改报表数据集sql的API和内容的注释如下：</p>
<p>String report = request.getParameter(”report”);<br />
System.out.println(”取得的报表名是：”+report);<br />
//传入报表为空的情况下，赋于默认报表。<br />
if(report==null) report = “test.raq”;<br />
String path = application.getRealPath(”/reportFiles/”+report);<br />
System.out.println(”获取的报表路径：”+path);<br />
//从报表文件中构造一个报表定义对象<br />
ReportDefine rd = (ReportDefine)ReportUtils.read(path);<br />
DataSetMetaData dsmd = rd.getDataSetMetaData(); //获得报表定义中的数据集元对象<br />
SQLDataSetConfig sdsc = (SQLDataSetConfig)dsmd.getDataSetConfig(”ds1″); //取到需要修改的数据集对象<br />
String sql =sdsc.getSQL(); //取得数据集对象中的SQL<br />
System.out.println(”报表对象的SQL：”+sql);<br />
//修改sql<br />
sql= sql + “where CAST(订单.订单ID AS INTEGER) &lt;=10260″<br />
System.out.println(”加上参数的SQL：”+sql);<br />
//将修改后的SQL设置到数据集对象中<br />
sdsc.setSQL( sql );<br />
dsmd.setDataSetConfig(sdsc);<br />
rd.setDataSetMetaData(dsmd);</p>
<p>用如上的代码可以实现修改报表数据集的sql，修改好sql后可以用如下的方式计算报表，然后采用bean的方式发布：</p>
<p>Context ctx = new Context（）;<br />
Engine engine = new Engine(rd,ctx);<br />
IReport ireport = Engine. calc ();</p>
<p>这样报表就计算好了，然后用bean的方式发布报表，jsp的内容如下：</p>
<p>&lt;%@ page contentType=”text/html;charset=GBK”%&gt;<br />
&lt;%@page import=”com.zhengzhong.practise.ConnectDemo”%&gt;<br />
&lt;%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report”%&gt;<br />
&lt;%@ page import=”com.runqian.report4.model.*”%&gt;<br />
&lt;%@ page import=”com.runqian.report4.usermodel.*”%&gt;<br />
&lt;%@ page import=”com.runqian.report4.util.*”%&gt;<br />
&lt;%@ page import=”java.util.*”%&gt;<br />
&lt;html&gt;<br />
&lt;body topmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0&gt;<br />
&lt;%<br />
String report = request.getParameter(”report”);<br />
System.out.println(”取得的报表名是：”+report);<br />
//传入报表为空的情况下，赋于默认报表。<br />
if(report==null) report = “test.raq”;<br />
String path = application.getRealPath(”/reportFiles/”+report);<br />
System.out.println(”获取的报表路径：”+path);<br />
//从报表文件中构造一个报表定义对象<br />
ReportDefine rd = (ReportDefine)ReportUtils.read(path);<br />
DataSetMetaData dsmd = rd.getDataSetMetaData(); //获得报表定义中的数据集元对象<br />
SQLDataSetConfig sdsc = (SQLDataSetConfig)dsmd.getDataSetConfig(”ds1″); //取到需要修改的数据集对象<br />
String sql =sdsc.getSQL(); //取得数据集对象中的SQL<br />
System.out.println(”报表对象的SQL：”+sql);<br />
//修改sql<br />
sql= sql + “where CAST(订单.订单ID AS INTEGER) &lt;=10260″ ;<br />
System.out.println(”加上参数的SQL：”+sql);<br />
//将修改后的SQL设置到数据集对象中<br />
sdsc.setSQL( sql );<br />
dsmd.setDataSetConfig(sdsc);<br />
rd.setDataSetMetaData(dsmd);<br />
Context ctx = new Context（）;<br />
IReport ireport = Engine. calc ();<br />
%&gt;<br />
&lt;table align=left&gt;<br />
&lt;tr&gt;&lt;td&gt;<br />
&lt;!– 发布报表的tag标签，与struts标签使用类似，其中name为必填项，reportFileName与beanName根据发布的报表源类型选择性填写一个 –&gt;<br />
&lt;!– 这里主要讲解了报表源为bean的使用，并在exceptionPage属性里指定了发生错误时，展现错误信息的页面 –&gt;<br />
&lt;report:html name=”report1″<br />
srcType=”defineBean”<br />
beanName=”ireport”<br />
funcBarLocation=”top”<br />
exceptionPage=”/jsp/myError.jsp”<br />
/&gt;<br />
&lt;/td&gt;&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p><strong>第三步：发布报表。</strong></p>
<p>用上面编写的jsp发布报表，在浏览器中浏览就可以看到下面的效果，数据被按照自己设定的方式过滤了，也就是设置的过滤条件起作用了。</p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/09/zrclip-017p6a65b00d.png" alt="" width="551" height="548" /></p>
<p>这样，用<span>API</span> <span style="font-family: 宋体;">实现修改数据集</span> <span>sql</span> <span style="font-family: 宋体;">的功能就实现了。</span></p>
<hr />
<p><small>摘自：<a href="http://www.runqian.com.cn">润乾软件</a> |
原文链接：<a href="http://www.runqian.com.cn/archives/2160.html">Permalink</a> |
<br/>
Tags: <a href="http://www.runqian.com.cn/archives/tag/api" rel="tag">api</a>, <a href="http://www.runqian.com.cn/archives/tag/bean" rel="tag">bean</a>, <a href="http://www.runqian.com.cn/archives/tag/jsp" rel="tag">jsp</a>, <a href="http://www.runqian.com.cn/archives/tag/sql" rel="tag">sql</a>, <a href="http://www.runqian.com.cn/archives/tag/%e6%95%b0%e6%8d%ae%e9%9b%86" rel="tag">数据集</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2160.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>润乾报表在linux和windows中字体显示不一致解决办法</title>
		<link>http://www.runqian.com.cn/archives/2158.html</link>
		<comments>http://www.runqian.com.cn/archives/2158.html#comments</comments>
		<pubDate>Fri, 03 Sep 2010 02:06:24 +0000</pubDate>
		<dc:creator>zangmingkun</dc:creator>
		
		<category><![CDATA[k.性能优化]]></category>

		<category><![CDATA[debain版本]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[windows]]></category>

		<category><![CDATA[同步]]></category>

		<category><![CDATA[字体]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2158</guid>
		<description><![CDATA[客户经常遇到这样一个问题：报表字体为宋体，在windows中展现正常，能达到需要的效果，但是把应用放到linux中，同样的报表展示的字体样式就跟windows不一样，未达到预期效果。最后检查客户l... ]]></description>
			<content:encoded><![CDATA[<p><strong>问题描述</strong></p>
<p>客户经常遇到这样一个问题：报表字体为宋体，在windows中展现正常，能达到需要的效果，但是把应用放到linux中，同样的报表展示的字体样式就跟windows不一样，未达到预期效果。最后检查客户linux的字体发现是客户linux中的宋体版本跟windows中的不一样造成的，所以造成展现的报表里面字的样式不一致。</p>
<p><strong>解决方法</strong></p>
<p>同步windows的字体到linux系统中，使二者的字体版本和样式一样，这样展现出来的字体样式就没有区别了。</p>
<p><strong>实现步骤</strong></p>
<p>给linux安装字体的步骤如下（以debain版本的linux为例）：</p>
<p><strong>1，拷贝字体到系统字体目录下，比如/usr/share/fonts/truetype/hahafonts(hahafonts请自行建立)。</strong></p>
<p>到win下找到你需要的字体，比如拷贝了simhei.ttf simyou.ttf tahoma.ttf verdana.ttf simsun.ttc tahomabd.ttf verdanab.ttf等7款字体。当然，如果想要简单可以只拷simsun，tahoma就行了。</p>
<p>cp *.tt* /usr/share/fonts/truetype/hahafonts/<br />
cd /usr/share/fonts/truetype/hahafonts/</p>
<p><strong>2，生成字体的fonts.dir+fonts.scale文件：</strong></p>
<p>Debian下：</p>
<p>apt-get install ttmkfdir<br />
ttmkfdir &amp;&amp; cp fonts.scale fonts.dir</p>
<p><strong>3，把字体路径加到xfree86文件中，如/etc/X11/XF86Config-4：</strong></p>
<p>添加内容如下：</p>
<p>FontPath “/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType”<br />
FontPath “/var/lib/defoma/x-ttcidfont-conf.d/dirs/CID”<br />
FontPath “/usr/share/fonts/truetype/gbk”<br />
FontPath “/usr/share/fonts/truetype/hahafonts”</p>
<p>注：/usr/share/fonts/truetype/gbk中为其他点阵字体，可以不加。</p>
<p><strong>4，执行fc-cache -v -f：</strong></p>
<p>注：fc-cache — build font information cache files</p>
<p><strong>5，firefly补丁：</strong></p>
<p>http://hahaghost.512j.com/linuxbak/fonts.conf替换/etc/fonts/里的fonts.conf文件，然后加上源：</p>
<p>把下面2行加到/etc/apt/sources.list里<br />
deb http://debian.okey.net/debian-uo/ sid firefly java marillat rareware misc<br />
deb http://debian.okey.net/debian-fonts/ ./</p>
<p>然后执行apt-get update&amp;&amp;apt-get upgrade就可以了。</p>
<p>注：执行apt-get upgrade后，自动升级的有：libfontconfig,libxft,fontconfig都是修改的过的补丁。</p>
<p><strong>6，重启之后就可以看到适合的字体了：</strong></p>
<p>然后xfsfonts | grep gbk，查找您需要的字体，添加到gtkrc或者gtkrc.zh_CN中。</p>
<p>其中的gbk是个例子，可以换成自己需要的，比如simsun等。</p>
<p>这样，报表在Linux和Windows中字体显示就一致了。</p>
<hr />
<p><small>摘自：<a href="http://www.runqian.com.cn">润乾软件</a> |
原文链接：<a href="http://www.runqian.com.cn/archives/2158.html">Permalink</a> |
<br/>
Tags: <a href="http://www.runqian.com.cn/archives/tag/debain%e7%89%88%e6%9c%ac" rel="tag">debain版本</a>, <a href="http://www.runqian.com.cn/archives/tag/linux" rel="tag">linux</a>, <a href="http://www.runqian.com.cn/archives/tag/windows" rel="tag">windows</a>, <a href="http://www.runqian.com.cn/archives/tag/%e5%90%8c%e6%ad%a5" rel="tag">同步</a>, <a href="http://www.runqian.com.cn/archives/tag/%e5%ad%97%e4%bd%93" rel="tag">字体</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2158.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>如何处理多层统计图2</title>
		<link>http://www.runqian.com.cn/archives/2156.html</link>
		<comments>http://www.runqian.com.cn/archives/2156.html#comments</comments>
		<pubDate>Thu, 02 Sep 2010 01:46:14 +0000</pubDate>
		<dc:creator>zangmingkun</dc:creator>
		
		<category><![CDATA[b.设计基础]]></category>

		<category><![CDATA[分类轴]]></category>

		<category><![CDATA[多层统计图]]></category>

		<category><![CDATA[系列值]]></category>

		<category><![CDATA[系列名称]]></category>

		<category><![CDATA[饼形图]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2156</guid>
		<description><![CDATA[在做数据统计时，用饼图去展示各数据的比例的需求时常会遇到。在润乾报表设计器中，饼图的分类轴和系列的值都是由可扩展单元格的数据来定义的。某些情况下用户做出来的饼图会出现如... ]]></description>
			<content:encoded><![CDATA[<p>在做数据统计时，用饼图去展示各数据的比例的需求时常会遇到。在润乾报表设计器中，饼图的分类轴和系列的值都是由可扩展单元格的数据来定义的。某些情况下用户做出来的饼图会出现如图所示的效果：</p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-003p32c93159.png" alt="" width="454" height="320" /></p>
<p>这样即无法实现用户的需求又不美观。</p>
<p>下面就来介绍如何解决多层饼图的问题。</p>
<p><strong>实现步骤</strong></p>
<p><strong>1，制作报表，如下图</strong>：</p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-004n6a33cf01.png" alt="" width="554" height="80" /></p>
<p><strong>2，在报表中增加统计图并设置统计图分类轴和系列值，如图：</strong></p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-005n309d0159.png" alt="" width="554" height="483" /></p>
<p>注：系列名称必须是固定的，不可以写成c3，c3是一个变化的值。</p>
<p><strong>3，发布报表预览如下：</strong></p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-006p1b4266ac.png" alt="" width="433" height="319" /></p>
<p>按照以上的步骤不仅可以用润乾报表设计器中实现以从数据库中读取数据设计饼形图这个需求，还不会出现多层饼图的不美观的效果。</p>
<hr />
<p><small>摘自：<a href="http://www.runqian.com.cn">润乾软件</a> |
原文链接：<a href="http://www.runqian.com.cn/archives/2156.html">Permalink</a> |
<br/>
Tags: <a href="http://www.runqian.com.cn/archives/tag/%e5%88%86%e7%b1%bb%e8%bd%b4" rel="tag">分类轴</a>, <a href="http://www.runqian.com.cn/archives/tag/%e5%a4%9a%e5%b1%82%e7%bb%9f%e8%ae%a1%e5%9b%be" rel="tag">多层统计图</a>, <a href="http://www.runqian.com.cn/archives/tag/%e7%b3%bb%e5%88%97%e5%80%bc" rel="tag">系列值</a>, <a href="http://www.runqian.com.cn/archives/tag/%e7%b3%bb%e5%88%97%e5%90%8d%e7%a7%b0" rel="tag">系列名称</a>, <a href="http://www.runqian.com.cn/archives/tag/%e9%a5%bc%e5%bd%a2%e5%9b%be" rel="tag">饼形图</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2156.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>报表组查询后显示当前tab页</title>
		<link>http://www.runqian.com.cn/archives/2154.html</link>
		<comments>http://www.runqian.com.cn/archives/2154.html#comments</comments>
		<pubDate>Wed, 01 Sep 2010 01:49:49 +0000</pubDate>
		<dc:creator>zangmingkun</dc:creator>
		
		<category><![CDATA[k.性能优化]]></category>

		<category><![CDATA[jsp代码]]></category>

		<category><![CDATA[js传参]]></category>

		<category><![CDATA[当前tab页]]></category>

		<category><![CDATA[报表组]]></category>

		<category><![CDATA[隐藏属性]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2154</guid>
		<description><![CDATA[客户制作了一个带有参数模板的报表组，客户希望在点击查询报表组之后，页面不跳转回报表组的第一个tab页，而是停留在客户点击查询按钮时的tab页面。而目前润乾报表默认的方式是跳转回... ]]></description>
			<content:encoded><![CDATA[<p><strong>问题描述</strong></p>
<p>客户制作了一个带有参数模板的报表组，客户希望在点击查询报表组之后，页面不跳转回报表组的第一个tab页，而是停留在客户点击查询按钮时的tab页面。而目前润乾报表默认的方式是跳转回到第一个tab页，不会停留在当前tab页上，所以要实现客户的需求采用js的方式给报表传参数，控制报表显示的tab页。</p>
<p><strong>实现思路</strong></p>
<p>给报表组的页面传一个参数showFlag，通过这个参数控制报表显示或者隐藏哪个tab页，再点击tab页标签的时候就给页面传对应的showFlag参数，然后调用润乾的点击tab页的函数，这样如果把参数顺利传递过去就可以控制报表显示或隐藏哪个tab页了。</p>
<p><strong>实现步骤</strong></p>
<p><strong>1，以三个tab页的报表组为例，通过showFlag参数控制报表组显示或隐藏tab页的java代码和js函数如下：</strong></p>
<p>&lt;%<br />
out.println(”showFlag:”+showFlag);<br />
if(”2″.equals(showFlag)){%&gt;<br />
标志为2的时候就显示第二张报表，就是div名字为div_item2的层<br />
&lt;script language=”javascript”&gt;<br />
document.getElementById( “div_item1″ ).style.display = “none”;<br />
document.getElementById( “div_item2″ ).style.display = “”;<br />
document.getElementById( “div_item3″ ).style.display = “none”;<br />
//更改tab页字体的颜色<br />
document.getElementById(”tab_item1″).className=”&#8221;;<br />
document.getElementById(”tab_item2″).className=”rq_curr”;<br />
document.getElementById(”tab_item3″).className=”&#8221;;<br />
&lt;/script&gt;<br />
&lt;%}else if(”3″.equals(showFlag)){%&gt;<br />
显示第三个报表的div，隐藏第一、二个报表的div<br />
&lt;script language=”javascript”&gt;<br />
document.getElementById( “div_item3″ ).style.display = “”;<br />
document.getElementById( “div_item2″ ).style.display = “none”;<br />
document.getElementById( “div_item1″ ).style.display = “none”;<br />
document.getElementById(”tab_item3″).className=”rq_curr”;<br />
document.getElementById(”tab_item2″).className=”&#8221;;<br />
document.getElementById(”tab_item1″).className=”&#8221;;<br />
&lt;/script&gt;<br />
&lt;%}<br />
else{%&gt;<br />
显示第一个报表的div，隐藏第二、三个报表的div<br />
&lt;script language=”javascript”&gt;<br />
document.getElementById( “div_item1″ ).style.display = “”;<br />
document.getElementById( “div_item2″ ).style.display = “none”;<br />
document.getElementById( “div_item3″ ).style.display = “none”;<br />
document.getElementById(”tab_item1″).className=”rq_curr”;<br />
document.getElementById(”tab_item2″).className=”&#8221;;<br />
document.getElementById(”tab_item3″).className=”&#8221;;<br />
&lt;/script&gt;<br />
&lt;%}%&gt;</p>
<p>这样就可以实现通过showFlag参数值不同设置隐藏或显示相应的tab页。</p>
<p><strong>2，制作报表组的参数模板：</strong></p>
<p>参数模板的样式如下图所示，需要注意的是第二行B2单元格的变量名设置为showFlag，也就是上面提到的参数。<br />
<img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-001p6a3fb7e7.png" alt="" width="553" height="251" /></p>
<p><strong>3，通过点击tab页给报表组传参数，设置tab页的隐藏属性。代码如下：</strong></p>
<p>&lt;script language=”javascript”&gt;<br />
//重新定义第二个报表tab页的点击事件<br />
document.getElementById(’tab_item2′).onclick=function()<br />
{ //显示第二个报表的div，隐藏第一、三个报表的div<br />
document.getElementById( “div_item1″ ).style.display = “none”;<br />
document.getElementById( “div_item2″ ).style.display = “”;<br />
document.getElementById( “div_item3″ ).style.display = “none”;<br />
//更改tag标签字体的颜色<br />
document.getElementById(”tab_item1″).className=”&#8221;;<br />
document.getElementById(”tab_item2″).className=”rq_curr”;<br />
document.getElementById(”tab_item3″).className=”&#8221;;<br />
//调用快逸自定义的tab页自定义函数<br />
_groupClicked(document.getElementById(’tab_item2′));<br />
document.getElementById(”showFlag”).value=2;<br />
}<br />
//重新定义第一个报表tab页的点击事件<br />
document.getElementById(’tab_item1′).onclick=function(){<br />
document.getElementById( “div_item1″ ).style.display = “”;<br />
document.getElementById( “div_item2″ ).style.display = “none”;<br />
document.getElementById( “div_item3″ ).style.display = “none”;<br />
document.getElementById(”tab_item1″).className=”rq_curr”;<br />
document.getElementById(”tab_item2″).className=”&#8221;;<br />
document.getElementById(”tab_item3″).className=”&#8221;;<br />
_groupClicked(document.getElementById(’tab_item1′));<br />
document.getElementById(”showFlag”).value=1;<br />
}<br />
//重新定义第三个报表tab页的点击事件<br />
document.getElementById(’tab_item3′).onclick=function(){<br />
document.getElementById( “div_item3″ ).style.display = “”;<br />
document.getElementById( “div_item2″ ).style.display = “none”;<br />
document.getElementById( “div_item1″ ).style.display = “none”;<br />
document.getElementById(”tab_item3″).className=”rq_curr”;<br />
document.getElementById(”tab_item2″).className=”&#8221;;<br />
document.getElementById(”tab_item1″).className=”&#8221;;<br />
_groupClicked(document.getElementById(’tab_item3′));<br />
document.getElementById(”showFlag”).value=3;<br />
}<br />
<strong>&lt;/script&gt;</strong></p>
<p><strong>4，编写完整的jsp代码：</strong></p>
<p>有了以上的js函数和报表组参数模板的设置，就可以编写完整的jsp代码来发布报表组了，jsp的全部代码如下：</p>
<p>&lt;%@ page contentType=”text/html;charset=GBK” %&gt;<br />
&lt;%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report” %&gt;<br />
&lt;%@ page import=”java.io.*”%&gt;<br />
&lt;%@ page import=”java.util.*”%&gt;<br />
&lt;%@ page import=”com.runqian.report4.view.*”%&gt;<br />
&lt;html&gt;<br />
&lt;body topmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0&gt;<br />
&lt;%<br />
String showFlag1 = request.getParameter(”showFlag”);<br />
//接收参数，把参数拼成name=value;name2=value2;…..的形式<br />
StringBuffer param=new StringBuffer();<br />
Enumeration paramNames = request.getParameterNames();<br />
if(paramNames!=null){<br />
while(paramNames.hasMoreElements()){<br />
String paramName = (String) paramNames.nextElement();<br />
String paramValue=request.getParameter(paramName);<br />
if(paramValue!=null){<br />
//把参数拼成name=value;name2=value2;…..的形式<br />
param.append(paramName).append(”=”).append(paramValue).append(”;”);<br />
}<br />
}<br />
}<br />
String reportParamsId=request.getParameter(”reportParamsId”);<br />
Hashtable params = null;<br />
String showFlag=null;<br />
if(!”&#8221;.equals(reportParamsId) &amp;&amp; reportParamsId != null){<br />
params = com.runqian.report4.view.ParamsPool.get( reportParamsId );<br />
showFlag=(String) params.get(”showFlag”);<br />
} else{<br />
showFlag=request.getParameter(”showFlag”);<br />
//out.print(”showFlag=============”+showFlag);<br />
if(showFlag==null || showFlag.equals(”&#8221;)){<br />
showFlag=”1″;<br />
}<br />
%&gt;<br />
&lt;table id=”rpt” align=”center”&gt;&lt;tr&gt;&lt;td&gt;<br />
&lt;table id=”param_tbl” width=”100%” height=”100%” align=”top”&gt;&lt;tr&gt;&lt;td&gt;<br />
&lt;report:param name=”form1″ paramFileName=”group_arg.raq”<br />
needSubmit=”no”<br />
params=”&lt;%=param.toString()%&gt;”<br />
/&gt;<br />
&lt;/td&gt;<br />
&lt;td&gt;&lt;a href=”javascript:_submit( form1 )”&gt;&lt;img src=”../images/query.jpg” border=no style=”vertical-align:middle”&gt;&lt;/a&gt;&lt;/td&gt;<br />
&lt;/tr&gt;&lt;/table&gt;<br />
&lt;!–导入存有工具栏的jsp–&gt;<br />
&lt;jsp:include page=”toolbar.jsp” flush=”false” /&gt;<br />
&lt;table align=center&gt;<br />
&lt;tr&gt;&lt;td&gt;<br />
&lt;report:group groupFileName=”group.rpg”<br />
funcBarLocation=”&#8221;<br />
exceptionPage=”/reportJsp/myError2.jsp”<br />
params=”&lt;%=param.toString()%&gt;”<br />
/&gt;<br />
&lt;/td&gt;&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;%<br />
if(”2″.equals(showFlag)){%&gt;<br />
标志为2的时候就显示第二张报表，就是div名字为div_item2的层<br />
&lt;script language=”javascript”&gt;<br />
document.getElementById( “div_item1″ ).style.display = “none”;<br />
document.getElementById( “div_item2″ ).style.display = “”;<br />
document.getElementById( “div_item3″ ).style.display = “none”;<br />
//更改tab页字体的颜色<br />
document.getElementById(”tab_item1″).className=”&#8221;;<br />
document.getElementById(”tab_item2″).className=”rq_curr”;<br />
document.getElementById(”tab_item3″).className=”&#8221;;<br />
&lt;/script&gt;<br />
&lt;%}else if(”3″.equals(showFlag)){%&gt;<br />
显示第三个报表的div，隐藏第一、二个报表的div<br />
&lt;script language=”javascript”&gt;<br />
document.getElementById( “div_item3″ ).style.display = “”;<br />
document.getElementById( “div_item2″ ).style.display = “none”;<br />
document.getElementById( “div_item1″ ).style.display = “none”;<br />
document.getElementById(”tab_item3″).className=”rq_curr”;<br />
document.getElementById(”tab_item2″).className=”&#8221;;<br />
document.getElementById(”tab_item1″).className=”&#8221;;<br />
&lt;/script&gt;<br />
&lt;%}<br />
else{%&gt;<br />
显示第一个报表的div，隐藏第二、三个报表的div<br />
&lt;script language=”javascript”&gt;<br />
document.getElementById( “div_item1″ ).style.display = “”;<br />
document.getElementById( “div_item2″ ).style.display = “none”;<br />
document.getElementById( “div_item3″ ).style.display = “none”;<br />
document.getElementById(”tab_item1″).className=”rq_curr”;<br />
document.getElementById(”tab_item2″).className=”&#8221;;<br />
document.getElementById(”tab_item3″).className=”&#8221;;<br />
&lt;/script&gt;<br />
&lt;%}%&gt;<br />
&lt;script language=”javascript”&gt;<br />
//重新定义第二个报表tab页的点击事件<br />
document.getElementById(’tab_item2′).onclick=function()<br />
{ //显示第二个报表的div，隐藏第一、三个报表的div<br />
document.getElementById( “div_item1″ ).style.display = “none”;<br />
document.getElementById( “div_item2″ ).style.display = “”;<br />
document.getElementById( “div_item3″ ).style.display = “none”;<br />
//更改tag标签字体的颜色</p>
<p>document.getElementById(”tab_item1″).className=”&#8221;;<br />
document.getElementById(”tab_item2″).className=”rq_curr”;<br />
document.getElementById(”tab_item3″).className=”&#8221;;<br />
//调用快逸自定义的tab页自定义函数<br />
_groupClicked(document.getElementById(’tab_item2′));<br />
document.getElementById(”showFlag”).value=2;<br />
}<br />
//重新定义第一个报表tab页的点击事件<br />
document.getElementById(’tab_item1′).onclick=function(){<br />
document.getElementById( “div_item1″ ).style.display = “”;<br />
document.getElementById( “div_item2″ ).style.display = “none”;<br />
document.getElementById( “div_item3″ ).style.display = “none”;<br />
document.getElementById(”tab_item1″).className=”rq_curr”;<br />
document.getElementById(”tab_item2″).className=”&#8221;;<br />
document.getElementById(”tab_item3″).className=”&#8221;;<br />
_groupClicked(document.getElementById(’tab_item1′));<br />
document.getElementById(”showFlag”).value=1;<br />
}<br />
//重新定义第三个报表tab页的点击事件<br />
document.getElementById(’tab_item3′).onclick=function(){<br />
document.getElementById( “div_item3″ ).style.display = “”;<br />
document.getElementById( “div_item2″ ).style.display = “none”;<br />
document.getElementById( “div_item1″ ).style.display = “none”;<br />
document.getElementById(”tab_item3″).className=”rq_curr”;<br />
document.getElementById(”tab_item2″).className=”&#8221;;<br />
document.getElementById(”tab_item1″).className=”&#8221;;<br />
_groupClicked(document.getElementById(’tab_item3′));<br />
document.getElementById(”showFlag”).value=3;<br />
}<br />
&lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p><strong>5，制作并发布报表组：</strong></p>
<p>制作一个有三个tab页的报表组，命名为group.rpg，然后命名上面制作的参数模板为group_arg.raq，最后用上面的jsp发布报表组。</p>
<p>点击查询按钮后报表组仍然停留在当前的tab页，而没有跳转的第一个tab页。</p>
<p>具体如下：</p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-002n308253b6.png" alt="" width="553" height="243" /></p>
<p>在报表中点击查询按钮后，页面停留在客户点击查询按钮时的tab页面的功能就实现了。</p>
<hr />
<p><small>摘自：<a href="http://www.runqian.com.cn">润乾软件</a> |
原文链接：<a href="http://www.runqian.com.cn/archives/2154.html">Permalink</a> |
<br/>
Tags: <a href="http://www.runqian.com.cn/archives/tag/jsp%e4%bb%a3%e7%a0%81" rel="tag">jsp代码</a>, <a href="http://www.runqian.com.cn/archives/tag/js%e4%bc%a0%e5%8f%82" rel="tag">js传参</a>, <a href="http://www.runqian.com.cn/archives/tag/%e5%bd%93%e5%89%8dtab%e9%a1%b5" rel="tag">当前tab页</a>, <a href="http://www.runqian.com.cn/archives/tag/%e6%8a%a5%e8%a1%a8%e7%bb%84" rel="tag">报表组</a>, <a href="http://www.runqian.com.cn/archives/tag/%e9%9a%90%e8%97%8f%e5%b1%9e%e6%80%a7" rel="tag">隐藏属性</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2154.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>如何设置指定页码下指定行数的行(单元格)属性</title>
		<link>http://www.runqian.com.cn/archives/2152.html</link>
		<comments>http://www.runqian.com.cn/archives/2152.html#comments</comments>
		<pubDate>Tue, 31 Aug 2010 01:45:28 +0000</pubDate>
		<dc:creator>zangmingkun</dc:creator>
		
		<category><![CDATA[b.设计基础]]></category>

		<category><![CDATA[jsp]]></category>

		<category><![CDATA[分页报表]]></category>

		<category><![CDATA[属性设置]]></category>

		<category><![CDATA[指定页码]]></category>

		<category><![CDATA[表头]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2152</guid>
		<description><![CDATA[在分页报表中，我们想对指定页码下指定行设置一些属性，如：隐藏、前景色、背景色等，能否在报表中就可以判断并且实现呢... ]]></description>
			<content:encoded><![CDATA[<p><strong>需求背景</strong></p>
<p>在分页报表中，我们想对指定页码下指定行设置一些属性，如：隐藏、前景色、背景色等，能否在报表中就可以判断并且实现呢？</p>
<p>下面看一下如何实现这个功能。</p>
<p><strong>实现步骤</strong></p>
<p><strong>1：设计一张如下的报表</strong>：</p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-019p5d15987e.png" alt="" width="540" height="112" /></p>
<p>2：设置参数如下：</p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-020nf9360dc.png" alt="" width="554" height="95" /></p>
<p><strong>3：设置分页方式和每页行数：</strong></p>
<p><strong><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-021n5a6a0dd8.png" alt="" width="554" height="85" /></strong></p>
<p><strong>4：选中报表第二行，设置背景色表达式：</strong></p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-022n19555620.png" alt="" width="553" height="90" /></p>
<p>本例中计算页码是通过使用row()函数获得当前行号，而该报表有一个表头，这样的话数据区的行数应该是从2开始，所以这用了int((row()-2)/10+1)表达式求第几页；而表达式中(row()-2)%10其中10是分页记录条数，即该表达式是是求第几行的。</p>
<p><strong>5：将发布报表的jsp中设置<span>generateParamForm=”yes”，预览如下：</span></strong></p>
<p><span><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-023n7fc2ec6b.png" alt="" width="554" height="280" /></span></p>
<p><span>通过这个例子可以发现，我们不单能设置背景色，前景色、隐藏、显示值等都可以设置；还可以设置单元格的相关属性，操作和设置行属性类似。</span></p>
<p><span>说明：</span></p>
<p><span>1、该例可以直接适合按行分页的报表；<br />
2、若报表无报表头或含有多行报表头，行属性表达式要有所变化；<br />
3、如果设置行隐藏，后面的数据会补上一条到本页，使得本页数据仍为满页记录条数（最后一页除外），见下图：</span></p>
<p><span><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-024p130f3e44.png" alt="" width="553" height="279" /></span></p>
<hr />
<p><small>摘自：<a href="http://www.runqian.com.cn">润乾软件</a> |
原文链接：<a href="http://www.runqian.com.cn/archives/2152.html">Permalink</a> |
<br/>
Tags: <a href="http://www.runqian.com.cn/archives/tag/jsp" rel="tag">jsp</a>, <a href="http://www.runqian.com.cn/archives/tag/%e5%88%86%e9%a1%b5%e6%8a%a5%e8%a1%a8" rel="tag">分页报表</a>, <a href="http://www.runqian.com.cn/archives/tag/%e5%b1%9e%e6%80%a7%e8%ae%be%e7%bd%ae" rel="tag">属性设置</a>, <a href="http://www.runqian.com.cn/archives/tag/%e6%8c%87%e5%ae%9a%e9%a1%b5%e7%a0%81" rel="tag">指定页码</a>, <a href="http://www.runqian.com.cn/archives/tag/%e8%a1%a8%e5%a4%b4" rel="tag">表头</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2152.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>linux下由于系统编码问题造成乱码的解决办法</title>
		<link>http://www.runqian.com.cn/archives/2150.html</link>
		<comments>http://www.runqian.com.cn/archives/2150.html#comments</comments>
		<pubDate>Mon, 30 Aug 2010 02:07:50 +0000</pubDate>
		<dc:creator>zangmingkun</dc:creator>
		
		<category><![CDATA[k.性能优化]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[locale]]></category>

		<category><![CDATA[乱码]]></category>

		<category><![CDATA[系统编码]]></category>

		<category><![CDATA[预处理]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2150</guid>
		<description><![CDATA[最近，有些客户遇到润乾报表应用在linux系统下乱码的问题，检查后都发现是客户的linux系统默认编码设置的不正确造成的。这种原因造成乱码的现象一般都是程序里面写死了的中文字符能正常... ]]></description>
			<content:encoded><![CDATA[<p>最近，有些客户遇到润乾报表应用在linux系统下乱码的问题，检查后都发现是客户的linux系统默认编码设置的不正确造成的。这种原因造成乱码的现象一般都是程序里面写死了的中文字符能正常展现，但是从数据库中取出来的或者从程序中读出来的中文字符就会出现乱码。</p>
<p>下面介绍一下由于linux系统编码设置不正确造成润乾报表应用乱码问题的解决办法。</p>
<p><strong>第一步：检查linux的系统编码。</strong></p>
<p>检查linux的系统编码，确定系统是否支持中文。在linux系统的终端中输入命令：locale，就会看到打印出的系统编码信息。如果打印出来的信息如下，则说明系统的编码不支持中文：</p>
<p>LANG=en_US.UTF-8<br />
LC_CTYPE=”en_US.UTF-8″<br />
LC_NUMERIC=”en_US.UTF-8″<br />
LC_TIME=”en_US.UTF-8″<br />
LC_COLLATE=”en_US.UTF-8″<br />
LC_MONETARY=”en_US.UTF-8″<br />
LC_MESSAGES=”en_US.UTF-8″<br />
LC_PAPER=”en_US.UTF-8″<br />
LC_NAME=”en_US.UTF-8″<br />
LC_ADDRESS=”en_US.UTF-8″<br />
LC_TELEPHONE=”en_US.UTF-8″<br />
LC_MEASUREMENT=”en_US.UTF-8″<br />
LC_IDENTIFICATION=”en_US.UTF-8″</p>
<p>支持中文的系统编码打印出来的信息应该如下图所示：</p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-017p13900708.png" alt="" width="554" height="409" /></p>
<p><strong>第二步：修改系统默认编码设置。</strong></p>
<p>如果发现系统编码不支持中文的话，那么就要修改系统编码，使其支持中文，这样润乾报表的中文在应用中才不会乱码。修改系统编码的代码如下：</p>
<p>/etc/sysconfig/i18n<br />
　　Controls the system font settings. The language variables are used in /etc/profile.d/lang.sh. An example i18n file:<br />
　　LANG=”en_US.GB18030″<br />
　　LANGUAGE=” en_US.GB18030: en_US.GB2312: en_US ”<br />
　　SUPPORTED=” en_US.GB18030: en_US:en:en_US.UTF-8:en_US:en”<br />
　　SYSFONT=”lat0-sun16″</p>
<p>系统的默认字符集是英文，如果要把字符集设置成支持中文的，可以通过设置这个文件来改变系统的默认字符集。</p>
<p>另外，也可在用户的环境变量或者用户的环境变量文件加入路径变量的声明：</p>
<p>在系统的预处理文件中声明，这样对整个系统起作用：</p>
<p>#vi /etc/profile</p>
<p>在文件尾加入：</p>
<p>LC_ALL=”zh_CN.GBK”<br />
export LANG=”zh_CN.GBK”</p>
<p>在用户的预处理文件中声明，对单独的用户起作用：</p>
<p>#vi /root/.bash_profile</p>
<p>在文件尾加入：</p>
<p>export LC_ALL=”zh_CN.GBK”<br />
export LANG=”zh_CN.GBK”</p>
<p>以上配置重新启动服务器使更改生效。</p>
<p><strong>第三步：查看修改过的系统默认编码。</strong></p>
<p>通过以上步骤的操作然后重启电脑，再在终端中输入命令：locale，然后就会看到系统的字符集信息变成了如下内容：</p>
<p><img src="http://www.runqian.com.cn/know-how/wp-content/uploads/2010/08/zrclip-018n72a4f877.png" alt="" width="554" height="409" /></p>
<p>经过以上修改，由于系统默认编码不支持中文造成的乱码就可以顺利解决了。</p>
<hr />
<p><small>摘自：<a href="http://www.runqian.com.cn">润乾软件</a> |
原文链接：<a href="http://www.runqian.com.cn/archives/2150.html">Permalink</a> |
<br/>
Tags: <a href="http://www.runqian.com.cn/archives/tag/linux" rel="tag">linux</a>, <a href="http://www.runqian.com.cn/archives/tag/locale" rel="tag">locale</a>, <a href="http://www.runqian.com.cn/archives/tag/%e4%b9%b1%e7%a0%81" rel="tag">乱码</a>, <a href="http://www.runqian.com.cn/archives/tag/%e7%b3%bb%e7%bb%9f%e7%bc%96%e7%a0%81" rel="tag">系统编码</a>, <a href="http://www.runqian.com.cn/archives/tag/%e9%a2%84%e5%a4%84%e7%90%86" rel="tag">预处理</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2150.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>润乾报表中常用的测试环境JSP(下)</title>
		<link>http://www.runqian.com.cn/archives/2147.html</link>
		<comments>http://www.runqian.com.cn/archives/2147.html#comments</comments>
		<pubDate>Fri, 27 Aug 2010 01:51:13 +0000</pubDate>
		<dc:creator>zangmingkun</dc:creator>
		
		<category><![CDATA[j.安装部署]]></category>

		<category><![CDATA[all_prop.jsp]]></category>

		<category><![CDATA[jsp]]></category>

		<category><![CDATA[TestAWT.jsp]]></category>

		<category><![CDATA[图形环境]]></category>

		<category><![CDATA[环境编码]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2147</guid>
		<description><![CDATA[在报表的部署以及使用中，经常会遇到一些数据源或者环境配置方面的问题，本文中就提供了两个测试常用的JSP，可以在出现相关问题时用来进行测试... ]]></description>
			<content:encoded><![CDATA[<p>在报表的部署以及使用中，经常会遇到一些数据源或者环境配置方面的问题，本文中就提供了两个测试常用的JSP，可以在出现相关问题时用来进行测试。</p>
<p><span style="color: #ff0000;">TestAWT.jsp–测试服务器端图形环境的jsp。一些统计图无法展现等图形问题，都是由于图形环境没有配置正确造成的。</span></p>
<p>&lt;%@ page language=”java” contentType=”text/html; charset=GB18030″<br />
pageEncoding=”GB18030″%&gt;<br />
&lt;jsp:directive.page import=”com.runqian.report4.model.expression.graph.DrawBase”/&gt;<br />
&lt;jsp:directive.page import=”java.awt.Color”/&gt;<br />
&lt;!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=”Content-Type” content=”text/html; charset=GB18030″&gt;<br />
&lt;title&gt;Insert title here&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;%<br />
response.setHeader(”Cache-Control”,”no-cache”);<br />
try{<br />
new DrawBase(){<br />
public void draw(StringBuffer arg0){<br />
Color color =new Color(palette.getColor(0));<br />
g.setColor(color);<br />
g.drawRect(300,300,500,500);</p>
<p>}<br />
};<br />
%&gt;<br />
可以构建JAVA图形环境<br />
&lt;%<br />
}catch(Exception e){<br />
e.printStackTrace();<br />
%&gt;<br />
无法构建JAVA图形环境<br />
&lt;%<br />
}<br />
%&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p><span style="color: #ff0000;">all_prop.jsp–测试环境编码的jsp。系统环境的编码如果不正确，会导致中文字体或图形显示方块或乱码，用这个jsp可以测试出系统的环境编码。</span></p>
<p>&lt;%@ page language=”java” contentType=”text/html; charset=GB18030″<br />
pageEncoding=”GB18030″%&gt;<br />
&lt;jsp:directive.page import=”java.util.Properties”/&gt;<br />
&lt;jsp:directive.page import=”java.util.Set”/&gt;<br />
&lt;jsp:directive.page import=”java.util.Iterator”/&gt;<br />
&lt;!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=”Content-Type” content=”text/html; charset=GB18030″&gt;<br />
&lt;title&gt;Insert title here&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;table&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;属性&lt;/td&gt;<br />
&lt;td&gt;值&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;%<br />
Properties props = System.getProperties();<br />
Set keys = props.keySet();</p>
<p>for(Iterator iter = keys.iterator();iter.hasNext();){<br />
String key = (String)iter.next();<br />
if(”file.encoding”.equalsIgnoreCase(key)){<br />
String value = props.getProperty(key);<br />
%&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;&lt;%=key %&gt;&lt;/td&gt;<br />
&lt;td&gt;&lt;%=value %&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;%<br />
}<br />
}<br />
%&gt;<br />
&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<hr />
<p><small>摘自：<a href="http://www.runqian.com.cn">润乾软件</a> |
原文链接：<a href="http://www.runqian.com.cn/archives/2147.html">Permalink</a> |
<br/>
Tags: <a href="http://www.runqian.com.cn/archives/tag/all_propjsp" rel="tag">all_prop.jsp</a>, <a href="http://www.runqian.com.cn/archives/tag/jsp" rel="tag">jsp</a>, <a href="http://www.runqian.com.cn/archives/tag/testawtjsp" rel="tag">TestAWT.jsp</a>, <a href="http://www.runqian.com.cn/archives/tag/%e5%9b%be%e5%bd%a2%e7%8e%af%e5%a2%83" rel="tag">图形环境</a>, <a href="http://www.runqian.com.cn/archives/tag/%e7%8e%af%e5%a2%83%e7%bc%96%e7%a0%81" rel="tag">环境编码</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2147.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>如何在关联过滤中使用模糊匹配查询</title>
		<link>http://www.runqian.com.cn/archives/2145.html</link>
		<comments>http://www.runqian.com.cn/archives/2145.html#comments</comments>
		<pubDate>Mon, 23 Aug 2010 02:06:12 +0000</pubDate>
		<dc:creator>yanghe</dc:creator>
		
		<category><![CDATA[b.设计基础]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[关联过滤]]></category>

		<category><![CDATA[填报表]]></category>

		<category><![CDATA[模糊匹配]]></category>

		<category><![CDATA[正则表达式]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2145</guid>
		<description><![CDATA[填报表的下拉数据集提供了关联过滤的功能，可以动态的根据某个单元格的值过滤下拉列表中的内容，一般大家都是用等号做完全匹配。具体可参考http://192.168.0.6:80/reportmis/RBP-11819文章... ]]></description>
			<content:encoded><![CDATA[<p>填报表的下拉数据集提供了关联过滤的功能，可以动态的根据某个单元格的值过滤下拉列表中的内容，一般大家都是用等号做完全匹配。具体可参考http://192.168.0.6:80/reportmis/RBP-11819文章。</p>
<p>其实，通过一些小技巧，就可以做到模糊匹配。</p>
<p>在实现功能之前，需要了解的一点是，因为这个关联过滤是在网页中完成的，所以它一定是一个javascript表达式。</p>
<p>尽管我们可以用报表中的表达式编辑器来编辑关联过滤表达式，但实际上它们都是报表自己的函数，无法被网页识别，我们要自己通过javascript来实现。</p>
<p>这里介绍一下用正则表达式实现模糊查询的方法。</p>
<p>比如要判断一个字符串中有没有”abc”这个字符串，正则表达式可以这样写：/.*abc.*/<br />
一个简单的模糊匹配代码如下：<br />
function testStirng1(str){<br />
var regex=/.*abc.*/; // 定义正则表达式对象<br />
return regex.test(str); // 判断是否匹配，返回布尔值<br />
}</p>
<p>由于这里我们可能要动态的替换abc，因此正则表达式对象也是动态创建的，上面的代码可修改为：<br />
function testString2(str1,str2){<br />
// eval可以将一个字符串当作javascript的表达式来执行<br />
// 这里借助它来实现动态的定义一个正则表达式<br />
var regex = eval(”/.*”+str1+”.*/”);<br />
return regex.test(str2);<br />
}</p>
<p>将上面两句代码和在一起，就变成了：eval(”/.*”+str1+”.*/”).test(str2)，这个就是我们要写在关联过滤表达式里面的内容。</p>
<p>接下来，就要对这个表达式来进行一下处理，使得报表可以识别并在解析时进行处理。</p>
<p><strong>第一步：替换引号。</strong></p>
<p>我们把双引号换成单引号：eval(’/.*’+str1+’.*/’).test(str2)</p>
<p>这么做是为了避免报表在解析表达式并生成html的时候出现混淆而导致错误，在具体编写表达式的时候要特别注意。</p>
<p><strong>第二步：将str1换成要关联的单元格的名字。</strong></p>
<p>将str2换成我们要关联的字段名，由于在javaScript中对数据类型不敏感，所以最好在字段名后面加上”.toString()”。</p>
<p>举例来说，现在我们有两个单元格A1和B1。其中A1是可写单元格；B1是下拉数据集，其中的col3字段要跟A1做模糊匹配。那么关联过滤的表达式为：<br />
eval(’/.*’+A1+’.*/’).test(col3.toString())</p>
<p>上面的给出的例子是任意位置匹配，其实我们还可以实现左匹配和右匹配：<br />
左匹配：eval(’/&#8217;+A1+’.*/’).test(col3.toString())<br />
右匹配：eval(’/.*’+A1+’/&#8217;).test(col3.toString())</p>
<p>最后，要注意的一点是对于扩展格，需要把单元格的名字用${}括起来，这点和一般的完全匹配规则一样。</p>
<hr />
<p><small>摘自：<a href="http://www.runqian.com.cn">润乾软件</a> |
原文链接：<a href="http://www.runqian.com.cn/archives/2145.html">Permalink</a> |
<br/>
Tags: <a href="http://www.runqian.com.cn/archives/tag/javascript" rel="tag">javascript</a>, <a href="http://www.runqian.com.cn/archives/tag/%e5%85%b3%e8%81%94%e8%bf%87%e6%bb%a4" rel="tag">关联过滤</a>, <a href="http://www.runqian.com.cn/archives/tag/%e5%a1%ab%e6%8a%a5%e8%a1%a8" rel="tag">填报表</a>, <a href="http://www.runqian.com.cn/archives/tag/%e6%a8%a1%e7%b3%8a%e5%8c%b9%e9%85%8d" rel="tag">模糊匹配</a>, <a href="http://www.runqian.com.cn/archives/tag/%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f" rel="tag">正则表达式</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2145.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>如何利用API实现行式报表后台导入excel数据入库</title>
		<link>http://www.runqian.com.cn/archives/2143.html</link>
		<comments>http://www.runqian.com.cn/archives/2143.html#comments</comments>
		<pubDate>Fri, 20 Aug 2010 02:10:44 +0000</pubDate>
		<dc:creator>zangmingkun</dc:creator>
		
		<category><![CDATA[l.编程接口]]></category>

		<category><![CDATA[API接口]]></category>

		<category><![CDATA[excel]]></category>

		<category><![CDATA[代码]]></category>

		<category><![CDATA[后台导入]]></category>

		<category><![CDATA[数据入库]]></category>

		<category><![CDATA[行式报表]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2143</guid>
		<description><![CDATA[润乾报表提供了excel导入页面后入库的功能,丰富了用户导入excel的方式。对于普通填报表,润乾报表提供了直接后台入库和导入页面入库的方式,本文介绍如何利用润乾报表提供的API接口在行式填... ]]></description>
			<content:encoded><![CDATA[<p>润乾报表提供了excel导入页面后入库的功能,丰富了用户导入excel的方式。对于普通填报表,润乾报表提供了直接后台入库和导入页面入库的方式,那么在行式填报表中,如何实现后台导入excel入库呢?</p>
<p>用润乾报表提供的API接口,就可以完成这个功能。</p>
<p>下面是示例代码：</p>
<p><%@ page contentType=”text/html;charset=GBK” %><br />
<%@ page import=”com.runqian.report4.usermodel.*”%><br />
<%@ page import=”com.runqian.base4.util.*”%><br />
<%@ page import=”com.runqian.report4.model.*”%><br />
<%@ page import=”com.runqian.report4.util.*”%><br />
<%@ page import=”com.runqian.report4.cache.CacheManager”%><br />
<%@ page import=”java.io.*”%></p>
<p><%@ page import=”com.runqian.report4.dataset.DataSet”%><br />
<%@ page import=”com.runqian.report4.dataset.SQLDataSetFactory”%><br />
<%@ page import=”com.runqian.report4.view.olap.OlapUtils”%><br />
<%@ page import=”com.runqian.report4.view.excel.ExcelReport”%><br />
<%@ page import=”java.sql.Connection”%><br />
<%@ page import=”java.sql.Driver”%><br />
<%@ page import=”java.sql.DriverManager”%><br />
<%@page import=”com.runqian.report4.ide.ExcelImporter”%><br />
<%@page import=”com.runqian.report4.usermodel.input.InputProperty”%><br />
<%@page import=”com.runqian.report4.input.DataSaver”%><br />
<%@page import=”com.runqian.report4.model.engine.ExtCellSet”%><br />
<%@page import=”com.runqian.report4.model.engine2.RowReport”%><br />
<%@page import=”com.runqian.report4.input.RowReportSaver”%><br />
<%@page import=”java.text.SimpleDateFormat”%><br />
<%@page import=”com.runqian.base4.resources.FormatUtils”%><br />
<%@page import=”java.util.Locale”%><br />
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”><br />
<html><br />
<head><br />
</head></p>
<p><body></p>
<p><%<br />
//设置报表路径<br />
String reportFile = “D:\\testupdate.raq”;<br />
Context cxt = new Context();<br />
ReportDefine rd = null;<br />
try {<br />
//读取报表模版定义<br />
rd = (ReportDefine) ReportUtils.read(reportFile);<br />
} catch (Exception e) {<br />
// TODO Auto-generated catch block<br />
e.printStackTrace();<br />
}<br />
System.out.println(”报表读取完毕===================================”);<br />
//计算报表<br />
Engine engine = new Engine(rd, cxt);<br />
IReport iReport = engine.calc();<br />
//将计算完的报表转换成行式报表对象<br />
RowReport rr = (RowReport)iReport;<br />
//第几行是主扩展行<br />
String did = rr.getDetailID( 1 );<br />
//定义报表保存的参数<br />
SimpleDateFormat dateF = new SimpleDateFormat( FormatUtils.getDateFormat( Locale.getDefault() ) );<br />
SimpleDateFormat timeF = new SimpleDateFormat( FormatUtils.getTimeFormat( Locale.getDefault() ) );<br />
SimpleDateFormat datetimeF = new SimpleDateFormat( FormatUtils.getDatetimeFormat( Locale.getDefault() ) );<br />
//设置excel路径<br />
String excelFile = “D:\\test1500.xls”;<br />
//生成excel导入对象<br />
ExcelImporter ei = new ExcelImporter(excelFile);<br />
//得到excel中的第一个sheet的对象<br />
IReport excelReport = ei.getReport(0);<br />
//构造数据保存对象<br />
RowReportSaver rowSaver = new RowReportSaver(rr, null, cxt);<br />
//读入excel文件及其数据<br />
//逐行逐列把excel数据写入填报表<br />
for(int i=1;i<=excelReport.getRowCount();i++){<br />
//先插入一行,这里是不定行导入excel数据<br />
Area area = rr.insertDetail( did );<br />
//循环取得excel单元格<br />
for(int j=1;j<=iReport.getColCount();j++){<br />
INormalCell iExcelCell=excelReport.getCell(i, (short)j);</p>
<p>if( iExcelCell == null ) continue;<br />
String svalue = “”;<br />
//得到单元格的值<br />
Object value = iExcelCell.getValue();<br />
if( value != null )<br />
svalue = value.toString();<br />
//把填报值保存到数据保存对象中<br />
rowSaver.setCellInputValue( area.getBeginRow(), (short)j, svalue, dateF, timeF, datetimeF );</p>
<p>}</p>
<p>}<br />
//执行保存<br />
rowSaver.save();<br />
out.print(”数据保存成功”);</p>
<p>%></p>
<p></body><br />
</html></p>
<p>通过这样的方式，我们就可以利用API来对行式填报表进行后台数据直接入库的功能了。</p>
<hr />
<p><small>摘自：<a href="http://www.runqian.com.cn">润乾软件</a> |
原文链接：<a href="http://www.runqian.com.cn/archives/2143.html">Permalink</a> |
<br/>
Tags: <a href="http://www.runqian.com.cn/archives/tag/api%e6%8e%a5%e5%8f%a3" rel="tag">API接口</a>, <a href="http://www.runqian.com.cn/archives/tag/excel" rel="tag">excel</a>, <a href="http://www.runqian.com.cn/archives/tag/%e4%bb%a3%e7%a0%81" rel="tag">代码</a>, <a href="http://www.runqian.com.cn/archives/tag/%e5%90%8e%e5%8f%b0%e5%af%bc%e5%85%a5" rel="tag">后台导入</a>, <a href="http://www.runqian.com.cn/archives/tag/%e6%95%b0%e6%8d%ae%e5%85%a5%e5%ba%93" rel="tag">数据入库</a>, <a href="http://www.runqian.com.cn/archives/tag/%e8%a1%8c%e5%bc%8f%e6%8a%a5%e8%a1%a8" rel="tag">行式报表</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2143.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>润乾报表中常用的测试环境JSP(上)</title>
		<link>http://www.runqian.com.cn/archives/2141.html</link>
		<comments>http://www.runqian.com.cn/archives/2141.html#comments</comments>
		<pubDate>Thu, 19 Aug 2010 01:58:37 +0000</pubDate>
		<dc:creator>zangmingkun</dc:creator>
		
		<category><![CDATA[j.安装部署]]></category>

		<category><![CDATA[jsp]]></category>

		<category><![CDATA[字体]]></category>

		<category><![CDATA[数据源]]></category>

		<category><![CDATA[测试]]></category>

		<category><![CDATA[部署]]></category>

		<guid isPermaLink="false">http://www.runqian.com.cn/?p=2141</guid>
		<description><![CDATA[在报表的部署以及使用中,经常会遇到一些数据源或者环境配置方面的问题，本文提供了两个测试常用的JSP,可以在出现相关问题时用来进行测试... ]]></description>
			<content:encoded><![CDATA[<p>在报表的部署以及使用中,经常会遇到一些数据源或者环境配置方面的问题，本文提供了两个测试常用的JSP,可以在出现相关问题时用来进行测试。</p>
<p>data_source_test.jsp–测试数据源，可以检测数据源是否被正确配置，以及是否可以连接。</p>
<p><%@ page contentType=”text/html;charset=GBK” %><br />
<%@ page import=”com.runqian.report4.usermodel.*”%><br />
<%@ page import=”com.runqian.base4.util.*”%><br />
<%@ page import=”com.runqian.report4.model.*”%><br />
<%@ page import=”com.runqian.report4.util.*”%><br />
<%@ page import=”com.runqian.report4.cache.CacheManager”%><br />
<%@ page import=”java.io.*”%></p>
<p><%@ page import=”com.runqian.report4.dataset.DataSet”%><br />
<%@ page import=”com.runqian.report4.dataset.SQLDataSetFactory”%><br />
<%@ page import=”com.runqian.report4.view.olap.OlapUtils”%><br />
<%@ page import=”com.runqian.report4.view.excel.ExcelReport”%><br />
<%@ page import=”java.sql.Connection”%><br />
<%@ page import=”java.sql.Driver”%><br />
<%@ page import=”java.sql.DriverManager”%><br />
<%@page import=”com.runqian.report4.ide.ExcelImporter”%><br />
<%@page import=”com.runqian.report4.usermodel.input.InputProperty”%><br />
<%@page import=”com.runqian.report4.input.DataSaver”%><br />
<%@page import=”com.runqian.report4.model.engine.ExtCellSet”%><br />
<%@page import=”com.runqian.report4.model.engine2.RowReport”%><br />
<%@page import=”com.runqian.report4.input.RowReportSaver”%><br />
<%@page import=”java.text.SimpleDateFormat”%><br />
<%@page import=”com.runqian.base4.resources.FormatUtils”%><br />
<%@page import=”java.util.Locale”%><br />
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”><br />
<html><br />
<head><br />
</head></p>
<p><body></p>
<p><%<br />
//设置报表路径<br />
String reportFile = “D:\\testupdate.raq”;<br />
Context cxt = new Context();<br />
ReportDefine rd = null;<br />
try {<br />
rd = (ReportDefine) ReportUtils.read(reportFile);<br />
} catch (Exception e) {<br />
// TODO Auto-generated catch block<br />
e.printStackTrace();<br />
}<br />
System.out.println(”报表读取完毕===================================”);<br />
//计算报表<br />
Engine engine = new Engine(rd, cxt);<br />
IReport iReport = engine.calc();<br />
RowReport rr = (RowReport)iReport;<br />
String did = rr.getDetailID( 1 ); //第几行是主扩展行<br />
SimpleDateFormat dateF = new SimpleDateFormat( FormatUtils.getDateFormat( Locale.getDefault() ) );<br />
SimpleDateFormat timeF = new SimpleDateFormat( FormatUtils.getTimeFormat( Locale.getDefault() ) );<br />
SimpleDateFormat datetimeF = new SimpleDateFormat( FormatUtils.getDatetimeFormat( Locale.getDefault() ) );<br />
System.out.println(”报表计算完毕@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@”);<br />
String excelFile = “D:\\test1500.xls”;<br />
ExcelImporter ei = new ExcelImporter(excelFile);<br />
IReport excelReport = ei.getReport(0);<br />
RowReportSaver rowSaver = new RowReportSaver(rr, null, cxt); //构造数据保存对象<br />
System.out.println(” 获取Excel完毕&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;&#038;”);<br />
//读入excel文件及其数据<br />
for(int i=1;i<=excelReport.getRowCount();i++){ ////逐行逐列把excel数据写入填报表<br />
Area area = rr.insertDetail( did );<br />
//for(int j=1;j<=iReport.getColCount();j++){<br />
//INormalCell iExcelCell=excelReport.getCell(i, (short)j); //取得excel单元格</p>
<p>//if( iExcelCell == null ) continue;<br />
//String svalue = “”;<br />
//Object value = iExcelCell.getValue();<br />
//if( value != null ) svalue = value.toString();</p>
<p>/* 校验过程 star*/<br />
//if((short)j==1 &#038;&#038; svalue.length()>3){<br />
//list.add((”第”+sheetNum+”页的第”+i+”行”+”第”+(short)j+”列的值”+svalue+”字符长度大于3!”));<br />
//throw new Exception(”校验失败”);<br />
//}</p>
<p>/* 校验过程 end*/</p>
<p>//}<br />
for(int j=1;j<=iReport.getColCount();j++){<br />
INormalCell iExcelCell=excelReport.getCell(i, (short)j); //取得excel单元格</p>
<p>if( iExcelCell == null ) continue;<br />
String svalue = “”;<br />
Object value = iExcelCell.getValue();<br />
if( value != null ) svalue = value.toString();</p>
<p>rowSaver.setCellInputValue( area.getBeginRow(), (short)j, svalue, dateF, timeF, datetimeF );</p>
<p>}</p>
<p>}</p>
<p>System.out.println(”设置更新属性完毕%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%”);</p>
<p>rowSaver.save(); //执行保存<br />
out.print(”数据保存成功”);</p>
<p>%></p>
<p></body><br />
</html></p>
<p>enum_font.jsp–列出java环境的字体，当发现统计图里面的字体不正确时，可通过这个jsp检测系统中是否有统计图中使用的字体。</p>
<p><%@ page language=”java” pageEncoding=”GBK”%><br />
<jsp:directive.page import=”java.awt.GraphicsEnvironment”/><br />
<%<br />
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();<br />
String[] fontNames= ge.getAvailableFontFamilyNames();<br />
%><br />
<html><br />
<head><br />
</head><br />
<body style=”font-size: 14px”><br />
当前Java环境支持的字体列表<br />
<dir><br />
<%<br />
for(int i=0;i<fontNames.length;i++)<br />
out.println(”
<li>”+fontNames[i]);<br />
%><br />
</dir><br />
</body><br />
</html></p>
<hr />
<p><small>摘自：<a href="http://www.runqian.com.cn">润乾软件</a> |
原文链接：<a href="http://www.runqian.com.cn/archives/2141.html">Permalink</a> |
<br/>
Tags: <a href="http://www.runqian.com.cn/archives/tag/jsp" rel="tag">jsp</a>, <a href="http://www.runqian.com.cn/archives/tag/%e5%ad%97%e4%bd%93" rel="tag">字体</a>, <a href="http://www.runqian.com.cn/archives/tag/%e6%95%b0%e6%8d%ae%e6%ba%90" rel="tag">数据源</a>, <a href="http://www.runqian.com.cn/archives/tag/%e6%b5%8b%e8%af%95" rel="tag">测试</a>, <a href="http://www.runqian.com.cn/archives/tag/%e9%83%a8%e7%bd%b2" rel="tag">部署</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.runqian.com.cn/archives/2141.html/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
