Posts Tagged ‘润乾’

润乾报表填报:可输入的下拉框

04.16.2009 by fengzhou - 0 Comment - 0
Posted in web报表

使用润乾报表实现填报的用户都知道,标准HTML标签提供了不少输入控件,如下拉列表等,可是下拉列表只能选择,不能输入,导致用户用起来很不爽。在实际应用中,用户往往需要既可下拉选择又可输入,比较方便,效果如下图:

input_drop_down_box.png

要实现上述的功能,首先需要自己开发一个下拉控件,实现既可下拉又可输入。但是,面临一个问题:即真实值和显示值的对应关系。当下拉框既有显示值又有真实值的时候,你无法知道用户录入的是真实值还是显示值,其实两种情况都有可能。

当用户输入显示值的时候,你需要先帮他找匹配的真实值;当用户输入真实值的时候,不需要匹配。如何判断用户输入的是显示值还是真实值?

还存在另一种情况,用户输入的值有可能是下拉选项里存在的,也有可能是下拉选项里不存在的,是否允许用户输入下拉选项里不存在的项?需要加个开关来控制吧。

当然,更加麻烦的是多选的情况,多选的时候需要提供清空、全选等控制,还需要提供允许输入不存在的项、显示值与真实值的判断等。

实现步骤:

  1. 按常规方式设计填报表
  2. 定义编辑风格的时候,你会发现界面下方多了一些选项,如下图所示:
    input_drop_down_box1.png
  3. 根据需要进行打勾即可。

引自:润乾报表
原文链接:润乾报表填报:可输入的下拉框
相关文章: 国内企业级应用中的报表需求 ; 五种主流web报表工具的功能对比选择适合自己的Web报表工具指南快逸报表类EXCEL的高效报表设计web报表的扩展功能
其他相关内容: 润乾商业智能解决方案商业智能BI联盟 ; Java报表 ; 报表软件 报表工具的功能对比; .net报表工具

web应用中数据校验的零代码实现

04.15.2009 by fengzhou - 0 Comment - 0
Posted in web报表应用

对用户输入的数据进行合法性检查,避免错误非法的数据进入数据库,这是业务系统最常见的需求。 在web系统中,用户在网页上录入了某些数据后,系统会检查输入值是否满足一定的规则。最典型的例子是,用户录入了”运货费”之后做数据提交,网页上要先检查”运货费”是否是是小于100的正数,如果不是的话就给出提示,不允许提交。

这个功能在客户端程序中是比较容易实现的,客户端的编程环境一般都提供”事件”触发机制,一个控件的填写可以触发一段代码来校验正确性。但是,采用 一般方法来设计java的web程序,就没有这么容易了。网页上的数据校验,不太可能提交给服务端程序去完成–那样的话效率太低了,用户体验也很差。

使用润乾报表,这个问题就可以轻松解决。

润乾报表不仅是一个强大的报表工具,也是一个强大的编程类库!web编程常常遇到的问题,润乾报表都可以解决:下拉列表、自动计算、自动生成流水号、实时数据合法性检查、多选批量操作等等。

润乾报表增加一个实时校验十分简单,具体方法如下:

合法性检查属性的表达式规则遵从javascript的语法规则,所以在校验表达式中可以是一个 javascript表达式,也可以调用一个函数。例如我们要对F2单元格中录入的运费的做校验,运费的数据在0到100元之间,则选中F2单元格,打开 更新属性设置对话框,在校验中增加一条校验表达式,在表达式中输入:${F2}>=0 && ${ F2}<=100,出错提示输入:运费为非法数据

然后确定发布,在运费里输入一个大于100的数据,如1977.63,则系统会弹出javascript提示框,提示用户输入正确的数据:

引自:润乾报表知识库
原文链接:web应用中数据校验的零代码实现
相关文章:润乾报表填报:可输入的下拉框; 润乾决策分析系统 润乾报表出了新版统计图   ;解决行式填报导入excel发生错位的问题
其他相关内容: 润乾商业智能解决方案
商业智能BI联盟
; ; 报表软件
Java报表

润乾报表:不展现页面,直接将报表组导出excel

04.14.2009 by fengzhou - Comments Off - 0
Posted in java报表相关

润乾报表的用户提出这样的需求:点击页面上按钮后台自动计算报表组并导出excel。这样的需求可以用api实现。

解决方案

将如下代码加入报表展示的jsp文件中,假设报表组文件是reportFiles/tianbaoraq/4.rpg。

<%

//报表文件相对路径
String reportFile=application.getRealPath(”/reportFiles/tianbaoraq/4.rpg”);

