背景
- 在宜搭表单设计过程中,会有一些表单规则需求,比如获取当前登录人的信息自动填充,校验提交字段值在数据库中唯一不重复,表单提交后自动更新相关表单的值...。为了满足开发表单丰富又灵活的规则,宜搭提供了种类繁多且功能强大的表单函数来帮助用户快速实现需求。
函数的分类
- 数学函数。处理数字值组件之间的一些计算,求最大最小值,四舍五入等等。
- 文本函数。处理文本值组件的值的截取,替换,格式化等等。
- 日期函数。处理时间戳值组件的日期增减,日期指定,天数计算等等。
- 逻辑函数。根据条件判断返回true和false。
- 业务函数。给表单自动填默认值。
- 关联函数。增删改其他单据页面的数据。
函数的使用
函数的使用有三个入口:
1.表单组件默认值。
2.表单提交校验。
3.表单业务关联规则。
函数的列表
基础函数
- 包括文本函数,数学函数,日期函数,逻辑函数。
组件 | 函数分类 | 函数 | 函数名 | 基本用法 |
---|---|---|---|---|
单行输入框 | 文本 | UUID | 唯一字符串 | UUID() |
RMBFORMAT | 转人民币格式 | RMBFORMAT(数字输入框 ) |
||
CONCATENATE | 字符串合并 | CONCATENATE(单行输入框 ,单行输入框 ) |
||
LEFT | 字符串向右截取 | LEFT(单行输入框 ,end_index) |
||
RIGHT | 字符串向左截取 | RIGHT(单行输入框 ,end_index) |
||
MID | 字符串截取定长 | MID(单行输入框 ,start_index,end_index) |
||
LEN | 字符串长度 | LEN(单行输入框 ) |
||
LOWER | 字符串大写转小写 | LOWER(单行输入框 ) |
||
UPPER | 字符串小写转大写 | UPPER(单行输入框 ) |
||
REPLACE | 字符串替换 | REPLACE(单行输入框 ,start_index,end_index,"new_text") |
||
REPT | 字符串复显 | REPT(单行输入框 ,repeat_time) |
||
SEARCH | 字符串查找 | SEARCH("find_text",单行输入框 ,n) |
||
ARRAYGET | 字符串数组取值 | ARRAYGET(明细 .单行输入框 ,n) |
||
SPLIT | 字符串分割 | SPLIT(单行输入框 ,"separator") |
||
TRIM | 字符串去首尾空格 | TRIM(单行输入框 ) |
||
TEXT | 数字转字符串 | TEXT(数字输入框 ) |
||
VALUE | 字符串转数字 | VALUE(单行输入框 ) |
||
PINYINHEADCHAR | 取汉字首字母 | PINYINHEADCHAR(单行输入框 ) |
||
逻辑 | IF | 条件判断 | IF() | |
AND | 与 | AND(EQ(数字输入框 ),EQ(数字输入框 )) |
||
OR | 或 | OR(EQ(数字输入框 ),EQ(数字输入框 )) |
||
FALSE | 返回false | FALSE() | ||
TRUE | 返回true | TRUE() | ||
NOT | 取反 | NOT() | ||
XOR | 异或 | XOR() | ||
TIMECOMPARE | 时间比较 | TIMECOMPARE(日期选择框 ,日期选择框 ) |
||
NUMBERCOMPARE | 数字比较 | NUMBERCOMPARE(数字输入框 ,数字输入框 ) |
||
ISEMPTY | 字符串或数组判空 | ISEMPTY(单行输入框 ) |
||
EQ | 相等 | EQ(数字输入框 ,数字输入框 ) |
||
NE | 不等 | NE(数字输入框 ,数字输入框 ) |
||
LT | 小于 | LT(数字输入框 ,数字输入框 ) |
||
GT | 大于 | GT(数字输入框 ,数字输入框 ) |
||
LE | 小于等于 | LE(数字输入框 ,数字输入框 ) |
||
GE | 大于等于 | GE(数字输入框 ,数字输入框 ) |
||
EXACT | 字符串是否相等 | EXACT(单行输入框 ,单行输入框 ) |
||
EXIST | 查重 | EXIST(单行输入框 ),EXIST(单行输入框 ,单行输入框 ) |
||
VALIDATEALIMAIL | 邮箱格式校验 | NOT(VALIDATEALIMAIL( 单行输入框 ,"WORK")) |
||
ISNULL | 数组判空 | ISNULL(明细 .单行输入框 ) |
||
HASEMPTYTEXT | 数组有无空字符串 | HASEMPTYTEXT(明细 .单行输入框 ) |
||
日期选择框 | 时间 | DATE | 日期构造 | DATE(year,month,day,hour,minute,second) 单独使用返回:Wed Dec 31 00:00:00 CST 2 |
TIMESTAMP | 转时间戳 | TIMESTAMP(TODAY()) | ||
TIME | 时间占天比 | TIME(hour,minute,seconds) | ||
TODAY | 当前时间 | TIMESTAMP(TODAY()) | ||
NOW | 当前时间 | NOW() 返回:Fri Aug 02 09:40:08 CST 2019 |
||
SYSTIME | 服务器时间 | SYSTIME() 返回:Fri Aug 02 09:40:08 CST 2019 |
||
DAY | 日期日 | DAY(DATE(日期选择框 )) |
||
MONTH | 日期月份 | MONTH(DATE(日期选择框 )) |
||
YEAR | 日期年份 | YEAR(DATE(日期选择框 )) |
||
HOUR | 日期小时 | HOUR(DATE(日期选择框 )) |
||
MINUTE | 日期分钟 | MINUTE(DATE(日期选择框 )) |
||
SECOND | 日期秒数 | SECOND(DATE(日期选择框 )) |
||
DAYS | 日期之间的天数 | DAYS(日期选择框 ,日期选择框 ) |
||
DAYS360 | 日期之间的天数 | DAYS360(日期选择框 ,日期选择框 ) |
||
DATEDELTA | 日期加减 | DATEDELTA(DATE(日期选择框),1) 直接赋值给其他日期选择框生效 DATEDELTA(TODAY(),3) 日期选择框默认今天往后推 |
||
WEEKNUM | 日期周数 | WEEKNUM(日期选择框 ) |
||
ISOWEEKNUM | 日期ISO周数 | ISOWEEKNUM(日期选择框 ) |
||
DAYBEGIN | 日期时分秒置零 | TEXT(DATE(DAYBEGIN(日期选择框 )),"yyyy-MM-dd HH:mm:ss") |
||
DAYEND | 日期时分秒最大 | TEXT(DATE(DAYEND(日期选择框 )),"yyyy-MM-dd HH:mm:ss") |
||
CASCADEDATEINTERVAL | 日期区间组件计算相隔天数 | CASCADEDATEINTERVAL(日期区间选择框 ) |
||
YEAREND | 日期年终日 | TEXT(DATE(YEAREND(日期选择框 )),"yyyy-MM-dd HH:mm:ss") |
||
数字输入框 | 数学 | AVERAGE | 算术平均值 | AVERAGE(数字输入框 ,数字输入框 ) |
COUNT | 表单提交数 | COUNT("FORM-XXXXXXX") | ||
LARGE | 取数组中某个最大值 | LARGE(明细 .数字输入框 ) |
||
SMALL | 取数组中某个最小值 | SMALL(明细 .数字输入框 ) |
||
ARRAYGET | 数组取值 | ARRAYGET() | ||
MAX | 取最大值 | MAX(数字输入框 ,数字输入框 ) |
||
MIN | 取最小值 | MIN(数字输入框 ,数字输入框 ) |
||
ABS | 取绝对值 | ABS(数字输入框 ) |
||
ROUND | 四舍五入指定位数 | ROUND(数字输入框 ,digit) |
||
CEILING | 向上舍入 | CEILING(数字输入框 ,digit) |
||
FLOOR | 向下舍入 | FLOOR(数字输入框 ,digit) |
||
INT | 向下舍入最近整数 | INT(数字输入框 ) |
||
LOG | 对数 | LOG() | ||
MOD | 相除取余 | MOD(数字输入框 ,数字输入框 ) |
||
POWER | 乘幂 | POWER(数字输入框 ,power) |
||
PRODUCT | 乘积 | PRODUCT(数字输入框 ,数字输入框 ) |
||
SQRT | 取正平方根 | SQRT(数字输入框 ) |
||
SUM | 取和 | SUM(明细 .数字输入框 ) |
||
SUMPRODUCT | 数组乘积 | SUMPRODUCT(明细 .数字输入框 ,明细 .数字输入框 ) |
||
FIXED | 舍入指定小数 | FIXED(数字输入框 ,digit) |
||
ADD | 字段相加 | ADD(数字输入框 ,单行输入框 ) |
业务函数
组件 | 分类 | 函数 | 函数名 | 基本用法 |
---|---|---|---|---|
单行输入框 | 基本信息 | LOGINUSER | 登录人姓名 | LOGINUSER() |
LOGINUSERWORKNO | 登录人工号 | LOGINUSERWORKNO() | ||
DIRECTOR | 登录人主管姓名 | DIRECTOR(1) | ||
USERFIELD | 登录人相关信息 | USERFIELD( 人员搜索框 ,"userId") |
||
DEPTNAME | 登录人部门 | DEPTNAME(LOGINUSERWORKNO()) | ||
人员搜索框 | 人员获取 | USER | 登录人 | USER() |
EMPLOYEE | 工号数组取人 | EMPLOYEE(多项选择框 ) |
高级函数
函数 | 函数名 | 基本用法 |
---|---|---|
UPDATE | 更新 | UPDATE(目标表单 ,EQ(目标表单 .单行输入框 ,单行输入框 ),"",目标表单 .单行输入框 ,单行输入框 ) |
UPSERT | 更新或插入 | UPSERT(目标表单 ,EQ(目标表单 .单行输入框 ,单行输入框 ),"",目标表单 .单行输入框 ,单行输入框 ) |
INSERT | 插入 | INSERT(目标表单 ,目标表单 .单行输入框 ,单行输入框 ) |
DELETE | 删除 | DELETE(目标表单 ,EQ(目标表单 .单行输入框 ,单行输入框 ),"") |
函数的组合
- 每一个函数都代表一个小小的功能,当用户的业务场景非常复杂的时候,我们就需要把场景逻辑拆解成很多的小功能来变通组合实现,以下举一些通过函数组合来实现的复杂的功能。
--根据下拉单选框的值对日期选择框赋值
IF(
EQ(TRIM(下拉单选框),"早餐"),
TIMESTAMP(DATE(YEAR(TODAY()),MONTH(TODAY()),DAY(TODAY()),16,50,0)),
IF(
EQ(TRIM(下拉单选框),"午餐"),
TIMESTAMP(DATE(YEAR(DATE(DATEDELTA(TODAY(),1))),MONTH(DATE(DATEDELTA(TODAY(),1))),DAY(DATE(DATEDELTA(TODAY(),1))),9,50,0)),
IF(EQ(TRIM(下拉单选框),"晚餐"),
TIMESTAMP(DATE(YEAR(DATE(DATEDELTA(TODAY(),1))),MONTH(DATE(DATEDELTA(TODAY(),1))),DAY(DATE(DATEDELTA(TODAY(),1))),14,50,0)),
TIMESTAMP(DATE(DATEDELTA(TODAY(),1)))
)
)
)
--校验页面某字段为SUBMIT时,且当前时间段在8:00-17:00之中才能提交
IF(
EQ(单行输入框,"SUBMIT"),
OR( TIMECOMPARE(DATE(YEAR(TODAY()),MONTH(TODAY()),DAY(TODAY()),8,0,0),TODAY()),TIMECOMPARE(TODAY(),DATE(YEAR(TODAY()),MONTH(TODAY()),DAY(TODAY()),17,0,0))
),
FALSE()
)
总结
- 宜搭的函数设计的非常简明清晰,功能小而搭建潜能巨大。
- 复杂的业务场景对函数的熟悉度要求比较高,必要时还是得翻翻文档,看看函数列表。