使用invoke函数,可以调用指定的自定义JAVA类中的静态方法。如下面的JAVA类test.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函数时,先指明所调用的类的全路径以及静态方法名称,然后把需要用到的参数依次列出。使用的参数既可以是网格中的格值、网格参数等,也可以直接输入。计算后,A2与A3中结果分别如下:
一个类中,可以有多个自定义函数,如再增加一个方法:
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) |
调用时,使用参数的数目和类型需与对应的方法匹配。A1与A2中的计算结果分别如下: