EAS工作流 之 兼职问题的处理原创
金蝶云社区-id_bao
id_bao
9人赞赏了该文章 322次浏览 未经作者许可,禁止转载编辑于2023年08月12日 16:04:26

    在EAS工作流中存在以下兼职问题:

  1. 节点取参与人的时候根据人员去获取上级,如果此时的人员存在兼职,现在标准程序会获取人员所有职位的上级,即实际业务中不相关的上级人员也会被取出来参与审批,这种并不符合实际的业务场景:


                                上传图片            

     那么如何解决呢?从上面的这个图片我们可以看出来,其实只要在这个场景中引入对应的【组织属性】即可。也就是说 你只要再告诉程序 现在单据的业务发生的组织是哪个,自然地就可以确定出兼职的职位中那一个是该组织体系下的。

在这里我们新建一个工作流函数 来解决此问题,需要先仔细看下下面的操作手册以及应用:

(工作流函数操作手册:https://vip.kingdee.com/article/212581886727071232?productLineId=8&isKnowledge=2

(工作流函数应用:https://vip.kingdee.com/article/168392489492660992?productLineId=8&isKnowledge=2


新增一个工作流函数:

函数名称: 根据职员(用户)ID以及组织长编码查找该职员的直接上级
返回类型:参与者(performer)
数组类型:是
输入参数:
 personID      orgLongNumber
 
 函数脚本:
 
 if(null == personID || "".equals(personID.toString()))
			return null;
		String personIDBak=personID.toString();
		com.kingdee.eas.basedata.person.app.PersonToWFAdapter adapter = new com.kingdee.eas.basedata.person.app.PersonToWFAdapter();
		com.kingdee.bos.workflow.participant.Person person = adapter.getPersonByUserId(__bosContext, personID.toString());
		personID=person.getEmployeeId();	
		if(!com.kingdee.util.StringUtils.isEmpty(personID)){
			personID=com.kingdee.bos.util.BOSUuid.read(personID);
		}else{
			personID=com.kingdee.bos.util.BOSUuid.read(personIDBak);
		}							
		com.kingdee.eas.basedata.org.PositionCollection positionCol =  com.kingdee.eas.basedata.person.PersonFactory.getLocalInstance(__bosContext).getPositions(personID);
		com.kingdee.eas.basedata.org.HierarchyInfo hierarchyinfo = com.kingdee.eas.basedata.org.HierarchyFactory.getLocalInstance(__bosContext).getDefaultHierarchy();	
		String hierarId = null;
		com.kingdee.bos.util.BOSUuid hierarUuid = hierarchyinfo!=null?hierarchyinfo.getId():null;
		if(hierarUuid!=null){
		     hierarId = hierarUuid.toString();
		}
		if(positionCol ==null||positionCol.size()<=0)
		        return null;
		String positionId = "";
		java.util.ArrayList list = new java.util.ArrayList();
		for(int i=0;i<positionCol.size();i++){
		    com.kingdee.eas.basedata.org.PositionInfo positionInfo = positionCol.get(i);
		    com.kingdee.eas.basedata.org.AdminOrgUnitInfo orgUnitInfo = positionInfo.getAdminOrgUnit();
			String longNumber = com.kingdee.eas.basedata.org.AdminOrgFacadeFactory.getLocalInstance(__bosContext).getComByOrgId(orgUnitInfo.getId()).getLongNumber();
		    if(orgLongNumber.contains(longNumber)){//单据上的orgLongNumber原则上是业务发生的组织,在这个流程里应该是最末级的组织
		         positionId = positionInfo.getId().toString();
		         if(!com.kingdee.util.StringUtils.isEmpty(positionId)){
		            list.add(positionId);
		         }
		    }
		}
		if(list.size()<=0) return null;
		java.util.ArrayList superlist = new java.util.ArrayList();
		com.kingdee.bos.workflow.participant.Person[] sPersons = null;
		for(int i=0;i<list.size();i++){
		    positionId = list.get(i);
		    sPersons = adapter.getSupervisor(__bosContext,personID.toString(),positionId,hierarId);
		    for(int j=0;j<sPersons.length;j++){
		    	superlist.add(sPersons[j]);
		    }
		}
		sPersons  = new com.kingdee.bos.workflow.participant.Person[superlist.size()];
		for(int i=0;i<superlist.size();i++)
 		{
 			sPersons[i] = superlist.get(i);
 		}
		return sPersons;

上传图片


上传图片


2,在配置流程的时候要注意什么?

    首先,使用函数参与人选取对应的函数【根据职员(用户)ID以及组织长编码查找该职员的直接上级】

    然后选择变量来填充参数,选择变量的时候要搞明白这两个参数的含义,personID对应的是要取上级的那个人,

    orgLongNumber对应的是参考哪个组织去取上级,然后从单据实体上去选择对应组织的 长编码,注意是长编码(longNumber),不是编码(number)

上传图片

   

图标赞 9
9人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!