学习了几天iMatrix平台的功能,自己对iMatrix平台的流程引擎下的办理人设置有几点研究,在这里跟大家分享下。
1)流程设计器设置:
可以有四种配置:文档创建人、上一环节办理人指定、文档字段中指定的人员、按条件筛选。
2) 办理人设置的监听类:
xml中配置监听类,如下:
<task name="填单" g="251,75,80,40">
<assignment-handler class="com.norteksoft.wf.engine.core.AssignmentHandler"/>
… … … …
</task>
监听类AssignmentHandler实现jbpm的org.jbpm.api.task.AssignmentHandler 接口
public class AssignmentHandler implements org.jbpm.api.task.AssignmentHandler
{
… … … …
//根据流程设计器配置的办理人,获得办理人列表:
candidates = TransactorConditionHandler.processCondition(conditions, execution,paramMap);
… … … …
if(candidates.size() == 1){
//将获得的办理人设置到jbpm任务中
assignable.setAssignee(candidates.iterator().next());
}elseif(candidates.size() == 0){
//没有办理人时抛出异常信息
thrownew WorkflowException(WorkflowException.NO_TRANSACTOR);
}else{
for(String candidate : candidates){
//将获得的办理人设置到jbpm任务的办理人候选人列表中
assignable.addCandidateUser(candidate);
}
}
… … … …
}
我们再来看看TransactorConditionHandler.processCondition的实现:
public static Set<String> processCondition(Map<TaskTransactorCondition, String> conditions, OpenExecution execution,Map<String,String> param){
… … … …
if("${documentCreator}".equals(userCondition)){
//文档创建人,即为发起实例的人的登录名
candidates.add(param.get(DOCUMENT_CREATOR));
}elseif("${previousTransactorAssignment}".equals(userCondition)){
//上一环节办理人指定,当是这种情况时,需要弹出选人界面让上一环节办理人选择该环节的办理人
candidates.add(CommonStrings.TRANSACTOR_ASSIGNMENT);
}elseif(userCondition.startsWith("${field[")){
//文档字段中指定//${field[name_zn[name_en]]}
… … … …
}else{
//按条件筛选
… … … …
}
}
生成任务时的处理方式是,根据jbpm任务生成imatrix的任务实体:
TaskService.java的generateTask方法:
public void generateTask(WorkflowInstance instance, String executionId, String parentExecutionId){
… … … …
for(org.jbpm.api.task.Task task : jbpmTasks){
… … … …
if(task.getAssignee() == null){//任务有多个办理人
//获得jbpm任务的候选人列表,此处获得的人员列表为监听类AssignmentHandler中addCandidateUser中的人员
Iterator<ParticipationImpl> it = ((TaskImpl)task).getParticipations().iterator();
… … … …
while(it.hasNext()){
//创建imatrix的任务实体
wfTask = createTask(instanceId, task.getExecutionId(), it.next().getUserId(), task.getActivityName(),groupNum);
//审批任务有多个办理人,且流程设计器中设置为多人办理时,将imatrix的认为设置为待领取
if(!wfTask.getMoreTransactor()){ wfTask.setActive(TaskState.DRAW_WAIT.getIndex());
}
… … … …
}else{//任务只有一个办理人
tasks.add(createTask(instanceId, task.getExecutionId(), task.getAssignee(), task.getActivityName(),groupNum));
}
}
}
相关推荐
iMatrix6.0.0Dev:iMatrix平台6.0.0.Dev源码
### Matrix BPM 流程入门详解 #### 一、概述 Matrix BPM是一款专业的企业级业务流程管理(Business Process Management, BPM)软件,旨在帮助企业通过可视化工具快速设计、管理和优化业务流程。该工具支持主流服务器...
iMatrix平台的5.2.1.RC版本是该系统发展的一个重要里程碑,标志着系统功能和性能的持续改进。...开源社区的力量就在于此,每个人都可以为这个项目的进步贡献力量,共同打造更强大、更可靠的iMatrix平台。
Matrix Analysis
IBM SurePOS 500系列收款机在国内发售的搭配的S78A键盘的烧录软件。 支持WIN7 XP系统,支持自动安装PS2口驱动。不需要手动选择驱动安装。 需要注意的是,键盘生产厂商不同,即使外观和功能都相同,所需驱动也不一样...
Matrix Analysis(矩阵分析)中文翻译版 pdf格式的
【标题】"THE Matrix 屏幕保护程序(附程序)" 是一个基于计算机程序的屏幕保护应用,灵感来源于著名科幻电影《黑客帝国》(The Matrix)。这个屏幕保护程序在闲置时会模仿电影中经典的绿色代码雨效果,为用户的电脑...
《iMatrix-v6.5.RC1:深入解析开源平台的源码结构与技术栈》 iMatrix-v6.5.RC1是一个重要的里程碑,它标志着该开源平台发展到了v6.5版本的候选发布阶段(Release Candidate 1)。这个版本的原始码包含了构建平台所...
在ANSYS这款强大的有限元分析软件中,Matrix27单元是一种特殊的自定义单元类型,主要用于处理非线性问题,尤其是那些涉及到大变形、接触非线性和材料非线性的复杂工程问题。Matrix27单元的灵活性和强大的功能使其在...
Matrix Analysis(矩阵分析),国外经典教材,中文译本
在这个程序中,可能需要一个文本框让用户输入要编码的数据,一个按钮触发编码和显示DataMatrix,以及可能的设置选项,比如纠错级别、尺寸等。 4. **事件处理**: 对于用户输入和按钮点击等事件,MFC使用消息映射机制...
DataMatrix 二维码生成 和解码 C#程序,亲测可用。解码是Freytag DataMatrixDecoder A c# implementation to find DataMatrix 'barcodes' in bitmaps and decode them back into a string.
1. **设置变换**:Matrix提供了多种方法来设置变换,如setTranslate(), setScale(), setRotate() 和 setSkew(),分别用于设置平移、缩放、旋转和倾斜。 2. **组合变换**:可以使用postTranslate(), postScale(), ...
总的来说,得利捷(DATALOGIC)Matrix 320用户设置手册是一部全面且实用的操作指南,它涵盖了从设备基础操作到高级功能设置的所有环节,为用户提供了一条清晰的学习路径,帮助他们充分发挥这款固定扫描器的潜能。...
【Matlab有限元结构动力学分析(源程序)】是一个基于MATLAB的计算工具包,专为进行结构动力学分析而设计。这个源程序集合涵盖了有限元方法在工程中的实际应用,是工程师和学习者深入理解和实践结构动力学理论的理想...
这款由外国人研发的Flash AS3 3D引擎,不仅突破了2D平面的限制,更是将动态三维视觉效果带入了Web应用程序的领域,为用户带来了前所未有的3D环绕体验。 首先,让我们深入理解一下AS3,即ActionScript 3.0。这是...
一个技术选型小实例,用上两个Data Matrix二维码解析库。 实例操作方法: 1. 运行程序 2.点Image File选一个有Data Matrix二维码的图片 3.在右边的Picture Box选择二维码范围区域 4. 分别有两个Read来解析二维码,...