流程发起界面,常常需要表单中默认带出相关信息,比如员工自助转正流程,要带出转正人的基本信息、单位部门组织信息等,就需要用到form_relations。它主要是用来处理表单字段值联动以及字段默认值。
可在流程设置-字段设置-表单高级设置中进行配置。
详细学习请参看Info元数据配置form_relations部分:Info元数据 此篇wiki只做流程常用到内容讲解
form_relations配置在info层,主要用到:
value_onchange属性:根据一个字段值变化自动赋值另外一些字段
default属性:初始化表单时能自动赋值
expression属性:执行一些预制好公式给对应变化的key字段赋值
{ "form_relations" : [{
"key" : "emp_id" , / / 目标key
"default" : { / / 设置默认值相关
"default_value" : "123" , / / 默认值 字符串
"expression" : "EMP().get('id')" / / 默认值表达式
},
"value_onchange" : [{ / / 字段值联动相关
"key" : "position_id" , / / emp_id发生改变时, "position_id" 字段发生改变
"expression" : "EMPPRIMARYJOB(emp_id).get('position_id')" / / "position_id" 字段的取值方式
},{
"key" : "number" , / / emp_id发生改变时, "number" 字段发生改变
"expression" : "EMP(emp_id).get('number')" / / "number" 字段的取值方式.
}]
}, {
"key" : "position_id" ,
"value_onchange" : [{
"key" : "depart_id" ,
"force_change" : true, / / 编辑时初次赋值是否变化 用于展示字段
"expression" : "POSITION(position_id).get('parent').get('id')"
}]
}]}
|
示例:比如inspur6讲到的V3入手流程https://inspur6.hcmcloud.cn/#/workflow_detail?business_id=14700&version=3
想要新增单据时带出提交人信息及部门信息
只需要配置:
{ "form_relations" : [
{
"default" : {
"expression" : "EMP()['id']"
},
"key" : "employee_id" ,
"value_onchange" : [
{
"expression" : "EMPPRIMARYJOB(employee_id=employee_id)" ,
"key" : "cur_job"
},
{
"expression" : "cur_job['position_id']" ,
"key" : "position_id"
},
{
"expression" : "cur_job['department_id']" ,
"key" : "department_id"
},
{
"expression" : "cur_job['unit_id']" ,
"key" : "unit_id"
}
]
}
]}
|
{ "form_relations" : [{
"default" : {
"expression" : "EMP()['id']"
},
"value_onchange" : [
{
"expression" : "EMP(employee_id=employee_id)" ,
"key" : "emp_data"
}, {
"expression" : "emp_data.get('number')" ,
"key" : "number"
},
{
"expression" : "EMPPRIMARYJOB(employee_id=employee_id)" ,
"key" : "cur_job"
}, {
"expression" : "cur_job['position_id']" ,
"key" : "position_id"
}, {
"expression" : "cur_job['department_id']" ,
"key" : "department_id"
}, {
"expression" : "cur_job['unit_id']" ,
"key" : "unit_id"
}, {
"expression" : "cur_job['job_grade_id']" ,
"key" : "job_grade_id"
}, {
"expression" : "cur_job['job_step_id']" ,
"key" : "job_step_id"
}, {
"expression" : "TODAY()" ,
"key" : "date"
}, {
"expression" : "HIGEDU(employee_id).get('education')" ,
"key" : "education"
}, {
"expression" : "MODELGET('TechnicalSkills',is_recruit=True,employee_id=employee_id).technical_skills_name" ,
"key" : "technical_skills_name"
}],
"key" : "employee_id"
}]}
|
其中:employee_id是人id的key,默认当前登入人,它的变化会调value_change事件,会带出基本信息(人员编码number)、任职信息cur_job (unit_id单位,departmen_id部门,position_id岗位,job_grade_id职等,job_step_id职级),同时带出填报的时间字段date,最高教育经历,技术职务等于是的聘任信息
需要注意:cur_job,emp_data为中间变量,赋值情况过多,需要找中间变量过渡存储下
{ "form_relations" : [{
"value_onchange" : [{
"expression" : "POSITION(position_id).get('parent_id')" ,
"key" : "department_id"
}, {
"expression" : "POSITION(department_id).get('subordinate_unit_id')" ,
"key" : "unit_id"
}],
"key" : "position_id"
}]}
|
其中: position_id是岗位id变化会引起部门单位变化
{
"expression" : "PLUGIN('云函数名称XXXX',{})" ,
"key" : "form_default_value"
}
|
form_default_value为云函数返回值
{
"expression" : "API('云函数名称',{'model':'EmployeeAction'参数XXXX等等})" ,
"key" : "form_default_value"
}
|
{
"expression": "MODELINFO('EmployeeEducation',is_first='1',employee_id=employee_id)[0].get('education') if MODELINFO('EmployeeEducation',is_first='1',employee_id=employee_id) else None",
"key": "education"
}
简单写法:
MODELGET('EmployeeEducation',is_first='1',employee_id=employee_id).get('education')
or
MODELGET('EmployeeEducation',is_first='1',employee_id=employee_id).education
此时假如没有对应的信息 直接会返回None,系统会处理空值
推荐使用 MODELGET来获取单个对象值,需要获取列表使用MODELINFO
流程中想配置当job_name字段有值时job_category必填,需要在info层的"fields":[]下job_category字段的options里配置required
示例: "required": "=function(){return FORM().data.job_name?true:false}"
其中想在流程子表中拿到主表的配置是:BASE_FORM().data.对应的key
api: execute.formula.preview
参数 : {"formula":"EMP()"}
用到的公式为DepartFind
调用公式截图为:假设获取一级部门的id及name,则配置方法为:
{ "form_relations" : [{
"value_onchange" : [{
"expression" : "DepartFind(department_id).get(1,{}).get('id')" ,
"key" : "first_depart_id"
} ,{
"expression" : "DepartFind(department_id).get(1,{}).get('name')" ,
"key" : "first_depart_name"
} ],
"key" : "department_id"
}]}
|