//新建一个 HashMap对象存放参数,map可以存放空参数。传递参数时名称要保证和报表组用到的参数名一致。
HashMap map=new HashMap();
Enumeration paramNames = request.getParameterNames();
if(paramNames!=null){
while(paramNames.hasMoreElements()){
String paramName = (String) paramNames.nextElement();
String paramValue=request.getParameter(paramName);

//把参数名和参数值分别加入到hashmap的key和value里
map.put(paramName,paramValue);
}
}

//读取报表组文件
ReportGroup rg = ReportGroup.read(reportFile);

//报表组参数元数据
ParamMetaData rg_pmd=rg.getParamMetaData();

//设置报表组参数
if(rg_pmd !=null){
int rg_pmdNum = rg_pmd.getParamCount();
String rg_paramName=””;
for(int j=0; j<rg_pmdNum;j++){
rg_paramName=rg_pmd.getParam(j).getParamName();
for (Iterator it=map.keySet().iterator();it.hasNext();){

//遍历hashmap,将对应的参数写入报表组对象
String key= (String)it.next();
if(rg_paramName.equals(key)) {
rg_pmd.getParam(j).setValue((String)map.get(key));}
}
}
}

//获取上下文
Context context = new Context();

//计算报表组
GroupEngine gEngine = new GroupEngine(rg, context);

//获取子报表数量
int num=rg.getItemCount();

//新建excelReport对象
ExcelReport er=new ExcelReport();

//循环分别计算子报表
for(int i=0;i<num;i++){
IReport r = gEngine.get(i);

//生成子表的excel对象
er.export( “a”+i,r);
}
try{

//将多个子表的excel对象导入到一同个excel文件里。文件名拼上当前时间

Date currentTime = new Date();

//格式化日期
SimpleDateFormat formatter = new SimpleDateFormat(”yyyyMMddhhmmss”);
String dateString = formatter.format(currentTime);
er.saveTo(”c:/work/name”+dateString+”.xls”);
}catch(Exception e){
e.printStackTrace();
}
%>

<script>
alert(”导出完成。”);
</script>

引自:润乾技术知识库
原文链接:润乾报表:不展现页面,直接将报表组导出excel
相关文章:在润乾参数表单中如何不点击查询按钮自动传参关于润乾报表自定义函数报错的问题决策分析解决方案润乾报表填报处理类问题
其他相关内容:润乾报表 ; RAQSOFT ; 报表工具知识库 ; 商业智能专业知识库

在服务器上保存客户端的打印配置

04.14.2009 by fengzhou - 0 Comment - 0
Posted in java报表相关

润乾报表提供了很多的打印参数可供选择。例如:页边距设置(左边距、右边距、上边距、下边距)、纸张方向设置(纵向或横向)、纸张类型设置、纸张大小设置等等,为报表的精确打印提供了技术保障。

有些情况下,客户想实现保存客户端打印的设置,不再重复每次都设置打印的边距,润乾报表也可以做到。

考虑到每台客户端电脑一般都会固定连接一个打印机,所以这个功能设计的时候是按照不同报表去保存不同的打印设置的。也就是说,如果用户甲先访问报表A,保存了打印设置之后,用户乙又访问报表A,看到的就是用户甲先保存的打印设置。在实际的项目中,报表的开发程序员如果要实现按照不同用户保存不同的打印设置,要调用润乾报表的api,结合项目的用户信息自行编写代码来保存打印设置,具体的api调用请参考相关的用户手册。

解决办法:
在web.xml文件中添加servlet
<servlet>
<servlet-name>com.runqian.report4.usermodel.PrintSetupServlet</servlet-name>
<servlet-class>com.runqian.report4.usermodel.PrintSetupServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>com.runqian.report4.usermodel.PrintSetupServlet</servlet-name>
<url-pattern>/servlet/PrintSetupServlet</url-pattern>
</servlet-mapping>
在jsp的report:html标签中加上savePrintSetup=”yes”
这样在服务器端就会自动生成一个clientPrintSetup.properties的配置文件用于保存客户端每次打印设置的信息供下次打印时调用。

引自:润乾报表知识库
原文链接:打印-页面边距设置  ; vpn外网打印报表 润乾报表填报表组:套表、多表填报 ;Java报表工具制表能力的探讨
其他相关内容: 润乾商业智能解决方案 ; 商业智能BI联盟 ; Java报表工具打印方案集锦报表工具制表能力的探讨
其他相关内容: 润乾商业智能解决方案商业智能BI联盟 ; Java报表

精度要求较高的小数计算如何实现

04.10.2009 by fengzhou - 0 Comment - 0
Posted in java报表相关

润乾报表实际应用当中,有很多报表中的小数计算(浮点运算)精度要求比较高。

