利用自定义数据集运算函数实现字符串的特殊转化

 

润乾报表提供了大量的内置函数,但是再多的函数也无法完全满足五花八门的业务需求,于是润乾报表提供了丰富的二次开发接口,以便让报表用户自己来自定义函数。通过自定义函数来轻松方便的解决web报表业务问题,下面就简单介绍一下一个利用自定义数据集运算函数实现特定功能的例子。

例子:现在有三字码和中文名的对应关系,想实现三字码和中文名对应显示,如下图

2.png

下面介绍一下具体的实现步骤

第1步,设计报表如下图

3.png

其中,ds1.syb(A2)这个就是自定义数据集函数,参数为A2的值。

第2步,预览报表,有如下效果

4.png

数据集运算函数实现思路

首先,A2扩展后就是一个字符串,把字符串传入数据集函数,代码中用split方法分解并放入String数组中。

其次,将数据集中的字符串和值对应放入HashMap中。

最后,遍历数组,如果数组中数据和HashMap中的key相等,则取出value值利用StringBuffer拼好返回值。

本示例的自定义数据集运算函数代码如下

package com.runqian;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import com.runqian.base4.resources.EngineMessage;
import com.runqian.base4.resources.MessageManager;
import com.runqian.base4.util.ReportError;
import com.runqian.report4.dataset.DataSet;
import com.runqian.report4.dataset.DsValue;
import com.runqian.report4.dataset.Group;
import com.runqian.report4.model.expression.DSFunction;
import com.runqian.report4.model.expression.Expression;
import com.runqian.report4.model.expression.Variant2;
import com.runqian.report4.usermodel.Context;

public class CharZhuan extends DSFunction {
@Override
public Object calculate(Context ctx, boolean isInput) {
// TODO Auto-generated method stub
if (this.paramList.size() < 1) {
MessageManager mm = EngineMessage.get();
throw new ReportError(”paramater:”
+ mm.getMessage(”function.missingParam”));
}
// 取得第一个参数,默认为表达式,需要把该表达式算出来,结果才是函数的参数值
Expression param1 = (Expression) this.paramList.get(0);
if (param1 == null) { // 判断参数是否为空
MessageManager mm = EngineMessage.get();
throw new ReportError(”paramater:”
+ mm.getMessage(”function.invalidParam”));
}
// 算出第一个参数值
Object result1 = Variant2.getValue(param1.calculate(ctx, isInput),
false, isInput);
System.out.println(result1.toString());
// 判断第一个参数值是否为空
if (result1 == null) {
return null;
}
// 判断第一个参数值的数据类型
if (!(result1 instanceof String)) {
MessageManager mm = EngineMessage.get();
throw new ReportError(”parameter:”
+ mm.getMessage(”function.paramTypeError”));
}
Group group = null;
DsValue cur = this.ds.getCurrent();
group = (Group) cur;
DataSet ds = group.getDataSet();
int countRow = ds.getRowCount();
// 将码表的对应值放到hashmap中
Map<String, String> map = new HashMap<String, String>();
for (int i = 1; i <= countRow; i++) {
int j = 1;
//获得某位置的数据
map.put(ds.getData(i, j).toString(), ds.getData(i, j + 1)
.toString());
}
StringBuffer sb = new StringBuffer();
// 对第一个参数进行split分解.
String[] str = ((String) result1).split(”-”);
System.out.println(str[0] + str[1]);
Set<String> keySet = map.keySet();
//以下for循环为每个字符串找相应的汉字,并用-连接起来
for (int i = 0; i < str.length; i++) {
//遍历HashMap找key与目标字符串相等的值
for (String key : keySet) {
if (key.equals(str[i])) {
//如果相当,则获得与key对应的value,append到StringBuffer中
sb.append(map.get(key));
sb.append(”-”);
}
}
}
return sb.delete(sb.length() - 1, sb.length()).toString();
}
}

这样,就使用数据集运算函数实现了三字码和中文名一一对应。

润乾报表提供的自定义函数的功能是非常强大的更强大,能够满足更多的业务需求。
引自:润乾报表知识库
原文链接:利用自定义数据集运算函数实现字符串的特殊转化
相关文章:润乾报表中如何实现多值查询; split函数及其特殊用法横向分页报表的标题切分

其他相关内容: 润乾 ; 商业智能BI联盟 报表软件Java报表商业智能解决方案web报表的扩展功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值