资源描述:
《NCV5-公式技术红皮书.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、公式技术红皮书NC-UAP5.0用友NC-UAP2021-10-071第页目录第一章新版公式使用手册11.公式主要功能12.公式的基本使用方法22.1创建公式执行器22.2设置公式执行器环境32.3设置公式的值32.4对公式进行语法检查32.5提取公式变量42.6给公式变量赋值42.7取得公式的值53.数值型计算结果小数位的控制54.自定义变量的使用65.如何从公式中提取变量86.空值””,NULL值及Zero值的处理97.如何进行列操作118.利用自定义函数扩展公式功能119.外接函数的使用1210.运算符重载1311.公式简单调试
2、14附录1公式解析器内置变量列表15附录2公式解析器内置公式列表151.数学运算函数152.条件判断函数183.数据库查询函数204.字符串相关函数215.日期函数236.类型转换函数237.货币金额函数248.多语言翻译函数259.其他函数26第26页第一章新版公式使用手册1.公式主要功能1.支持一般的算术运算+,-,*,/,ˆ,%例如:sin(1.35)*a/b+cos(3.4)/c其中a,b,c均为变量2.支持对数值型计算结果小数位的控制3.支持逻辑运算符&&(兼容老版&),
3、
4、(兼容老版
5、),!例如:iif((a&b)
6、
7、(c
8、&&d),"right","wrong")其中a,b,c,d均为变量4.支持比较运算符>,>=,<,<=,==,!=等,支持null值的处理。例如:iif((a>b&&a!=null)
9、
10、(c<=d),"right","wrong")其中a,b,c,d均为变量5.支持自定义变量,变量可按Object和String两种方式传入例如:col1->var1+var2其中var1,var2均为自定义变量,可以为String型,也可以为任意类型6.公式除了支持String,Number型数据运算,还支持自定义类型例如:combine(vo1,v
11、o2)其中vo1,vo2可为自定义的数据类型,具体用法参考后面的说明7.支持操作符(+,-,*,/,>,>=,<,<=,==)重载(通过实现相应的接口)例如:iif((car1>car2)
12、
13、(factory1<=factory2),"right","wrong")其中car1,car2,factory1,factory2的运算符通过实现相应的接口进行重载。8.可以在数值型一维数组之间进行加减乘除运算(数组长度必须相等),即支持列操作.例如var1=[1,2,3,4];var2=[2,3,4,5];可对var1,var2进行各种运算。
14、9.系统函数支持,NC常用函数支持例如:sin,cos,ceil,floor,toChinese,getChineseCurrency(),iif()等等,详细支持的函数请参见附录。10.支持外接用户函数.(可以是一个java的方法)例如:公式combine("nihao","hao")中,combine是一个自定义函数,可以指定绑定到一个JAVA类的具体方法,可参考后面的例子。11.支持自定义函数.具体应用可参考后面的详细说明(第1.8节)有时候公式解析器内部的函数并不能完全满足用户的要求,此时用户可添加自定义函数。例如:hello
15、("saysomething",person),hello为一个自定义函数,第26页动态注册到公式解析器中。12.支持客户端公式和服务端公式.以满足前台及后台调用,主要体现在数据库查询的方式上有一定的差别。13.支持多行公式批量运算,且保持变量的传递性.例如:a->col1+col2;b->a+col1*col3;c->a+b;14.支持一个线程内多个公式执行器实例交替运行的情况,但不支持多个线程内同一公式执行器实例交替运行。所以如果程序中起多线程的话,建议每个线程单独创建自己的公式解析器示例。例如下面的代码是可行的:FormulaP
16、arseFatherf=newFormulaParse();f.setExpress(formula);f.setNullAsZero(true);FormulaParseFatherf1=newFormulaParse();f1.setNullAsZero(false);f.setDataSArray(map);String[]res=f.getValueS();1.公式的基本使用方法使用公式解析器的基本步骤如下:1.1创建公式执行器如果在客户端使用公式解析:FormulaParseFatherf=newnc.ui.pub.form
17、ulaparse.FormulaParse();如果在服务端使用公式解析:FormulaParseFatherf=newnc.bs.pub.formulaparse.FormulaParse();如果不知道当前的代码会在