| Format |
表单引擎 |
表单公式 |
Beanshell |
工作流引擎 |
Freemarker |
ExportAPI |
场景举例 |
| ${变量名} |
Yes |
? |
No |
Yes |
Yes |
Yes |
数据源/导出Word |
| ${变量名/前/后缀/默认值} |
Yes |
No |
No |
No |
No |
No |
实例名/Tag |
| ${变量名.属性} |
No |
No |
No |
No |
Yes |
No |
Freemarker通知 |
| $变量名 |
No |
Yes |
No |
No |
No |
No |
公式样式 |
| $变量名.属性 |
No |
Yes |
No |
No |
No |
No |
公式样式 |
| ${"变量名"} |
No |
No |
Yes |
No |
No |
No |
工作流脚本 |
| Var |
Explain |
| _VAR_ACTION_ACCOUNT |
当前办理用户的账号 |
| _VAR_ACTION_ACCOUNT_FRIENDLY |
当前办理用户友好的帐号(对于openid主体),202207新增 |
| _VAR_ACTION_REALNAME |
当前办理用户名字 |
| _VAR_ACTION_ORGANIZE |
当前办理用户的部门,如有多个不保障顺序 |
| _VAR_ACTION_ORGANIZES |
当前办理用户的部门列表,可作Datasource |
| _VAR_ACTION_INDEP_ORGANIZE |
当前办理用户的独立部门,多个不保障顺序 |
| _VAR_ACTION_INDEP_ORGANIZES |
当前办理用户独立部门列表,可作Datasource |
| _VAR_ACTION_USERCODES |
当前办理用户的学工号列表 |
| _VAR_EXECUTE_ORGANIZE |
当前办理用户在该步骤有权限的岗位对应的部门 |
| _VAR_EXECUTE_ORGANIZES |
当前办理用户在该步骤有权限的岗位对应的部门列表,可作Datasource |
| _VAR_EXECUTE_INDEP_ORGANIZES |
同上,但是是其独立部门列表 |
| _VAR_EXECUTE_POSITIONS |
当前用户在该步骤有权限的身份,符合UserFilter格式 |
| _VAR_EXECUTE_USERCODES |
当前用户在该步骤有权限的身份编号列表,202207新增 |
| _VAR_POSITIONS |
当前用户的身份,符合UserFilter格式 |
| _VAR_OWNER_ACCOUNT |
实例所有者的账号 |
| _VAR_ACTION_ACCOUNT_FRIENDLY |
实例所有者友好的帐号(对于openid主体),202207新增 |
| _VAR_OWNER_REALNAME |
实例所有者的姓名 |
| _VAR_OWNER_ORGANIZES |
实例所有者部门列表 |
| _VAR_OWNER_USERCODES |
实例所有者学工号列表 |
| _VAR_PARTICIPANTS |
实例的参与人列表 |
| _VAR_ENTRY_NUMBER |
当前流程实例的流水号 |
| _VAR_STEP_CODE |
当前步骤代码 |
| _VAR_ADDR |
当前用户IP地址 |
| _VAR_NOW |
当前日期 |
| _VAR_NOW_TIME |
当前时间(适用于time控件)版本>=20250801 |
| _VAR_NOW_YEAR |
当前时间:年 |
| _VAR_NOW_MONTH |
当前时间:月 |
| _VAR_NOW_DAY |
当前时间:日 |
| _VAR_RELEASE |
当前实例的是否时正式,ture或者false |
| _VAR_URL |
当前表单的链接 |
- Type说明:
- 键值对:表示该属性存在 _Code/_Name 对应的属性,可对Code等键值对类型的字段赋值
- 数据源:表示该属性存在 _Codes/_Names 对应属性,且内容是数组(回车分割的字符串),可用于数据源。
| Var |
Type |
Explain |
| email |
string |
邮箱 |
| phone |
string |
手机号 |
| userCode |
string |
学工号(所有三元组中索引最高的) |
| userCodes |
数据源 |
学工号列表(所有三元组) |
| userCodesFiltered |
数据源 |
学工号列表(UserFilter过滤后的三元组) |
| organizeCode |
string |
所在部门代码(所有三元组中索引最高的) |
| organizeName |
string |
所在部门名称(与organizeCode对应) |
| organize |
数据源 |
所在部门列表(所有三元组) |
| organizeFiltered |
数据源 |
所在部门列表(UserFilter过滤后的三元组) |
| indepOrganize |
键值对/数据源 |
所在独立部门/列表(所有三元组中索引最高的) |
| indepOrganizeFiltered |
数据源 |
所在独立部门/列表(UserFilter过滤后的三元组) |
| positions |
string |
用户完整三元组,UserFilters格式 |
| formalPositions |
string |
用户身份三元组,UserFilters格式 |
// 读取表单日期控件转换格式,实例名称使用
// 实例名称配置:${fieldFZ}${fieldXingMing}到${fieldChuFangGuoJia}因公出国(境)
long t=${"fieldChuGuoKaiShiRiQi"};
if( t > 0 ) {
String rq=new java.text.SimpleDateFormat("yyyy年MM月dd日").format(new java.util.Date(t * 1000));
$.put("fieldFZ",rq);
}
// 报错1
error.report("WTF");
// 报错2
String rest=${"fieldName"}; // 获取表单值
String info="信息不能为空";
if(rest.equals("")){
error.report(info);
}
// for循环重复节
List results = ${"fieldSZYXYJ"};
for(String result : results) {
if (result.equals("1")) {
return "approve";
}
}
return "reject";
// 协议判断 是否已审核
return "1".equals($${"fieldMyDepartmentApprove"}) ? "yes" : "no";
// 判断是否全部通过
int passedCount = 0;
Collection results = ${"fieldMyDepartmentApprove"};
for (Object r : results) {
if ("1".equals(r)) passedCount++;
}
int size = results.size();
if (passedCount == size) return "all";
return "some";
- 以下变量仅支持freemarker语法,变量替换方式仅支持FormData和内部变量
| Var |
Type |
Explain |
| URI_TASK_CENTER |
URL |
办事大厅URL,来自租户配置 |
| user |
User |
用户,来自用户表 |
| user.trueName |
String |
用户:姓名 |
| user.tenantUserId |
String |
用户:账号 |
| user.openid |
String |
用户:openid,可为空 |
| user.userName |
String |
用户:用户名,可为空 |
| user.email |
String |
用户:邮箱,可为空 |
| user.phone |
String |
用户:手机,可为空 |
| tasks |
List
|
待办任务数组 |
| tasks[].url |
URL |
待办任务办理地址 |
| tasks[].name |
URL |
待办步骤名 |
| tasks[].app |
App |
待办任务所属应用 |
| tasks[].process |
Process |
待办任务所输流水 |
| tasks[].instanceName |
String |
同 process.name,待废弃 |
| 各表单字段和内部变量 |
同字段名 |
仅步骤模版提醒支持,合并提醒不支持 |