背景
- 问卷调查,项目审批,页面的一些基本信息(姓名,花名,工号,部门,邮箱…)期望在访问后就自动填入,或者用户在页面上的选择了人员搜索框中的人员后能自动联动带出一些相关信息。
- 日期组件经常有一些值默认,日期组件和日期组件的加减,和当前日期的加减…。
- 表单提交前,需要做一些值的校验,比如查重,库存不为零,时间段判断…。
操作
- 步骤一:在表单设计器中选中组件,设置中找到 默认值➔公式函数➔编辑公式。
- 步骤二:填入公式。
默认值
组件类型 |
属性 |
函数 |
对内 |
对外 |
人员搜索框 |
提交人 |
USER() |
✓ |
✓ |
|
提交人主管 |
USER(1) |
✓ |
✓ |
单行输入框 |
提交人工号 |
LOGINUSERWORKNO() |
✓ |
✓ |
|
|
USERFIELD(LOGINUSERWORKNO(),”businessWorkNo”) |
✓ |
✓ |
|
提交人姓名 |
LOGINUSER() |
✓ |
✓ |
|
提交人花名 |
USERFIELD(LOGINUSERWORKNO(),”nickName”) |
✓ |
✗ |
|
提交人部门 |
DEPTNAME(LOGINUSERWORKNO()) |
✓ |
✓ |
|
提交人邮箱 |
USERFIELD(LOGINUSERWORKNO(),”buMail”) |
✓ |
✓ |
|
提交人主管姓名 |
DIRECTOR(1) |
✓ |
✓ |
|
提交人BU名称 |
USERFIELD(LOGINUSERWORKNO(),”buName”) |
✓ |
✗ |
|
提交人钉钉ID |
DINGTALKID(LOGINUSERWORKNO()) |
✓ |
✗ |
|
默认编码 |
CONCATENATE(“CODE-“,TEXT(TODAY(),”yyyyMMddSSS”)) |
✓ |
✓ |
日期选择框 |
默认当前日期 |
TIMESTAMP(TODAY()) |
✓ |
✓ |
人员搜索框联动
联动内容 |
属性 |
函数 |
对内 |
对外 |
人员搜索框联动 单行输入框显示其他信息 |
userId |
USERFIELD( 人员搜索框 ,”userId”) |
✓ |
✓ |
|
工号 |
USERFIELD( 人员搜索框 ,”businessWorkNo”) |
✓ |
✓ |
|
姓名 |
USERFIELD( 人员搜索框 ,”name”) |
✓ |
✓ |
|
花名 |
USERFIELD( 人员搜索框 ,”nickName”) |
✓ |
✗ |
|
邮箱 |
USERFIELD(人员搜索框 ,”buMail”) |
✓ |
✓ |
|
职位 |
USERFIELD( 人员搜索框 ,”postName”) |
✓ |
✗ |
|
层级 |
USERFIELD( 人员搜索框 ,”level”) |
✓ |
✗ |
|
部门信息 |
DEPTNAME( 人员搜索框 ) |
✓ |
✓ |
|
事业部 |
USERFIELD( 人员搜索框 ,”buName”) |
✓ |
✗ |
|
主管工号 |
USERFIELD( 人员搜索框 ,”superWorkNo”) |
✓ |
✗ |
人员搜索框联动人员搜索框 |
主管 |
EMPLOYEE(CONCATENATE(“[\“”,USERFIELD(人员搜索框,”superWorkNo”),”\“]”)) |
✓ |
✗ |
日期和时间
--计算日期组件和当前日期相隔天数
DAYS360(TODAY(),DATE( 日期选择框 ))
DAYS(SYSTIME(),DATE( 日期选择框 ))
DAYS(DATE(TIMESTAMP(SYSTIME())),DATE( 日期选择框 ))
--计算两个日期组件之间的相隔天数
DAYS(DATE( 日期选择框-结束 ),DATE( 日期选择框-开始 ))
DAYS(DATE(DATEDELTA(DATE( 日期选择框-结束 ),1)),DATE( 日期选择框-开始 ))
DAYS360(DATE( 日期选择框-开始 ),DATE( 日期选择框-结束 )
--日期选择框默认日期和时间,并做加减,以下设置明天早上9:50
TIMESTAMP(
DATE(
YEAR(DATE(DATEDELTA(TODAY(),1))),
MONTH(DATE(DATEDELTA(TODAY(),1))),
DAY(DATE(DATEDELTA(TODAY(),1))),
9,50,0
)
)
--日期选择框默认为明天
TIMESTAMP(DATE(DATEDELTA(TODAY(),1)))
格式化
--日期组件格式化
TEXT(DATE(日期组件),"yyyy-MM-dd HH:mm:ss")
--数字输入框格式化
TEXT(数字组件, "#.##")
校验
- 校验函数写在表单校验中,在设计器中选中整个表单➔表单校验➔公式校验。
--------------------------------------字符串------------------------------------------
--校验字符串以什么开头
EQ(SEARCH("ding",企业ID), 0)
--校验邮箱是否是部门账号
NOT(VALIDATEALIMAIL( 单行输入框 ,"WORK"))
--联合字段查重
EXIST(单行输入框 , 下拉选择框 , 数字输入框)
-------------------------------------库存和上限-----------------------------------------
--库存小于零校验公式
----单条件
LE(
FETCHDISTINCTDATA("查询目标表单formUuid","查询目标值组件唯一标识",QUERYEQ("查询目标条件组件唯一标识",提交表单组件)),
0
)
----多条件
LE(
FETCHDISTINCTDATA("查询目标表单formUuid","查询目标值组件唯一标识",QUERYAND(QUERYEQ("查询目标条件1组件唯一标识",提交表单组件1),QUERYEQ("查询条件2组件唯一标识",提交表单组件2))),
0
)
--问卷调查控制问卷的数量,formUuid表单唯一标识符,可以在应用数据中查看
GE(COUNT("formUuid"),4)
-------------------------------------日期时间------------------------------------------
--校验某个时间段内提交,比如8:00-9:00才能提交
OR(
LT(TIMESTAMP(SYSTIME()),TIMESTAMP(DATE(YEAR(SYSTIME()),MONTH(SYSTIME()),DAY(SYSTIME()),8,0,0))),
GT(TIMESTAMP(SYSTIME()),TIMESTAMP(DATE(YEAR(SYSTIME()),MONTH(SYSTIME()),DAY(SYSTIME()),9,0,0)))
)
--校验周六周日才能提交
OR(
GT(SEARCH("Sat",TEXT(SYSTIME())),0),
GT(SEARCH("Sun",TEXT(SYSTIME())),0)
)