/** * Copyright 1996-2014 FoxBPM ORG. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * @author kenshin * @author ych */ package org.foxbpm.engine; import java.util.Collection; import java.util.List; import java.util.Map; import org.foxbpm.engine.impl.entity.IdentityLinkEntity; import org.foxbpm.engine.impl.entity.ProcessOperatingEntity; import org.foxbpm.engine.impl.entity.TaskEntity; import org.foxbpm.engine.impl.task.command.ExpandTaskCommand; import org.foxbpm.engine.query.NativeTaskQuery; import org.foxbpm.engine.task.Task; import org.foxbpm.engine.task.TaskCommand; import org.foxbpm.engine.task.TaskQuery; import org.foxbpm.kernel.process.KernelFlowNode; public interface TaskService { /** * 创建任务 * @return */ TaskEntity newTask(); /** * 创建带taskId的任务 * @param taskId 任务编号 * @return */ TaskEntity newTask(String taskId); /** * 查询任务 * @param taskId 任务编号 * @return */ Task findTask(String taskId); /** * 保存任务 * @param task */ void saveTask(Task task); /** * 删除任务 * <p>默认级联删除任务相关所有信息</p> * @param taskId 任务编号 */ void deleteTask(String taskId); /** * 循环删除任务 * <p>默认级联删除任务相关所有信息</p> * @param taskIds 任务编号集合 */ void deleteTasks(Collection<String> taskIds); /** * 删除任务 * @param taskId 任务编号 * @param cascade 是否级联删除 */ void deleteTask(String taskId, boolean cascade); /** * 循环删除任务 * @param taskIds 任务编号集合 * @param cascade 是否级联删除 */ void deleteTasks(Collection<String> taskIds, boolean cascade); /** * 领取任务 * @param taskId 任务编号 * @param userId 处理人编号 * @exception FoxbpmBizException * 如果任务已经被领取、任务被暂停,任务已结束时会抛出异常 */ void claim(String taskId, String userId); /** * <p>释放任务,将自己领取的任务释放</p> * <p>处理:将assignee和claimTime设置为null</p> * @param taskId 任务编号 * @exception FoxbpmBizException * <p>如果当前引擎操作人不是assgine,则抛出异常(不能释放别人的任务或共享任务)</p> * <p>如果任务没有被领取,任务被暂停,任务已结束时会抛出异常(不能处理暂停,已结束任务)</p> * <p>如果任务没有其他共享用户时,会抛出异常(不能释放独占任务)</p> */ void unclaim(String taskId); /** * <p>完成任务</p> * <p>直接complete任务,不会执行command命令,也不会执行表达式</p> * <p>结束任务,如果是多实例,则判断是否满足完成表达式,然后决定是否将令牌向下驱动</p> * <p>与runtimeService.signal(tokenId)的区别:本方法是完成任务,判断是否驱动令牌,后者直接驱动令牌向下</p> * @param taskId 任务编号 * @exception FoxbpmBizException * 如果任务没有被领取,任务被暂停,任务已结束时会抛出异常(不能处理暂停,已结束任务) */ void complete(String taskId); /** * <p>完成任务</p> * <p>直接complete任务,不会执行command命令,也不会执行表达式</p> * <p>结束任务,如果是多实例,则判断是否满足完成表达式,然后决定是否将令牌向下驱动</p> * @param taskId 任务编号 * @param transientVariables 瞬态变量 * @param persistenceVariables 持久化变量 * @exception FoxbpmBizException * 如果任务没有被领取,任务被暂停,任务已结束时会抛出异常(不能处理暂停,已结束任务) */ void complete(String taskId,Map<String, Object> transientVariables,Map<String, Object> persistenceVariables); /** * 自定义扩展方式完成任务的处理命令调用的方法 * * @param expandTaskCommand * @param classReturn * @return */ <T> T expandTaskComplete(ExpandTaskCommand expandTaskCommand, T classReturn); /** * 获取任务节点上的toolbar * @param taskId * @return 任务命令集合 */ List<TaskCommand> getTaskCommandByTaskId(String taskId); /** * <p>获取提交节点上的toolbar</p> * <p>用于流程开始界面上,此时实例未生成,取定义上的toolbar配置</p> * @param key 流程定义key,会根据key去当前流程定义的最新版本key,因为启动流程总是启动最新版本的流程 * @return 任务命令集合 */ List<TaskCommand> getSubTaskCommandByKey(String Key); /** * 获取任务命令信息 * @param taskId 任务命令 * @param isProcessTracking 是否流程追踪,流程追踪状态下,会存在追回等事后操作型命令 * @return 任务命令集合 */ List<TaskCommand> getTaskCommandByTaskId(String taskId,boolean isProcessTracking); /** * 创建任务查询对象 * @return */ TaskQuery createTaskQuery(); /** * 创建自定义查询对象,自己拼接sql,参数等信息 * @return */ NativeTaskQuery createNativeTaskQuery(); /** * 获取可退回的节点 * <p>任务已经走过的节点,不重复</p> * @param taskId 任务编号 * @return */ List<KernelFlowNode> getRollbackFlowNode(String taskId); /** * 获取可退回的任务 * <p>如果有分支,则退回自己走的分支,不管兄弟分支</p> * @param taskId * @return */ List<Task> getRollbackTasks(String taskId); /** * 获取任务的操作、评论等信息 * @param taskId * @return */ List<ProcessOperatingEntity> getTaskOperations(String taskId); /** * 获取任务的候选人 * @param taskId * @return */ List<IdentityLinkEntity> getIdentityLinkByTaskId(String taskId); /** * 追回任务 * 此命令要求: * 1.当前登陆人必须在目标节点(targetNodeId)处理过任务,处理多次则默认取最近的一条 * 2.主令牌经过的节点才能追回,也就是说主线上的节点 * 3.分支时,只有同一条分支上的节点之间才能追回操作 * 不满足上述条件时,则会抛出相应异常信息 * @param taskId 要追回的任务编号 * @param targetNodeId 要追回到的目标节点编号 * */ void recoverTask(String taskId,String targetNodeId); }