关于集算器自定义函数的一点建议
当前集算器可以通过自定义函数的功能调用 java 方法. 例如:
个人认为这种方式使用起来比较不友好. 本人建议:
在集算器中增加函数注册机制, 可以通过在配置文件中配置的方式来注册一个函数, 例如:
<function namespaces="ext" type="java" class="com.mycom.Utils">
<method name="hello" alias="sayHello" returnType="list">
<arg name="name" type="string"/>
</method>
<method name="isEmpty" returnType="boolean">
<desc>判断一个字符串是null还是""</desc>
<arg name="value" type="string"/>
</method>
</function>
<!-- 直接执行文件并返回结果 -->
<function namespaces="ext" name="sayHello" type="groovy" file="myext/groovy/Utils.groovy" returnType="string">
<arg name="name" type="string"/>
</function>
<!-- 调用脚本中的函数 -->
<function namespaces="ext" type="groovy" file="myext/groovy/Utils.groovy" >
<method name="hello" alias="sayHello" returnType="list">
<arg name="name" type="string"/>
</method>
</function>
<!-- 直接写简单的groovy代码 -->
<function namespaces="ext" type="groovy">
<method name="sayHello" returnType="string">
<arg name="name" type="string"/>
<script name="syHello">
<![CDATA\[
// groovy 代码
]]>
</script>
</method>
</function>
<!-- 调用一个http服务 -->
<function namespaces="ext" name="sayHell" type="htpp" url="http://127.0.0.1/sayHell" method="POST">
<arg name="name" type="string"/>
</function>
可以在集算器中调用自定义函数:
ext.sayHello(A1)
ext.isEmpty(A2)
如果能加入上述功能或者类似的功能, 有如下好处:
-
函数调用和集算器原生函数调用差不多, 只是增加了命名空间.(命名空间为了避免函数名冲突)
-
大大增加了扩展性, 有的程序不太适合集算器脚本来写, 可以通过这种方式来调用外部函数.
-
外部函数可以不是 java 代码, 可以是其他类型比如 groovy javascript 等, 如果使用 http 方式, 那就更灵活了.
以上是我最近使用集算器脚本后的个人建议, 希望起到抛砖引玉的作用.
自定义函数文件配置相关内容可参考用户参考文档