IReport order by作为参数传递

随手记

 

问题背景:

ireport 打印人员信息,需要按照客户选择的排序方式来打印

客户可选 排序方式有5种

打印的人员:

 

尝试方案:

这种情况排序板块需要用子模版的方式实现

 

尝试零:

有五种排序方式,新建五个按照不同方式排序的子模版,然后主模板根据标注位,决定用哪个子模版。

尝试零结果:成功,但是直接否决

原因:4个类似的主模板要20个子模版,子模版众多,不能复用

 

尝试一:

主模板通过传递排序的字段到子模板,然后排序

 

传递参数orderBy,处理后获取排序的列传递给子模版:

子模版直接order by 参数

 

尝试一结果:失败 

原因:传递的参数类型为字符串,不是列,即(order by 'xxxxx' 而非 order by 列)

----------- $P{orderBy} 换成  $P!{orderBy} 就行了

 

 

尝试二:主模板传递标志,子模版处理标志转化为需要排序的列

主模板传递标志:

子模版处理标志转化为需要排序的列:

这个方式基本已经可以了,但是还有一个小问题:

因为某些字段是varchar型,而存储的内容是数字,需要用到to_number来格式化字段(否则11会排到5前面

但是case when end 中,所有的值似乎只能是一种类型,否则会报类型错误。

 

解决方法:用 lpad 函数代替 to_number

 

尝试二结果:成功

 

总结:

对sql和ireport的理解不到位,结合使用时出现的问题。此外,ireport虽然限制众多,但是在它的规则内还是可以翻出一些浪花的

posted @ 2020-07-28 11:45  q彩虹海q  阅读(114)  评论(0)    收藏  举报