9.5.1调用自定义函数的基本方法

使用invoke函数,可以调用指定的自定义JAVA类中的静态方法。如下面的JAVAtest.Calc01

package test;

public class Calc01 {

  public static Double distance1(Number loc) {

    double len = Math.abs(loc.doubleValue());

  len = Math.round(len*1000)/1000d;

    return Double.valueOf(len);

  }

}

在这个简单的类中,静态方法distance1计算给定的一个坐标,计算与原点之间的距离,计算结果保留3位小数。在集算器中能够调用的方法,除了必须是静态static外,还必须公开public。使用时,需要把自定义函数类放置在集算器的类路径,即[安装目录]\esProc\classes路径下,如果在web端使用,相应的,应该放置在WEB-INF/classes路径下。这样,就可以在网格中,用invole函数调用自定义函数了:

 

A

1

-12.34567

2

=invoke(test.Calc01.distance1,A1)

3

=invoke(test.Calc01.distance1, -512)

如例子中所示,使用invoke函数时,先指明所调用的类的全路径以及静态方法名称,然后把需要用到的参数依次列出。使用的参数既可以是网格中的格值、网格参数等,也可以直接输入。计算后,A2A3中结果分别如下:

 

一个类中,可以有多个自定义函数,如再增加一个方法:

  public static Double distance2(Number loc1, Number loc2) {

    double len = Math.abs(loc1.doubleValue()-loc2.doubleValue());

    len = Math.round(len*1000)/1000d;

    return Double.valueOf(len);

  }

新增的distance2用来计算数轴上两个坐标之间的距离。集算器只根据方法的名称来调用,因此不同的自定义函数需要使用不同的方法名称。只要自定义函数类放置在了应用的类路径中,无论多个自定义函数来自于多个类还是同一个类,都可以在同一个网格中调用:

 

A

1

=invoke(test.Calc01.distance1,-12.3456)

2

=invoke(test.Calc01.distance2,12,-12)

调用时,使用参数的数目和类型需与对应的方法匹配。A1A2中的计算结果分别如下: