我们系统里面用到水晶报表展示,就是从水晶里面读取参数出来,某些符合一定规则的参数自己设置展示的方式,程序是用用java实现的,,一般的报表设置参数都没问题。但是某些参数在为空的情况下第一次可以显示出来,翻页显示就要提示重新输入参数,点击确定才能看。我每个参数,即使为空都设置过的,。。水晶自己带的desktop.war在浏览这个报表的时候也会出现这样的问题,但是iis下的csp文件可以浏览。希望有兄弟遇到过这样情况的可以提供帮助
代码如下:
IEnterpriseSession es = (IEnterpriseSession) session.getAttribute("enterpriseSession");
IInfoObject oInfoObject = (IInfoObject) session.getAttribute("infoObject");
IReport report = (IReport)oInfoObject;
List parameters = report.getReportParameters();
Fields fields = new Fields();
//0:number, 1:currency, 2:boolean, 3:date, 4:time, 5:datetime, 6:String
//0:数字、1:货币、2:boolean、3:日期、4:时间、5:时间日期、6:字符串
if(parameters.size() > 0){
int pSize = parameters.size();
for (int i = 0; i < pSize; i++){
IReportParameter param = (IReportParameter)report.getReportParameters().get(i);
String paramName = URLEncoder.encode(param.getParameterName(), "utf-8");
String paramValue = (String)requestParamMap.get(paramName);
ParameterField pf = new ParameterField();
pf.setAllowNullValue(false);
//设置参数名称
pf.setName(param.getParameterName());
//try{
//ParameterField pf = param.getParameterField();
//}catch(Exception e){}
//设置参数值类型
int valueType = param.getValueType();
switch(valueType){
case 0:
pf.setType(FieldValueType.numberField);
break;
case 1:
pf.setType(FieldValueType.currencyField);
break;
case 2:
pf.setType(FieldValueType.booleanField);
break;
case 3:
pf.setType(FieldValueType.dateField);
break;
case 4:
pf.setType(FieldValueType.timeField);
break;
case 5:
pf.setType(FieldValueType.dateTimeField);
break;
case 6:
pf.setType(FieldValueType.stringField);
break;
default:
break;
}
//设置参数值[只有离散值]
if(param.isDiscreteValueSupported()){
addDiscreteFieldValue(pf, param.getValueType(), paramValue);
}
fields.add(pf);private void addDiscreteFieldValue(IParameterField paramField, int valueType, String paramValue) {
ParameterFieldDiscreteValue pfdv = new ParameterFieldDiscreteValue();
Values values = new Values();
switch (valueType) {
case 0:
case 1:
case 2:
case 6:
pfdv.setValue(paramValue);
break;
case 3:
case 4:
case 5:
SimpleDateFormat dateFormatter = new SimpleDateFormat("(yyyy,M,d)");
Date dateValue = dateFormatter.parse(paramValue.substring(paramValue.indexOf('(') ), new ParsePosition(0));
pfdv.setValue(dateValue);
break;
default:
pfdv.setValue(paramValue);
break;
}
values.add(pfdv);
//paramField.getCurrentValues().add(pfdv);
paramField.setCurrentValues(values);
}
代码如下:
IEnterpriseSession es = (IEnterpriseSession) session.getAttribute("enterpriseSession");
IInfoObject oInfoObject = (IInfoObject) session.getAttribute("infoObject");
IReport report = (IReport)oInfoObject;
List parameters = report.getReportParameters();
Fields fields = new Fields();
//0:number, 1:currency, 2:boolean, 3:date, 4:time, 5:datetime, 6:String
//0:数字、1:货币、2:boolean、3:日期、4:时间、5:时间日期、6:字符串
if(parameters.size() > 0){
int pSize = parameters.size();
for (int i = 0; i < pSize; i++){
IReportParameter param = (IReportParameter)report.getReportParameters().get(i);
String paramName = URLEncoder.encode(param.getParameterName(), "utf-8");
String paramValue = (String)requestParamMap.get(paramName);
ParameterField pf = new ParameterField();
pf.setAllowNullValue(false);
//设置参数名称
pf.setName(param.getParameterName());
//try{
//ParameterField pf = param.getParameterField();
//}catch(Exception e){}
//设置参数值类型
int valueType = param.getValueType();
switch(valueType){
case 0:
pf.setType(FieldValueType.numberField);
break;
case 1:
pf.setType(FieldValueType.currencyField);
break;
case 2:
pf.setType(FieldValueType.booleanField);
break;
case 3:
pf.setType(FieldValueType.dateField);
break;
case 4:
pf.setType(FieldValueType.timeField);
break;
case 5:
pf.setType(FieldValueType.dateTimeField);
break;
case 6:
pf.setType(FieldValueType.stringField);
break;
default:
break;
}
//设置参数值[只有离散值]
if(param.isDiscreteValueSupported()){
addDiscreteFieldValue(pf, param.getValueType(), paramValue);
}
fields.add(pf);private void addDiscreteFieldValue(IParameterField paramField, int valueType, String paramValue) {
ParameterFieldDiscreteValue pfdv = new ParameterFieldDiscreteValue();
Values values = new Values();
switch (valueType) {
case 0:
case 1:
case 2:
case 6:
pfdv.setValue(paramValue);
break;
case 3:
case 4:
case 5:
SimpleDateFormat dateFormatter = new SimpleDateFormat("(yyyy,M,d)");
Date dateValue = dateFormatter.parse(paramValue.substring(paramValue.indexOf('(') ), new ParsePosition(0));
pfdv.setValue(dateValue);
break;
default:
pfdv.setValue(paramValue);
break;
}
values.add(pfdv);
//paramField.getCurrentValues().add(pfdv);
paramField.setCurrentValues(values);
}
解决方案 »
- 想实现一个可按照角色动态变化的横向菜单与左边导航的连接,希望有人指导一下
- 紧急!求一个正则表达式
- download下来的spring 的source code,怎么看
- tomcat5.0.24+IIS5整合的问题
- 遇到一致命错误,请大家帮忙!!!!
- 急问!!!!!!!!!!!!!!!!
- 关于用jar打包class文件的问题,在线等!
- jsp空间 javabean 访问不了 提示 The value for the useBean class attribute is
- Tomcat中的项目怎么让外网访问啊?要疯了!
- 急救小弟关于Jun
- 碰到一个SQL的难题了,请大伙帮帮我
- spring的问题,好郁闷啊,在线等
希望能帮到你.
/**
* 使用常规运行报表的方式,设置参数字段的方法
* @param viewer CrystalReportViewer
* @param paramValues Map
*/
public static void setViewerParameters(CrystalReportViewer viewer,
Map paramValues) throws
BusinessException {
try {
Fields paramFields = viewer.getParameterFields();
for (int j = 0; j < paramFields.size(); j++) {
ParameterField paramField = (ParameterField) paramFields.
getField(j);
Object value = paramValues.get(paramField.getName());
if (value != null && value instanceof List) {
Vector vc = (Vector) value;
Values values = new Values();
for (int i = 0; i < vc.size(); i++) {
String temp = (String) vc.get(i);
ParameterFieldDiscreteValue newDiscreteValue = new
ParameterFieldDiscreteValue();
newDiscreteValue.setValue(temp);
values.add(newDiscreteValue);
}
paramField.setCurrentValues(values); } else if (value != null) {
Values values = new Values();
ParameterFieldDiscreteValue newDiscreteValue = new
ParameterFieldDiscreteValue();
newDiscreteValue.setValue(value);
values.add(newDiscreteValue);
paramField.setCurrentValues(values);
}
}
} catch (Exception ex) {
throw new BusinessException("设置参数字段方法出错!",ex);
}
}
Cappuccino啊。。我也是被逼的啊。。呵呵。。
等待其他兄弟帮忙了。。