1.背景

流程发起界面,常常需要表单中默认带出相关信息,比如员工自助转正流程,要带出转正人的基本信息、单位部门组织信息等,就需要用到form_relations。它主要是用来处理表单字段值联动以及字段默认值。

可在流程设置-字段设置-表单高级设置中进行配置。

详细学习请参看Info元数据配置form_relations部分:Info元数据    此篇wiki只做流程常用到内容讲解

2.form_relations下属性简单介绍

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"
               }
           ]
       }
   ]}


3.流程其他常见配置套用

3.1. 根据人的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为中间变量,赋值情况过多,需要找中间变量过渡存储下


3.2.根据岗位带出部门,单位

{"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变化会引起部门单位变化

3.3. 调云函数

{
"expression": "PLUGIN('云函数名称XXXX',{})",
 
"key": "form_default_value"
}

form_default_value为云函数返回值

3.4.  调API

{
"expression": "API('云函数名称',{'model':'EmployeeAction'参数XXXX等等})",
"key": "form_default_value"
}

3.5.如果获取的时候不存在然后想继续获取可以用python写法 A.get(xxxx) if A else None

{
"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


3.6. 字段属性控制


流程中想配置当job_name字段有值时job_category必填,需要在info层的"fields":[]下job_category字段的options里配置required

示例:   "required": "=function(){return FORM().data.job_name?true:false}"

其中想在流程子表中拿到主表的配置是:BASE_FORM().data.对应的key


3.7. 测试公式是否正确


api:  execute.formula.preview

参数 :  {"formula":"EMP()"}


3.8. 补充带出常见的带出一级,二级三级部门公式

用到的公式为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"
}]}



  • 无标签