流程引擎服务
| Modifiers | Name | Description |
|---|---|---|
static List |
NULL_LIST |
|
static Integer |
aliasOverridingOrder |
| Type | Name and description |
|---|---|
grails.core.DefaultGrailsApplication |
grailsApplication |
bropen.framework.core.OsmEmployeeService |
osmEmployeeService |
ProcessCallbackEventService |
processCallbackEventService |
ProcessDefinitionService |
processDefinitionService |
ProcessParticipantService |
processParticipantService |
ProcessScriptService |
processScriptService |
ProcessSubstituteService |
processSubstituteService |
bropen.framework.core.SecRoleService |
secRoleService |
bropen.framework.core.SettingService |
settingService |
| Type | Name and description |
|---|---|
void |
cancelInstance(ProcessInstance processInst, Map options = [completeReason: null])强行结束流程、将流程设置成撤销并留存的状态,并从流程日志中抹去当前办理人的信息 |
void |
completeInstance(ProcessInstance processInst, Map options = [completeReason: null])直接完成待办任务,并结束流程,将流程设置成完成状态 |
Task |
createDummyTask(ProcessInstance processInst, bropen.framework.core.osm.Employee actor, Map options = null)创建一个Dummy任务,用于授权等 |
Task |
createDummyTask(ProcessInstance processInst, bropen.framework.core.osm.EmployeeIdentity actorEI, Map options = [taskNode: null)创建一个Dummy任务,用于授权等 |
Task |
createServiceTask(Object emp, ProcessInstance processInst, Object doc, Task nextTaskNode, Map options = [taskGroup: null)创建一个自动任务 |
Task |
createSubProcessTask(bropen.framework.core.osm.Employee emp, ProcessInstance ppi, Object pdoc, Task fromTask, SubProcess subProcess, bropen.framework.core.osm.EmployeeIdentity actorEI, Map options = [taskGroup: null])创建主流程与子流程关联的任务实例 |
ProcessInstance |
createTempProcessInst(bropen.framework.core.osm.Employee initiator, Object doc, Map options = [organizationId: null)创建一个临时的流程实例:用于起草时的一些判断 |
ProcessInstance |
createTempSubProcessInst(bropen.framework.core.osm.Employee emp, ProcessInstance ppi, Task fromTask, String subProcessId, Map options = [taskGroup: null)创建一个临时的子流程实例、父流程任务实例:用于提交到子流程时的一些判断 |
Task |
createTodoTask(Object emp, ProcessInstance processInst, Object doc, Object nextTaskNode, bropen.framework.core.osm.Employee actor, Map options = null)创建一个待办任务。 |
Task |
createTodoTask(Object emp, ProcessInstance processInst, Object doc, Object nextTaskNode, bropen.framework.core.osm.EmployeeIdentity actorEI, Map options = [taskGroup: null)创建一个待办任务。 |
void |
deleteProcessInst(ProcessInstance processInst, javax.servlet.http.HttpSession session = null)删除流程实例 |
void |
deleteProcessInst(ProcessInstance processInst, javax.servlet.http.HttpSession session, Boolean recursion)解除流程之间的关系并删除流程实例 |
void |
deleteTask(Task task)删除任务 |
void |
deleteTaskGroup(ProcessInstance processInst, String taskGroupId)根据组ID,删除任务组的所有任务 |
void |
endChildrenInstance(ProcessInstance parent, String endType, Date now, Integer completeReason) |
String |
evalMultiactors(bropen.framework.core.osm.Employee emp, String expression, Task task, Task taskNode, Boolean isTimeout) |
String |
evalSelectactors(bropen.framework.core.osm.Employee emp, String expression, Task task, Task taskNode, SequenceFlow sf) |
String |
evalSelectreaders(bropen.framework.core.osm.Employee emp, String expression, Task task, Task taskNode, SequenceFlow sf) |
List<bropen.framework.core.osm.EmployeeIdentity> |
getActualActorEIs(ProcessInstance processInst, Object taskNode, Map options = [groupId: null)获得流程实例中某环节的实际处理人 |
List<bropen.framework.core.osm.Employee> |
getActualActors(ProcessInstance processInst, Object taskNode, Map options = [groupId: null)获得流程实例中某环节的实际处理人 |
List<Map> |
getActualActorsAndTime(ProcessInstance processInst, Object taskNode, Map options = [groupId: null)获得流程实例中某环节的实际处理人和处理时间 |
List<Task> |
getActualTasks(ProcessInstance processInst, Object taskNode, Map options = [groupId: null)获得流程实例中某环节的任务列表(草稿、待办、已办) |
List<String> |
getAvailableActions(ProcessInstance processInst, Task task, String controllerActionName, boolean admin)获得任务可用的操作 |
List<SequenceFlow> |
getAvailableSequenceFlows(Task task, Map options = null)获得任务的所有可选路径名称列表,可能包括指向网关的入口路径及网关下的出口路径。 |
List<Task> |
getContentTasksOfMultiactors(ProcessInstance processInst, Task task, Task taskNode, String multiactors)如果多人办理方式为first或last,则计算与当前任务竞争失败的其他任务;如果当前任务竞争失败,则返回 null 如:多人办理方式为 first 时,任务 a、b,若 b 已办结(并且不是提交给其他会签任务、或其他会签任务都已办结)则当前任务 a 竞争失败返回null;若 b 未提交则 a 竞争成功,返回 [b]。 |
List<SequenceFlow> |
getFirstSequenceFlows(Process proc, Task startNode, Object doc, bropen.framework.core.osm.Employee emp, Long organizationId)根据流程定义、起草环节、当前用户等信息,计算可用的路径列表 |
Map |
getNextCandidates(bropen.framework.core.osm.Employee emp, Task task, SequenceFlow sf, Map options = [isManual: null)根据task和路径获取下一办理候选人身份列表 |
Map |
getNextCandidates2(bropen.framework.core.osm.Employee emp, Task task, SequenceFlow sf, Map options = [isManual: null)根据task和路径获取下一办理候选人身份列表 |
List<bropen.framework.core.osm.EmployeeIdentity> |
getNextDefaultCandidates(bropen.framework.core.osm.Employee emp, Task task, SequenceFlow sf, Map options = [isTimeout: null])根据task和transition获取下一默认办理人列表 |
List<bropen.framework.core.osm.EmployeeIdentity> |
getNextDefaultReaders(bropen.framework.core.osm.Employee emp, ProcessInstance processInst, Task task, SequenceFlow sf, Map options = [isTimeout: null)获得路径上要发送的默认待阅人 |
List |
getNextReaders(bropen.framework.core.osm.Employee emp, ProcessInstance processInst, Task task, SequenceFlow sf, Map options = [isManual: false)计算路径上要发送的待阅人,如果没有则返回空的列表 |
Task |
getNextTaskNode(Task task, SequenceFlow sf)根据任务和路径获取下一环节 |
List<String> |
getPreviousTaskNodeIds(ProcessInstance processInst, Task task, SequenceFlow sf)获得发送给本环节的“上一处理环节”的环节列表,用于“退回上一环节”。 |
Process |
getProcessDefinition(String entry, String revision)获取当前应用下的流程定义 |
Process |
getProcessDefinition(String processId) |
List |
getSendtoreadCandidates(bropen.framework.core.osm.Employee emp, ProcessInstance processInst, Task task)获得发送阅知/知会的操作的待阅人候选列表:先从环节取配置(sendtoreaders)、再从action上取属性(readers),如果都没有配置,则默认为本机构 |
List<Task> |
getSerialCountersignTasks(ProcessInstance processInst, Task task, int status)获得当前任务相关的单环节串行会签的其他任务 |
Task |
getStartTaskNode(ProcessInstance processInst) |
Boolean |
isFlowAt(ProcessInstance processInst, Object nodes, Map options = [actors: null)判断是否在某个环节(有待办任务) |
Boolean |
isFlowAtOrThrough(ProcessInstance processInst, Object nodes, Map options = [groupId: null)判断是否在某个环节(有未办任务或阅知环节的未阅任务)或已流经过了某个环节 |
Boolean |
isFlowThrough(ProcessInstance processInst, Object nodes, Map options = [groupId: null)判断是否流经某个环节 |
Boolean |
isSequenceFlowAvailable(Task task, SequenceFlow sequenceFlow)判断路径是否可用 |
void |
reactiveInstance(ProcessInstance processInst)重新激活结束的流程,并且恢复最后的待办 |
void |
resetFlowNodeAndActorNames(ProcessInstance processInst)// * 获得本组内相同环节的其他已办理人的任务 // * // * |
void |
resetFlowState(ProcessInstance processInst, Map options = [canceled: false)根据所有任务,重置流程的状态等信息,包含changeState和resetFlowNodeAndActorNames |
Object |
sendToRead(Object sender, ProcessInstance processInst, Object receiver, Map options = [fromTask: null) |
Object |
sendToread(Object sender, ProcessInstance processInst, Object receiver, Map options = [fromTask: null)生成一个待阅 |
ProcessInstance |
start(bropen.framework.core.osm.Employee emp, Object bean, Map options = [docController: null)启动流程实例,提交到首环节 |
Task |
startFork(bropen.framework.core.osm.Employee emp, ProcessInstance processInst, Object bean, Map options = [organization: null)流程实例已经存在,重新启动一个分支并发送到首环节 |
ProcessInstance |
startSubProcess(bropen.framework.core.osm.Employee emp, ProcessInstance ppi, Object parentDoc, Task fromTask, String subProcessId, Map options = [taskGroup: null)创建子流程实例 |
List<bropen.framework.core.osm.EmployeeIdentity> |
submit(bropen.framework.core.osm.Employee emp, ProcessInstance processInst, Object doc, Task task, Map options = [taskGroup : null)提交到下一处理。 |
List<bropen.framework.core.osm.EmployeeIdentity> |
submit2Parent(bropen.framework.core.osm.Employee emp, ProcessInstance processInst, Task task, SequenceFlow sf, List<bropen.framework.core.osm.EmployeeIdentity> actors, Map options = [now: new Date()子流程提交回父流程,激活父流程 |
void |
terminateInstance(ProcessInstance processInst, Map options = [completeReason: null])强行结束流程,将流程设置成终止状态,并从流程日志中抹去当前办理人的信息 |
List<Task> |
terminatePreTasks(Task task)终止所有未完成的前置任务 |
void |
updateProcessMappingProperties(ProcessInstance processInst, Object doc)更新流程示例的可映射属性 |
Map |
wrapAvailableSequenceFlows(Task task, List<SequenceFlow> availableSequenceFlows)重新封装任务的可用路径(getAvailableSequenceFlows 的结果),以及相关信息,以便前台使用。 |
| Methods inherited from class | Name |
|---|---|
class Object |
Object#wait(long, int), Object#wait(long), Object#wait(), Object#equals(Object), Object#toString(), Object#hashCode(), Object#getClass(), Object#notify(), Object#notifyAll() |
强行结束流程、将流程设置成撤销并留存的状态,并从流程日志中抹去当前办理人的信息
直接完成待办任务,并结束流程,将流程设置成完成状态
processInst - 流程实例创建一个Dummy任务,用于授权等
创建一个Dummy任务,用于授权等
processInst - 流程实例对象actorEI - 员工身份对象,设置为任务的处理人options - 其他可选参数,包括: taskNode/taskNodeId/taskNodeName 任务所属环节,默认为null groupId 任务组ID,默认为null,即主干
创建一个自动任务
emp - 发送人,可以是提交任务的员工对象、身份对象或员工名称processInst - 流程实例doc - 文档nextTaskNode - 待办任务的下一环节options.taskGroup - 任务分组信息,如果为 null,则继承 fromTask 的分组options.fromTask - 发送本待办的任务。如果emp和任务所有者不同,则新建任务的发送人会显示出谁代替谁发送的!options.sequenceFlowType - 提交路径类型:会被设置到目标任务的 sendType 上创建主流程与子流程关联的任务实例
emp - 发送人,即提交任务的员工对象ppi - 父流流程实例pdoc - 父流程实例的关联文档fromTask - 当前的待办任务(从父流程提交到子流程的待办任务)subProcess - 子流程(SubProcess)节点对象options.taskGroup - 任务分组信息,如果为null,则继承fromTask的分组options.actorEI - 子流程首环节任务的处理人身份对象创建一个临时的流程实例:用于起草时的一些判断
initiator - 起草人对象doc - 包含 bizId 属性、且有值的文档对象options.organizationId - 起草身分所在的机构IDoptions.startNode - 起草环节对象,如果为 null 且流程只有一个起草环节,则自动取第一个环节options.proc - 流程定义,默认为 null,即根据文档类重新计算获得options.flowProps - 流程实例的其他属性Map,默认为空options.taskProps - 起草任务的其他属性Map,默认为空创建一个临时的子流程实例、父流程任务实例:用于提交到子流程时的一些判断
emp - 员工对象ppi - 父流程实例fromTask - 当前的待办任务(从父流程提交到子流程的待办任务)subProcessId - 子流程节点的idoptions.taskGroup - 任务分组信息,如果为 null,则继承 fromTask 的分组options.organizationId - 子流程所属机构 ID,默认为员工的主职机构 ID创建一个待办任务。
创建一个待办任务。
注:没有任何判断,因此直接调用时需慎重
emp - 发送人,可以是提交任务的员工对象、身份对象或员工名称processInst - 流程实例doc - 文档对象nextTaskNode - 待办任务的环节对象或环节IDactorEI - 待办任务的处理人(员工身份对象)options.taskGroup - 任务分组信息,如果为 null,则继承 fromTask 的分组options.fromTask - 发送本待办的任务。如果 emp 和任务所有者不同,则新建任务的发送人会显示出谁代替谁发送的。options.sequenceFlowType - 提交路径类型:会被设置到目标任务的 sendType 上options.senderUid - 提交的用户ID,如果为空,会尝试从 emp(如果 emp 不是字符串的话)和 options.fromTask 上计算删除流程实例
processInst - 流程实例解除流程之间的关系并删除流程实例
processInst - 流程实例recursion - 递归参数:用于标识递归。用于防止不与父流程共用文档的子流程,在拦截器后(文档已被删除过)进入此方法删文档报错。删除任务
task - 要删除的任务根据组ID,删除任务组的所有任务
processInst - 流程实例taskGroupId - 任务分组ID获得流程实例中某环节的实际处理人
processInst - 流程实例taskNode - 环节对象或环节名称、环节IDoptions - 其他可选参数,包括:
groupId 任务分组ID
finished 是否已处理结束(待办/已办),默认为null,即都包含。
如果为true,但处理人A同时有已结束的和办理中的任务,此时会返回A,如果不需要A,可以用如下方式处理:
service.getActualActorEIs(....true) - service.getActualActorEIs(....false)
actorType 返回的处理人类型,默认为null/0:0=actorTransfered?:actor,1=actorSubstitute?:actor,2=actor, 3=actorTransfered+actorSubstitute+actor获得流程实例中某环节的实际处理人
processInst - 流程实例taskNode - 环节对象options.groupId - 任务分组IDoptions.finished - 是否已处理结束(待办/已办),默认为null,即都包含。service.getActualActors(....true) - service.getActualActors(....false)options.actorType - 返回的处理人类型,默认为0。0 = actorTransfered ?: actor,1 = actorSubstitute ?: actor,2 = actor, 3 = actorTransfered + actorSubstitute + actor获得流程实例中某环节的实际处理人和处理时间
processInst - 流程实例taskNode - 环节对象options - 其他可选参数,同方法 getActualActors。获得流程实例中某环节的任务列表(草稿、待办、已办)
processInst - 流程实例taskNode - 环节对象或环节名称、环节IDoptions.groupId - 任务分组IDoptions.finished - 是否已处理结束(待办/已办),默认为null,即都包含。获得任务可用的操作
processInst - 流程实例task - 当前任务,可能为null获得任务的所有可选路径名称列表,可能包括指向网关的入口路径及网关下的出口路径。
task.getAvailableSequenceFlows也是调用本方法
可以根据transition节点上的test规则进行判断该路径是否可用:
task - 当前任务;子流程结束激活父流程时是连接子流程与父流程的任务options.gatewaySequenceFlowIn - 指向网关的路径(入口路径),默认为空,如果有对应的网关,则仅返回可用的网关出口路径options.isTimeout - 是否是任务超时的时候来取默认路径,此时test脚本中可以通过isTimeout参数进行额外的判断。比如超时的时候返回某条特殊的路径。options.emp - 路径test脚本中的emp对象,默认为null则取当前用户(如果是外出授权的待办,则默认取其授权人)如果多人办理方式为first或last,则计算与当前任务竞争失败的其他任务;如果当前任务竞争失败,则返回 null 如:多人办理方式为 first 时,任务 a、b,若 b 已办结(并且不是提交给其他会签任务、或其他会签任务都已办结)则当前任务 a 竞争失败返回null;若 b 未提交则 a 竞争成功,返回 [b]。
根据流程定义、起草环节、当前用户等信息,计算可用的路径列表
此时流程、文档、任务实例等还不存在,如果在计算可用路径时发生异常,则直接返回空(以免前台显示出部分路径,反而造成误会)
如果有多个起草环节,且参数startNode为空时,则直接返回空
proc - 流程定义startNode - 起草环节doc - 文档(数据实体Bean)emp - 当前用户organizationId - 机构ID根据task和路径获取下一办理候选人身份列表
emp - 当前员工task - 当前任务sequenceFlow - 当前选择的路径options.isManual - 是否是前台手动选择的,如果是则返回结果可能为机构列表、并且相同员工的多个EI不会只保留主职;否则均返回EI列表options.sendbackTaskNodeId - 指定退回的环节id根据task和路径获取下一办理候选人身份列表
如果从所选路径上、目标环节上都无法获得办理人,且目标环节是可以被跨过的,则从目标环节的可用路径的stepoverActors属性中计算办理人
options - 其他可选参数,包括:isManual、isTimeout、sendbackTaskNodeId根据task和transition获取下一默认办理人列表
emp - 当前员工task - 当前任务sequenceFlow - 当前选择的路径获得路径上要发送的默认待阅人
emp - 当前员工processInst - 流程实例task - 当前任务sequenceFlow - 当前选择的路径options.isTimeout - 是否超时自动提交options.sf - 网关出口路径或子流程内部指向首环节路径计算路径上要发送的待阅人,如果没有则返回空的列表
emp - 当前员工processInst - 流程实例task - 当前任务sequenceFlow - 路径。不能是网关的出口路径,此时固定返回空列表options.isManual - 是否是前台手动选择的,如果是则返回结果可能为机构列表、并且相同员工的多个EI不会只保留主职,默认为falseoptions.isTimeout - 是否是超时任务options.sf - 网关出口路径或子流程内部指向首环节路径根据任务和路径获取下一环节
task - 当前任务sequenceFlow - 路径获得发送给本环节的“上一处理环节”的环节列表,用于“退回上一环节”。
如果本任务为分支分组,则只取本分组的信息。
processInst - 流程实例task - 当前任务sequenceFlow - 当前选择的路径获取当前应用下的流程定义
entry - 流程定义路径revision - 版本号,默认为最新版本获得发送阅知/知会的操作的待阅人候选列表:先从环节取配置(sendtoreaders)、再从action上取属性(readers),如果都没有配置,则默认为本机构
emp - 当前员工processInst - 流程实例task - 当前任务,如果为null,则只通过action配置上计算,否则先通过环节计算获得当前任务相关的单环节串行会签的其他任务
status - 任务状态:0=所有、1=已完成的会签任务、2=未开始的会签任务、3=进行中的会签任务(0条或1条)
根据流程实例及流程定义,计算起草环节名称
如果流程实例已持久化(有ID了),则直接返回第一个任务的名称;
否则根据流程定义进行计算:
processInst - 流程实例对象判断是否在某个环节(有待办任务)
processInst - 流程实例nodes - 环节/网关的ID或名称列表,可以为字符串或以逗号分割的多个环节字符串options.actors - 任务办理人列表(List),或办理人对象(Employee)options.groupId - 分组ID,默认不分组(null)判断是否在某个环节(有未办任务或阅知环节的未阅任务)或已流经过了某个环节
注意只有往后提交了才算“流经“了,而在该环节仅仅是点击了发送、退回等路径的都不算已流经,除非 includeSendback 为真; 此外,暂未考虑后续环节退回的情况。
processInst - 流程实例nodes - 环节/网关的ID或名称列表,可以为字符串或以逗号分割的多个环节字符串options.groupId - 分组ID,默认不分组(null)options.includeSendback - 是否包含点击退回路径结束待办的,默认为否判断是否流经某个环节
注意只有往后提交了才算“流经“了,而在该环节仅仅是点击了发送、退回等路径的都不算已流经,除非 includeSendback 为真; 此外,暂未考虑后续环节退回到对应环节或更前面的环节的情况。
processInst - 流程实例nodes - 环节/网关的ID或名称列表,可以为字符串、或以逗号分割的多值options.groupId - 分组ID,默认不分组(null)options.includeSendback - 是否包含点击退回路径结束待办的,默认为否判断路径是否可用
task - 当前任务sequenceFlowNameOrId - 路径名称或ID重新激活结束的流程,并且恢复最后的待办
processInst - 流程实例// * 获得本组内相同环节的其他已办理人的任务 // * // *
可以用来做路径的判断,如根据别人的路径来判断自己的可选路径 // * 如果一个用户处理过两次,以第二次为准;或者同一个用户的第二份待办还未处理,则认为该用户未办理过
// *processInst 流程实例
// - *task 任务实例
// - *根据所有任务,重置流程的状态等信息,包含changeState和resetFlowNodeAndActorNames
processInst - 流程实例options.canceled - 如果计算出来流程已结束,则是否将流程实例设置为撤销(canceled)/终止(terminated)状态;默认为否,即设置为完成状态。options.now - 如果计算出来流程已结束,则设置为流程结束时间options.completeReason - 如果计算出来流程已结束,则设置为流程结束原因options.completeEvents - 如果计算出来流程已结束,是否执行结束事件,默认为 true生成一个待阅
processInst - 流程实例sender - 发送人,可以是员工对象、身份对象或员工名称receiver - 接收人(员工或员工身份),可以为列表/数组options.fromTask - 发送的当前任务,可以为空options.node - 阅知环节,默认为fromTask所在环节;可以用于实现显示不同视图等功能options.nodeId - 同上options.nodeName - 同上(不推荐)options.repeat - 重复发送待阅的策略:options.taskGroup - 分组信息,如果为null,则继承fromTask的分组options.readType - 阅知任务类型options.sequenceFlowType - 提交路径类型:会被设置到目标任务的sendType上启动流程实例,提交到首环节
注:调用此方法后,可能会出现 bean.processInstance 为空的现象。解决方法有2种:
1、使用 .save(flush:true) 冲洗数据库。
2、在 Controller 的相应方法上增加 “@Transactional”。
emp - 员工对象bean - 包含 bizId 的文档对象options - 其他可选参数options.organization - 机构对象,或机构IDoptions.taskGroup - 任务分组信息的Mapoptions.startNode - 首环节对象;如果为null,则计算默认的首环节名称options.state - 起草后的流程状态,可以为:流程实例已经存在,重新启动一个分支并发送到首环节
注:调用此方法后,可能会出现bean.processInstance为空的现象。解决方法有2种: 1、使用“.save(flush:true)”冲洗数据库。 2、在Controller的响应方法上增加“@Transactional”。
emp - 员工BeanprocessInst - 流程实例bean - Domain beanoptions - 其他可选参数,包括:
organization/organizationId 机构Bean,或机构ID
taskGroup 任务分组信息的Map
startNode/startNodeId/startNodeName 首环节;如果为null,则计算默认的首环节名称
state 起草后的流程状态,可以为:
ProcessInstance.STATE_TEMP = 流程状态设为临时,不会出现在任何列表中(包括草稿列表)
ProcessInstance.STATE_DRAFT(默认) = 流程状态设为草稿,并且将起草的任务类型设置成草稿,会出现在草稿列表中
ProcessInstance.STATE_PROCESSING = 流程状态设为流转中,并且将起草的任务类型设置成待办,会出现在待办列表中创建子流程实例
emp - 员工对象ppi - 父流程实例parentDoc - 父流程对应的文档fromTask - 当前的待办任务(从父流程提交到子流程的待办任务)subProcessId - 子流程节点SubProcess的idoptions.taskGroup - 任务分组信息,如果为null,则继承fromTask的分组options.actor - 子流程首环节任务的处理人(员工对象或身份对象)提交到下一处理。
emp - 提交的员工processInst - 流程实例doc - 文档task - 提交的任务options - 其他可选参数。开发时用V3版参数: V3版参数包括(推荐): targets 目标环节信息(环节id、显示名、接收人),采用List<Map<String, Object>>, 一个路径可对应多个环节, targets中每个元素Map包含的key: sfId:提交路径id。 如果从网关提交到一个环节的时候为网关出口路径Id; 如果是父流程提交进入子流程则路径为子流程内部开始事件指向首环节的路径Id; 如子流程有多条入口路径,则必须带有参数 inputsfId(子流程入口路径id); 如是网关出口跳级虚路径,则必须带有参数 inputsfId(网关入口路径id); inputsfId:值是入口路径id,可选;网关入口路径id或子流程入口路径id,此参数不存在会自动计算; nodes:值是List,List中每个Map的key包含:id(环节ID,可选)、nodeDisplayName(环节显示名,可选)、actors(办理人身份对象列表); reminds:马上给接收人发送的待办提醒类型。 targets形式例如: [[sfId: sid-A20F5A5C-7ADB-4BF7-91F4-1DC9CCCDEA3A, inputsfId: null, nodes: [[nodeDisplayName:null, actors:[钱七]]]]] taskGroup 任务分组信息,包含id、name的Map,其中id可以是一个能拿到id的bean readers 阅知人身份列表 isTimeout 是否是过期任务自动提交,可以在计算接收人、阅知人脚本,以及判断路径的test脚本、几个callback脚本中使用 now 提交时间,默认为当前时间 V2版参数包括: targets 目标环节信息(环节id、显示名、接收人),采用Map<sequenceFlowId, List<Map>>, 一个路径可对应多个环节, key: sequenceFlowId(提交路径的id),如果从网关提交到一个环节的时候为网关出口路径Id; 如果是父流程提交进入子流程则路径为子流程内部开始事件指向首环节的路径Id; 如子流程有多条入口路径,则必须带有参数sequenceFlowIdIn(子流程入口路径id); 如是网关后跳级路径,则必须带有参数sequenceFlowIdIn(网关入口路径id)。 value: Map 列表 每个Map的key包含:id(环节ID,可选)、nodeDisplayName(环节显示名,可选)、actors(办理人身份对象列表)、 sequenceFlowIdIn(入口路径id,可选;网关入口路径id或子流程入口路径id,此参数不存在会自动计算)。 targets形式例如: [sid-1AB4D6D7-88A4-45FE-B087-3EC0DFD85DD9:[[nodeDisplayName:null, sequenceFlowIdIn: sid-B09A7E20-18C2-4613-A18B-B7602482F160, actors:[李四]]]] taskGroup 同前 readers 同前 isTimeout 同前 V1版参数包括: sequenceFlow/sequenceFlows 提交路径ID/名称列表,如果都为空,则自动计算第一条有效路径。注意调用时需加上名称前缀,如“送XXXXXX”。 nodeDisplayName/nodeDisplayNames 下一环节的显示名/显示名列表,默认为null;与sequenceFlow/sequenceFlows一一对应。 当targets参数存在时,此参数不起作用。 actors 接收人身份,如果参数sequenceFlows有效,则actors应该为一一对应的二维列表;否则为一维列表 当targets参数存在时,此参数不起作用。 taskGroup 同前 readers 同前 isTimeout 同前
子流程提交回父流程,激活父流程
emp - 提交的员工processInst - 子流程实例task - 提交的任务,属于子流程实例sf - 子流程出口路径对象actors - 办理人列表options.now - 提交时间,默认为当前时间options.nodeDisplayName - 下一环节的显示名强行结束流程,将流程设置成终止状态,并从流程日志中抹去当前办理人的信息
更新流程示例的可映射属性
包括 bropen.bpm.process.XXX.mapping 中定义的各个属性,如文档编号、密集、紧急程度、实际起草人、ext1等
processInst - 流程实例doc - 实体bean重新封装任务的可用路径(getAvailableSequenceFlows 的结果),以及相关信息,以便前台使用。
结构大致如下:[
proc: [
id: "xxx",
actions: [:]
],
task: [
// 当前任务所在环节的 id 等节点属性
id: "环节ID",
// 可用出口路径列表
outsfs: [
[
id: "路径ID",
// 路径所指向的节点:
// 可能为网关、子流程节点、环节、结束事件;如果是退回起草等虚路径,则为对应的常量,如 SequenceFlow.TO_DRAFTER
to: [
id: "节点ID",
name: "节点名称",
class: "节点类型",
// 如果是网关或子流程节点,则继续计算其出口路径列表,结构同上
outsfs: [
[
id: "xxx",
class: "路径类型",
// 网关/子流程的入口路径:冗余数据,等于上上级的路径ID
inputsfId: "abc"
],
...
],
// 如果是子流程,则关联子流程开始事件指向首环节的可用路径列表,结构同上
sprocId: "子流程对象的ID",
startsfs: [...],
...
],
...
],
...
]
]
]