1. U9的自定义函数种类 分为 表达式函数 与 SQL函数 两种。
2. 分别的用途:
表达式函数用于表达式计算,对于权限中的增删改权限判断就是表达式计算,还有通知、预警等相应的数据判断也是表达式计算。
SQL函数 用于 查询时进行代入计算,如权限中的 查询权限可以用的是SQL函数。
简单的判断方式: 自己想一想,这个函数所处的运行上下文是在做什么,如果是正在从数据库查询数据时运算,那就是SQL函数,如果是对实体等已经加载对象进行计算判断,那就是表达式函数。
用错会怎么样:
目前,如果把SQL函数用到了表达式计算中,会导致计算错误,但没有异常。原因:SQL函数的计算结果就是SQL函数本身串。
而如果 表达式函数用于SQL函数中,会导致出现异常。 异常是OQL解析的过程中发生。具体错误:
无法将类型为“UFSoft.UBF.Util.Expression.Scripting.ImperativeInterpreter”的对象强制转换为类型“UFSoft.UBF.Util.Expression.Query.IOQLVisitor”。
3. 注册:
两种函数都是注册到 ubfScript.xml(U9内部使用) 或 Script.xml(客开第三方使用) 在Portal ApplicationServer 等的bin目录下。 下面分别为表达式函数与SQL函数 注册示例:
<assembly name="UFIDA.U9.CBO.FI_TBBP.dll" >
<type name="UFIDA.U9.CBO.FI.TB.Expression.TBFunctions" >
<function name="TBFigureValFunction" method="GetFigureValFunction" />
</type>
</assembly>
<sql name="fn_AP_GetAPBillCanEnjoyDiscount" owner="dbo"/>
4. 出补丁:
ubfScript.xml 文件补丁只可有 UBF出,位置: Upgrade\Support\UBF\Files 目录下。
同时,如果需要在表达式编辑界面能够显示出相应的函数,还需要在数据库表中注册。 相关表: Base_ExpFunction 脚本自己放在自己应用下的 PostSql 中。
5、其它
IIF 是三元判断表达式函数 ,对应的OQL上使用 sqlIIF 函数 .
其它函数类似,现在要求SQL函数和表达式函数是要分别注册的。
注意 SQL的函数表达式,select from 等关键字需要用小写。