工作流中查找各级“部门负责人”的脚本

栏目:s-hr cloud知识作者:金蝶来源:金蝶云社区发布:2024-09-17浏览:1

工作流中查找各级“部门负责人”的脚本

【问题描述】工作流中查找各级“部门负责人”的脚本【应用场景】脚本可以应用于查找各个组织层级的部门负责人职位及此职位上的人员,或者同部门内部的固定职位名称及此职位上的人员,从而确定对应的审批人。
【适用版本】V8.2【所属模块】工作流【解决方案】
我们在制作工作流时,审批节点的参与人不一定是通过行政汇报关系找到的“提交人的直接上级或者间接上级”,可能会用到查找某一部门的部门负责人或者某一职位,而此人与单据的提交人无法通过汇报关系找到。
此时可以使用脚本,将两者的关系找到。例如单据提交人是“环球集团--胶东大区--高密--人力资源部-招聘部”公司内的一个招聘专员,提交的单据需要“高密公司总经理”进行审批。两者的关系是在同一个公司内部,即组织全称中的“环球集团--胶东大区--高密”部分是一致的,通过此共性查找出对应的人员即可。本脚本可以应用于查找各个组织层级的部门负责人职位,或者同部门内部的固定职位,从而确定对应的审批人。只要提交人与参与人在行政组织上有一定的关联,均可使用。具体内容请查阅附件,有详细的脚本说明及截图,可以直接复制使用。
PS:此脚本逻辑简单,不需要懂JAVA即可使用,楼主是人力资源管理专业的,已经使用此脚本扩展了好几个版本了哦:/P。希望能够帮到大家,进行扩展应用。
一、流程说明:(1) 通过取职位名称的后两位或者后三位字符,对职位进行区分,例如“招聘专员”与“招聘主管”职位,可以通过取专员或者主管字符,对职位进行区分【此项根据需要使用】;(2) 通过取职位名称的前三位,对省公司和分公司进行区分,例如“省公司招聘专员”与“分公司招聘专员”职位,可以通过取省公司和分公司字符,对省/分公司的职位进行区分【此项根据需要使用】;(3) 通过添加“脚本”,找到部门负责人参与流程审批【文档内容主要介绍此处的脚本】;
二、设计逻辑:(1) 查找职位名称的前几位或者后几位,可以添加到判断条件中使用【此项根据需要使用】;(2) 查找“一级部门负责人”的脚本,是通过组织长编码的位数进行查找。根据组织编码设计逻辑,组织长编码的前13位是一级部门的长编码。
三、操作步骤:1、提交单据节点,添加对应的变量。“出口参数”位置要添加变量是:部门长编码:adminnumber,zwmc。Depnumber和Gsnumber都是从adminnumber的基础上根据字符长度取出来的,添加到变量列表备用即可。变量说明(以转正单为例):zwmc:职位名称。此处为转正人的职位名称。adminnumber:组织长编码。此处为转正人所在组织的长编码。Gsnumber:一级部门长编码。(前13位是一级部门编码)Depnumber:二级部门长编码。(前21位是二级部门编码) 2、提交单据节点,添加后置脚本。 后置脚本内容如下:substr2= zwmc.substring ( zwmc . length ( ) - 2 , zwmc . length ( ) ) ;【取职位名称的后两位】substr3= zwmc.substring ( zwmc . length ( ) - 3 , zwmc . length ( ) ) ;【取职位名称的后三位】substr33= zwmc.substring ( 0,3 ) ;【从左边开始数,取职位名称的前三位。区分省公司和分公司职位】if (adminnumber.length >= 21)【长编码的长度大于21】 { depnumber = adminnumber . substring ( 0 , 21);}else{depnumber= adminnumber;}if (adminnumber.length >= 21) {gsnumber= adminnumber . substring ( 0 , 13 );}else{gsnumber= adminnumber;}3、 添加脚本节点(以一级部门负责人脚本为例,进行说明)。添加脚本之后,通过脚本查找出的变量即“一级部门负责人”的姓名,然后在对应的“一级部门负责人”审批节点处,选取对应的参与人变量即可。 “分公司总经理或省公司总监(即一级部门负责人)”脚本逻辑:查找出“部门长编码”等于gsnumber,并且部门负责人等于是的人,赋值到变量“ap2”上。脚本内容如下:java. lang . StringBuffer Sql = new java . lang . StringBuffer ( ) ; Sql . append ( "selecta.fid from T_BD_Person a,T_ORG_Position b,T_ORG_PositionMember c,T_ORG_Admin dwhere a.fid=c.FPersonID and b.fid=c.FPositionID andb.FAdminOrgUnitID=d.fid and d.FLONGNUMBER='"+ gsnumber +"' AND b.FIsRespPosition= '1'" ) ; java. sql . Connection con = com . kingdee . bos . framework . ejb . EJBFactory .getConnection ( __bosContext ) ; java. sql . Statement batchStatement = con . createStatement ( ) ; java. sql . ResultSet qrst = batchStatement . executeQuery ( Sql . toString ( ) ) ;java. util . ArrayList al = new java . util . ArrayList ( ) ; for ( int i = 0 ; qrst . next () ; i ++ ) al . add ( qrst . getString ( "FID" ) . toString ( ) ) ; ap2 = new String [ al . size ( ) ] ; for ( int i = 0 ; i < al .size ( ) ; i ++ ) ap2 [i ] = al . get ( i ) ; com . kingdee . util . db . SQLUtils . cleanup( batchStatement , con ) ; 脚本内容是JAVA和SQL相结合的,不需要看懂,我们需要关注的内容就是标记红色字体和黄色背景的部分,根据需要进行修改即可为我所用。红色部分的SQL语言,可以在查询分析器中进行查找验证,逻辑为:从个人信息表、行政组织单元、职位、企业任职经历四个表中,查找出组织长编码等于gsnunber,并且是否部门负责人等于“是”的职位上的人员fid. SQL语言延伸学习:下面的语句是从“个人信息表、行政组织单元、职位、企业任职经历”四个表中查找出长编码类似“J01!Z02”,组织名称等于“人资中心”,并且职位名称等于“人力资源总监”的人员的fid.select a.FID from T_BD_Person a,T_ORG_Position b,T_ORG_PositionMemberc,T_ORG_Admin d where a.fid=c.FPersonIDand b.fid=c.FPositionID and b.FAdminOrgUnitID=d.fid and d.FLONGNUMBER LIKE '%J01!Z02%' AND d.FNAME_L2 = '人资中心' AND b.FNAME_L1 = '人力资源总监'

工作流中“查找部门负责人”的脚本说明.docx


SQL预计没问题,可以找到相应员工的FID。
但是,下面那个JAVA的脚本执行之后,aq2并没有获取到相应的人员,只是获取到了类似于“[Ljava.lang.String;@3703de”的东西。
百度了一下,说是这个aq2字段的类型不对,因为sql传过来的是数组,不能存到一般的字段里。

因为我也不懂JAVA,所以现在搞不定了,请问楼主当时是怎么实现的呢?


牛!

工作流中查找各级“部门负责人”的脚本

【问题描述】工作流中查找各级“部门负责人”的脚本【应用场景】脚本可以应用于查找各个组织层级的部门负责人职位及此职位上的人员,或者同...
点击下载文档
分享:
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息