起因
接前一篇文章里提到的需求。E8-有关流程节点的表之间的关联关系_rarenmen的博客-优快云博客。一个流程,在归档时要抄送给发起人的分管副总,如果当前部门没有分管副总时,抄送给总经理。
经过
换一个思路,根据部门,到我设置的矩阵信息去取分管副总,如果取到的分管副总是空的,那么取总经理角色对应的人员。
按这思路去处理,需要找到一些数据表,首先是我要用的矩阵存在了哪里。里面信息是怎么记的,是首先要搞清楚的。
网传的E8表结构里,没有这部份内容,没关系,如法炮制,跟踪到了表MatrixInfo,这表挺简单的,除了记录了矩阵的名称和描述之外,还有创建日期和创建时间,以及是不是系统矩阵的标识,以及一个自增涨的id。
从命名的类似程度上入手,很容易找到了MatrixFieldInfo表。它是用于记录矩阵的列信息的,结构很容易看懂。
矩阵的表名,从现有数据分析,应该是前缀”Matrixtable_“加上MatrixInfo表里相对应的id。那么看来,想通过矩阵名称去动态调对应的表,在SQL语句里实现不了了,只能指定具体的表名了。
doFieldSQL("select FGFZ from Matrixtable_6 where bumen = '$9331$'") |
这里FGFZ存的是部门的分管副总,$9331$是表单里申请部门的控件ID。
接下来,想办法通过角色取总经理,由于我们只有一个分部,这里直接取“总部”级“总经理”角色对应的人。
select * from hrmrolemembers hrm, hrmroles hr where hr.id = hrm.roleid and hrm.rolelevel = '2' and hr.rolesmark = '总经理' |
到这里,所有技术上的问题都清晰了,实现方法就简单了,在表单里放一个人力资源字段,放在创建节点的表单里,并给编辑权限,在字段属性里写如下代码,实现自动计算需要抄送的人员。
doFieldSQL("select case ISNULL(a.FGFZ, '') when '' then b.resourceid else a.FGFZ end from (select FGFZ from Matrixtable_6 where bumen = '$9331$') a right outer join (select hrm.resourceid as resourceid from hrmrolemembers hrm, hrmroles hr where hr.id = hrm.roleid and hrm.rolelevel = '2' and hr.rolesmark = '总经理') b on 1=1") |
在归档步骤就更简单了,设置抄送人直接取这字段里的人员就可以了。
结果
至此,需求实现了,以下是这次处理问题所涉及到的表,具体的表结构,请参看网传的《E8表结构》
MatrixInfo | 矩阵信息 |
MatrixFieldInfo | 矩阵列信息 |
Matrixtable_X | 矩阵值信息 |
hrmroles | 人力资源角色表 |
hrmrolemembers | 人力资源角色成员表 |