如何控制流程传阅或转交时选择人员的范围原创
3人赞赏了该文章
378次浏览
编辑于2022年12月28日 10:39:26
关键字:流程、传阅转交、选择人范围
一、需求
标准产品流程任务在转交或传阅时可选择的人员是所有,希望实现只能选择单据上申请人所属部门下的人员,不可以选择部门外其他人员。
二、思路与方案
工作流给选择人员的F7字段都增加口子,支持用户通过插件给用户F7传自定义过滤条件,可以扩展选择人员的页面,然后绑定表单插件,表单插件重写customEvent事件自定义自己的过滤条件。
三、实现过程
1.增加一个动态表单插件,然后重写customEvent事件,并判断传入的参数是AddPersonFilterCustomEvent再自定义自己的过滤条件。
public class CirPersonFilterPlugin extends AbstractFormPlugin implements Plugin { @Override public void customEvent(CustomEventArgs e) { super.customEvent(e); if (null != e && AddPersonFiltersCustomEvent.KEY_ADDPERSONFILTERSCUSTOMEVENT.equals(e.getKey()) && e instanceof AddPersonFiltersCustomEvent) { //从界面参数拿任务id AddPersonFiltersCustomEvent event = (AddPersonFiltersCustomEvent)e; IFormView formView = (IFormView) e.getSource(); FormShowParameter fs = formView.getFormShowParameter(); Long taskId = fs.getCustomParam("taskid"); //根据任务id拿到任务信息,从任务信息可以拿到单据id、单据实体 WorkflowService wfService = ServiceFactory.getService(WorkflowService.class); TaskService taskService = wfService.getTaskService(); TaskInfo taskInfo = wfService.findTaskById(taskId); String entityNumber = taskInfo.getEntityNumber();//实体标识 if("simplebill".equals(entityNumber)){ String businessKey = taskInfo.getBusinessKey();//单据id //构造过滤条件 DynamicObject bill = BusinessDataServiceHelper.loadSingle(businessKey, entityNumber); String orgNum = bill.getDynamicObject("appliercompany").getString("number"); QFilter orgFilter = new QFilter("entryentity.dpt.number",QCP.equals,orgNum); ((AddPersonFiltersCustomEvent) e).getQFilters().add(orgFilter); } } } }
2.扩展选择人员所在页面,比如传阅页面则扩展wf_taskcirculation,并注册插件CirPersonFilterPlugin
四、效果图
只能选择某个组织下的人员
五、开发环境版本
V4.0.0.14
六、参考资料
wfs-kded_wf_ext-20221227171943 …(4.34KB)
CirPersonFilterPlugin.zip(1.13KB)
推荐阅读