润乾报表 V2018 自定义函数中当有多个参数时如何获取

 

当润乾报表 V2018 自带的函数不能满足实际需求,或所需函数本身就不存在时,可以采用自定义函数来进行扩展,这个基本都比较清楚。

自定义函数开发的步骤也可以参考设计器自带开发教程的自定义函数章节或论坛搜索“自定义函数”。

本文将主要借助代码说明当往自定义函数内传递多个参数时,我们应该如何来获取。

注:教程中仅有获取一个参数的方法,和多个时还有所区别,但又没有相关说明,这里也可以作为一个补充。

 

下面我们直接贴出多参数时的获取代码(有注释说明):

importcom.raqsoft.common.MessageManager;

importcom.raqsoft.common.ReportError;

importcom.raqsoft.report.model.expression.Expression;

importcom.raqsoft.report.model.expression.Function;

importcom.raqsoft.report.model.expression.Variant2;

importcom.raqsoft.report.resources.EngineMessage;

importcom.raqsoft.report.usermodel.Context;

 

public class SignFunc extends Function {

 

   

    public Object calculate(Context ctx) {

        if (this.param == null || this.param.getSubSize() ==0) { // 判断参数是否为空

            MessageManager mm = EngineMessage.get();

            throw new ReportError(“encrypt:” + mm.getMessage(“function.invalidParam”));

        }

        // 获取第一个参数的表达式,从 1 开始

        Expression param1=(Expression)this.param.getSub(1).getLeafExpression();     

        // 算出第一个参数值

        Object result1 = Variant2.getValue(param1.calculate(ctx),false);

       

        /*

         * 当存在多个时,参考以下代码。 this.param.getSubSize() 可以获取到参数的总个数,可以将下面的示例改为遍历取值

         **/

        // 获取第二个参数的表达式

        Expression param2=(Expression)this.param.getSub(2).getLeafExpression();     

        // 算出第二个参数值

        Object result2 = Variant2.getValue(param2.calculate(ctx),false);

       

        /*

         *….., 当多余 2 个时,按照上面代码以此类推,可定义为遍历方式

         **/

       

        return result1.toString();

    }

 

}