一、值表达式的高级写法
1.函数表达式
应对复杂的业务场景,属性值窗口支持高级的函数化表达式写法 。在前缀增加 function ,示例:
_function FROM_UNIXTIME({{LAST_SYNC_TIME}}-600 ,'%Y-%m-%d %H:%i:%s' )
# 税率字段*100,例如旺店通系统税率值为 0.13 ,而金蝶的税率值为 13。此时需要进行这样的计算函数
_function {{details_list.tax}} * 100
# 你也可以书写一段 case when then 的逻辑判断表达式,该语法等同于 MySql 语句中的语法规则,最后只需要 end 结尾,并不需要 as field
_function case '{{FOrgId}}' when '100' then {{price}}*{{qty}} when '200' then '201' else '{{FOrgId}}' end
# 也可以使用各种基本函数进行计算 sum avg max min
_function sum({{details_list.qty}})
⚠️ ⚠️ ⚠️
注意必须是_function 前缀
前缀文本开头不要有空格
前缀文本结尾尽量使用空格以保障可阅读性,虽然这并不会对程序造成什么影响
如果这段函数出现计算上的错误(如除 0),那么文本会原样返回
2.更加复杂的 case when then 示例
SELECT # 表达式函数中并不需要写 SELECT
CASE LEFT('AD0001',2) # 截取左边两位
WHEN 'AD' THEN 100
WHEN 'BB' THEN 101
WHEN 'GG' THEN 102
WHEN 'EE' THEN 103
ELSE 103
END
AS FIELD # 表达式函数中不需要写最后的 AS FIELD
## 检索某个字段,当匹配时输出某字段
_function CASE LOCATE('检索文本','{{检索的字段}}') WHEN 0 THEN '{{不匹配时字段A}}' ELSE '{{匹配时的字段}}' END
二、自定义函数与联查嵌套
_function _findCollection 两个语句可以组合起来使用。
例如需求: 当查询到物料没启用保质期管理,则生产日期为空。
_function
case
_findCollection find FIsKFPeriod
from 66da8241-98f4-39f9-8fee-cac02e30e532
where FNumber={{details.details_item_code}}
_endFind
when true then '{{details.details_detail_batch_validTime}}'
else '' end
在case语句后面嵌套使用到了 _findCollection 语句,此时需要额外的 _endFind 对联查语句声明结束。
!!注意!!
以上示例代码为了方便演示,使用了换行符、TAB缩进。正常使用时不能出现这些符号。
_function case _findCollection find FIsKFPeriod from 66da8241-98f4-39f9-8fee-cac02e30e532 where FNumber={{details.details_item_code}} _endFind when true then '{{details.details_detail_batch_validTime}}' else '' end