比如金融行业的报表中,对于 (5588.4 + 288.4)* 0.7 这样的计算,要求结果不能使用四舍五入的方式。如果在单元格中直接写上” (5588.4 + 288.4)* 0.7 “,那么报表运行的结果是4113.75999 ,而手工计算的结果是 4113.76 。

那么怎么样把它变成真正的 4113.76 ,而且不能用四舍五入?

解决方案

润乾报表为了加快运算速度,会把直接敲入表达式的小数缺省当成双精度( double )类型处理,此时数据往往存在误差。比如: (5588.4 + 288.4)* 0.7 这样的写法,因为表达式里的三个数值 5588.4 、 288.4 、0.7 缺省变成了double ,用 double 计算的结果就是 4113.75999 。

因此,要使用精度转换函数 decimal() ,将数值转换成更高精度的 decimal 类型。写成: (decimal(’5588.4 ′ ) + decimal(’288.4 ′ ))* decimal(’0.7 ′ ) 即可解决这个问题。

那么,这里为什么不能写成 decimal(5588.4 ) 呢?这是 因为这样写的话, 5588.4 会被缺省当成 double 类型,再转成 decimal ,误差已经存在了,无法消除,必须应该写成: decimal(’5588.4′ ),此时加上引号的 5588.4 不会被当成 double ,直接从字符型转成 decimal ,才是真正的 decimal 数据,不会有任何误差。

原文链接:精度要求较高的小数计算如何实现
引自:润乾报表知识库
相关文章:润乾报表填报:可输入的下拉框; 润乾决策分析系统润乾报表多源回填:快速实现多库多表提交数据润乾报表出了新版统计图  ;定制填报提交的“确认”提示框
其他相关内容: 润乾商业智能解决方案 ; 商业智能BI联盟 ; ; 润乾报表:动态改变填报更新数据的数据源 ;EXCEL和报表工具Java报表

用润乾报表来实现Web应用中的下拉框的关联过滤

04.09.2009 by fengzhou - 0 Comment - 0
Posted in web报表应用

在数据填报的时候,常常出现多个下拉列表框之间的关联关系。比如下图的效果:下拉框A是选择地区,下拉框B是选择城市。这时候自然就会出现关联过滤的需求:在A中选择了地区是”华东”,在B中应该只出现该省份对应的城市,不能出现其他省份的城市了。对于客户端开发工具比如PB等等来说,下拉框控件本身就可以实现关联过滤。但是,到了web应用开发的时候,程序员发现以前客户端编程工具中可以直接使用的关联过滤下拉框不见了,怎么办?

tech2009030601.jpg

解决办法有三种1、自己开发;2、到网上下载一个免费的关联下拉框控件;3、使用商用开发工具。

我们比较发现,第1种方法费时费力,就像是自己车子的轮胎坏了,不修也不买,而是自己生产一个轮子,实在是浪费精力。第2种方法看似省钱,其实仔细分析不难发现,这样的办法其实更费时费力!原因在于:1)网上下载的控件通常是编程爱好者兴趣之作,质量和性能很难保证,一旦有问题很难解决。2)如果有了需求要修改这个控件,找原创的人来修改,更本不可能,只能自己看懂内部的代码--那样比自己写一个还要费时间呀!3)假如还需要下拉树、下拉日历、导入 excel、上传图片、上传文件等等控件,也都上网下载,那么应用程序整体都会变的不稳定,不易修改了。

看到这里您不禁要问:如果要买商用开发工具,有没有合适的?有没有非常便宜的?买了以后有没有售后服务(支持、升级和需求修改)?

可以肯定的告诉您,润乾报表就是能够解决这些问题的开发工具!

用润乾报表制作关联下拉框十分简单,只要把单元格的编辑风格修改一下,并且添加数据对应关系即可,具体步骤如下:

假设单元格C10/E10是编辑风格设置为下拉数据集,并实现,C10与E10之间的联动,即:当在C10单元格选择某个地区之后,E10下拉框中自动过滤,显示对应地区的城市。

首先为C10和E10单元格准备数据集,这里为内建数据集。配置-》数据集-》增加-》内建数据,添加字段及数据如下:

准备好数据集后,给C10单元格设置”下拉数据集”编辑风格,并设置显示列和数据列如下图所示。

给E10单元格设置”下拉数据集”编辑风格,并设置显示列和数据列。

然后,切换到Web特性tab页,设置关联过滤表达式与关联过滤单元格,实现C10与E10的联动。

关联过滤表达式:dq=${C10},表示该下拉菜单中列举的城市名称(csname)对应的地区名称(dqname)必须与C10单元格选择的地区名称一致。而地区名称是通过C10单元格设置的,所以将C10单元格设置为关联过滤单元格。

