润乾报表改java路径_润乾报表之添加自定义方法。。。

Q:如何添加自定义方法

我们在开发过程中由于业务多样,内置的方法有限,或者有些不太理解,干脆就不使用了,而是想使用我们熟悉的一些工具类。

下面我们来准备一下内置方法的定义和部署使用

A:第一步-->准备方法

1 packagecom.longtu.leaf.util;2

3 importjava.util.HashMap;4 importjava.util.Map;5

6 importcom.runqian.base4.resources.EngineMessage;7 importcom.runqian.base4.resources.MessageManager;8 importcom.runqian.base4.util.ReportError;9 importcom.runqian.report4.model.expression.Expression;10 importcom.runqian.report4.model.expression.Function;11 importcom.runqian.report4.model.expression.Variant2;12 importcom.runqian.report4.usermodel.Context;13 /**

14 * @植入润乾报表的方法。根据键值获取真实值。如AA=2 获取2的值。15 *@authorxiao 2014年3月31日11:49:1316 *17 */

18 public class RunQian_getKeyValue extendsFunction{19

20 /**

21 *22 *@paramstr 目标str,用来转换为map;如过程返回AA=2 则{AA=2}23 *@paramkey24 *@paramsesign 为各键值之间的分隔符25 *@paramkv_sesign 为各键与值之间的分隔符26 *@return

27 */

28 public staticString getMapValueByKey(String str,String key,String sesign,String kv_sesign)29 {30 Map map =convertArrToMap(str, sesign, kv_sesign);31 returnmap.get(key);32 }33

34 public static MapconvertArrToMap(String str,String sesign,String kv_sesign)35 {36 String _mapKey = "";37 String _mapValue = "";38 String [] convertArr = null;39 Map map = new HashMap();40 if(sesign == null || "".equals(sesign))41 sesign=";"; //默认

42 try{43 convertArr =str.split(sesign);44 if(convertArr.length>0)45 {46 for(int i = 0;i

49 if(_keyValue.length>0){50 _mapKey = _keyValue[0].toString().trim();51 _mapValue = _keyValue[1].toString().trim();52 map.put(_mapKey,_mapValue);53 }else{54 System.err.println("请检查目标字符串中的key-value之间是否是【"+kv_sesign+"】号隔开");55 }56 }57 }58 }catch(Exception e){59 System.err.println("com.longtu.leaf.util.RunQian_getKeyValue中的方法:【convertArrToMap】出错" +e.getMessage());60 }61 returnmap;62 }63

64 @Override65 public Object calculate(Context ctx, booleanisInput) {66 //判断是否传参

67 if(this.paramList.size()<1)68 {69 MessageManager mm =EngineMessage.get();70 throw new ReportError("encrypt:"+mm.getMessage("function.missingParam"));71 }72 //获取参数

73 Expression param1 = (Expression)this.paramList.get(0);//第1参

74 Expression param2 = (Expression)this.paramList.get(1);//第2参

75 Expression param3 = (Expression)this.paramList.get(2);//第3参

76 Expression param4 = (Expression)this.paramList.get(3);//第4参

77

78 Object result1 = Variant2.getValue(param1.calculate(ctx,isInput), false, isInput);79 Object result2 = Variant2.getValue(param2.calculate(ctx,isInput), false, isInput);80 Object result3 = Variant2.getValue(param3.calculate(ctx,isInput), false, isInput);81 Object result4 = Variant2.getValue(param4.calculate(ctx,isInput), false, isInput);82

83

84 //似乎不走方法?

85 String _mapKey = "";86 String _mapValue = "";87 String [] convertArr = null;88 Map map = new HashMap();89 if(result3 == null || "".equals(result3))90 result3=";"; //默认

91 try{92 convertArr =result1.toString().split(result3.toString());93 if(convertArr.length>0)94 {95 for(int i = 0;i

98 if(_keyValue.length>0){99 _mapKey = _keyValue[0].toString().trim();100 _mapValue = _keyValue[1].toString().trim();101 map.put(_mapKey,_mapValue);102 }else{103 System.err.println("请检查目标字符串中的key-value之间是否是【"+result4+"】号隔开");104 }105 }106 }107 }catch(Exception e){108 System.out.println("com.longtu.leaf.util.RunQian_getKeyValue中的方法:【convertArrToMap】出错" +e.getMessage());109 }110 returnmap.get(result2.toString());111 }112 public static voidmain(String[] args) {113 //System.out.println(getMapValueByKey("aa=2;","aa",null,"="));

114 }115

116 }

这里提供了一个key-value方法,即通过字符串str='aa=2;bb=3;cc=4' 中的键值aa、bb、cc获取对应value值。

自定义方法:

1、继承com.runqian.report4.model.expression.Function

2、重写里边的calculate

具体查看以上代码。

A:第二步-->准备配置文件

src/config/跟目录下创建customFunctions.properties,内容:

#1使用方法:getMapValueByKey("aa=2;","aa",null,"=");//return 2;

fun_getMapValueByKey=0,com.longtu.leaf.util.RunQian_getKeyValue

配置方式:

1、复制自定义方法类到 reportHome\designer\web\WEB-INF\classes 下,方法含包则相应创建。

2、复制customFunctions.properties信息到reportHome\designer\web\WEB-INF\classes\config\

配置完成后重启生效。

问题:

由于配置完成后打开工具,找不到对应的内置方法,没关系,能调用即可。

A:第三步-->方法调用

在某个单元格表达式中:fun_getMapValueByKey(o_sumstr,"pro_requestamt",",","=")

其中fun_getMapValueByKey对应的是前面配置的属性文件中的键值。

A:第四步-->总结

接下来我们可以自定义更多自己想要定义的类,维护方便,调用方便,自己能写内置方法,再也不用含着泪看内置方法的文档了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值