引自:润乾报表知识库
原文链接:用润乾报表来实现Web应用中的下拉框的关联过滤
相关文章:润乾报表填报:可 输入的下拉框; 润乾决策分析系统润乾报表多源回填:快速实现多库多表提交数据润乾报表出了新版统计图  ;定制填报提交的“确认”提示框
其他相关内容: 润乾商业智能解决方案 ; 商业智能BI联盟 ; ; 润乾报表:动态改变填报更新数据的数据源 ;EXCEL和报表工具Java报表

解决行式填报导入excel发生错位的问题

04.07.2009 by fengzhou - 0 Comment - 0
Posted in web报表

润乾报表的行式填报从根本上解决了动态增删行的问题,不仅仅可以对分组报表、分片输入的报表实现多区域的插入删除,还能够动态解析编辑风格、自动计算、合法性检查等属性,实现了很智能的流水号、缺省值等功能。

使用润乾报表行式填报的用户遇到这样的一个问题:行式填报导入excel,发生了错位。比如:excel的第一列本来应该导入到报表的第一列,结果却不见了,excel的第二列反而导入到了报表的第一列。如何解决呢?

解决方案

在用户的填报表中发现,需要导入excel的第一列是个合并格,将这个合并格恢复成普通单元格,就可以正确导入了。例如第一列是A1和B1的合并格,拆分就可以正确导入了。

引自:润乾报表知识库
原文链接:解决行式填报导入excel发生错位的问题
相关文章:润乾报表填报:可输入的下拉框; 润乾决策分析系统web报表的扩展功能润乾报表出了新版统计图
其他相关内容: 润乾商业智能解决方案商业智能BI联盟 ; Java报表 ; 报表软件 报表工具的功能对比; .net报表工具

润乾报表:不展现页面,直接将报表组导出excel

03.17.2009 by hewei - 0 Comment - 0
Posted in web报表应用

润乾报表的用户提出这样的需求:点击页面上按钮后台自动计算报表组并导出excel。这样的需求可以用api实现。

解决方案

将如下代码加入报表展示的jsp文件中,假设报表组文件是reportFiles/tianbaoraq/4.rpg。

<%

//报表文件相对路径
String reportFile=application.getRealPath(”/reportFiles/tianbaoraq/4.rpg”);

//新建一个 HashMap对象存放参数,map可以存放空参数。传递参数时名称要保证和报表组用到的参数名一致。
HashMap map=new HashMap();
Enumeration paramNames = request.getParameterNames();
if(paramNames!=null){
while(paramNames.hasMoreElements()){
String paramName = (String) paramNames.nextElement();
String paramValue=request.getParameter(paramName);

//把参数名和参数值分别加入到hashmap的key和value里
map.put(paramName,paramValue);
}
}

//读取报表组文件
ReportGroup rg = ReportGroup.read(reportFile);

//报表组参数元数据
ParamMetaData rg_pmd=rg.getParamMetaData();

//设置报表组参数
if(rg_pmd !=null){
int rg_pmdNum = rg_pmd.getParamCount();
String rg_paramName=””;
for(int j=0; j<rg_pmdNum;j++){
rg_paramName=rg_pmd.getParam(j).getParamName();
for (Iterator it=map.keySet().iterator();it.hasNext();){

//遍历hashmap,将对应的参数写入报表组对象
String key= (String)it.next();
if(rg_paramName.equals(key)) {
rg_pmd.getParam(j).setValue((String)map.get(key));}
}
}
}

//获取上下文
Context context = new Context();

//计算报表组
GroupEngine gEngine = new GroupEngine(rg, context);

//获取子报表数量
int num=rg.getItemCount();

//新建excelReport对象
ExcelReport er=new ExcelReport();

//循环分别计算子报表
for(int i=0;i<num;i++){
IReport r = gEngine.get(i);

//生成子表的excel对象
er.export( “a”+i,r);
}
try{

//将多个子表的excel对象导入到一同个excel文件里。文件名拼上当前时间

Date currentTime = new Date();

//格式化日期
SimpleDateFormat formatter = new SimpleDateFormat(”yyyyMMddhhmmss”);
String dateString = formatter.format(currentTime);
er.saveTo(”c:/work/name”+dateString+”.xls”);
}catch(Exception e){
e.printStackTrace();
}
%>

<script>
alert(”导出完成。”);
</script>

引自:润乾技术知识库
原文链接:润乾报表:不展现页面,直接将报表组导出excel
相关文章:在润乾参数表单中如何不点击查询按钮自动传参关于润乾报表自定义函数报错的问题决策分析解决方案润乾报表填报处理类问题
其他相关内容:润乾报表 ; RAQSOFT ; 报表工具知识库 ; 商业智能专业知识库