package com.norteksoft.product.api;
import java.util.Map;
import com.norteksoft.wf.base.enumeration.CompleteTaskTipType;
import com.norteksoft.wf.engine.client.FormFlowable;
import com.norteksoft.product.api.entity.WorkflowInstance;
/**
* 公开提供给用户使用的工作流实例的api
* @author wurong
*
*/
public interface WorkflowInstanceService {
/**
* 封装urlMap时,表单查看url的key。
*@see WorkflowInstanceService#submitInstance(String, FormFlowable, Map)
*/
public final static String WF_FORM_URL = "workflow_form_url";
/**
* 手动结束流程
* @param entity 业务实体
*/
public void endInstance(FormFlowable entity);
/**
* 用户保存实体后,根据流程定义名称来启动流程,如果流程启动,则不做任何处理直接返回
* @param definitionCode 流程定义编号
* @return entity 业务实体
*/
public void startInstance(String definitionCode, FormFlowable entity);
/**
* 用户保存实体后,根据流程定义名称来启动流程,如果流程启动,则不做任何处理直接返回
* @param definitionCode 流程定义编号
* @param definitionVersion 流程定义版本号
* @return entity 业务实体
*
*/
public void startInstance(String definitionCode,Integer definitionVersion, FormFlowable entity);
/**
* 用户保存实体后,根据流程定义id来启动流程,如果流程启动,则不做任何处理直接返回
* @param workflowDefinitionId 流程定义id
* @return entity 业务实体
*/
public void startInstance(Long definitionId,FormFlowable entity);
/**
* 提交流程
* 提交前用户保存自己的实体;
* 如果流程没有启动,则启动流程并提交
* 若流程已经在保存时启动了,则只提交流程
* @param definitionCode 流程定义编号
* @param entity 业务实体
* @return CompleteTaskTipType {@link com.norteksoft.wf.base.enumeration.CompleteTaskTipType}
*
*/
public CompleteTaskTipType submitInstance(String definitionCode, FormFlowable entity);
/**
* 提交流程
* 提交前用户保存自己的实体;
* 如果流程没有启动,则启动流程并提交
* 若流程已经在保存时启动了,则只提交流程
* @param definitionCode 流程定义编号
* @param definitionVersion 流程定义版本
* @param entity 业务实体
* @return CompleteTaskTipType {@link com.norteksoft.wf.base.enumeration.CompleteTaskTipType}
*
*/
public CompleteTaskTipType submitInstance(String definitionCode,Integer definitionVersion, FormFlowable entity);
/**
* 提交流程
* 提交前用户保存自己的实体;
* 如果流程没有启动,则启动流程并提交
* 若流程已经在保存时启动了,则只提交流程
* @param definitionId 工作流定义id
* @param entity 业务实体
* @param urlMap
* @return CompleteTaskTipType {@link com.norteksoft.wf.base.enumeration.CompleteTaskTipType}
*/
public CompleteTaskTipType submitInstance(Long definitionId, FormFlowable entity);
/**
* 自定义表单 用户保存实体后,根据流程定义名称来启动流程,如果流程启动,则不做任何处理直接返回
* @param definitionCode 流程定义编号
* @return Map {dataId:,instanceId:}
*/
public Map startCustomInstance(String definitionCode);
/**
* 自定义表单 用户保存实体后,根据流程定义名称来启动流程,如果流程启动,则不做任何处理直接返回
* @param definitionCode 流程定义编号
* @param definitionVersion 流程定义版本号
* @return Map {dataId:,instanceId:}
*
*/
public Map startCustomInstance(String definitionCode,Integer definitionVersion);
/**
* 自定义表单 用户保存实体后,根据流程定义id来启动流程,如果流程启动,则不做任何处理直接返回
* @param workflowDefinitionId 流程定义id
* @return Map {dataId:,instanceId:}
*/
public Map startCustomInstance(Long definitionId);
/**
* 自定义表单 提交流程
* 提交前用户保存自己的实体;
* 如果流程没有启动,则启动流程并提交
* 若流程已经在保存时启动了,则只提交流程
* @param definitionCode 流程定义编号
* @param entity 业务实体
* @return map {dataId:,instanceId:,result:CompleteTaskTipType}
*
*/
public Map submitCustomInstance(String definitionCode);
/**
* 自定义表单 提交流程
* 提交前用户保存自己的实体;
* 如果流程没有启动,则启动流程并提交
* 若流程已经在保存时启动了,则只提交流程
* @param definitionCode 流程定义编号
* @param definitionVersion 流程定义版本
* @param entity 业务实体
* @return map {dataId:,instanceId:,result:CompleteTaskTipType}
*
*/
public Map submitCustomInstance(String definitionCode,Integer definitionVersion);
/**
* 自定义表单 提交流程
* 提交前用户保存自己的实体;
* 如果流程没有启动,则启动流程并提交
* 若流程已经在保存时启动了,则只提交流程
* @param definitionId 工作流定义id
* @param entity 业务实体
* @param urlMap
* @return map {dataId:,instanceId:,result:CompleteTaskTipType}
*/
public Map submitCustomInstance(Long definitionId);
/**
* 提交流程
* 提交前用户保存自己的实体;
* 如果流程没有启动,则启动流程并提交
* 若流程已经在保存时启动了,则只提交流程
* @param definitionName 流程定义名字
* @param entity 业务实体
* @param urlMap 封装了url的Map .urlMap中了流程中任务办理页面的url,供task系统打开该url来办理任务;还有表单的查看页面的url,供流程监控中打开表单。
* 办理页面的url,要以流程定义名称为key,url为值。如果有子流程,子流程的url和父流程的url封装方法一样。
* 表单查看页面的url,要以{@link WorkflowInstanceService#WF_FORM_URL}为key,url为值。实体的id会在打开url时,会拼接在url最后。
* @return CompleteTaskTipType {@link com.norteksoft.wf.base.enumeration.CompleteTaskTipType}
*@deprecated
* 替换为 <code>submitInstance(String definitionName, FormFlowable entity)</code>;原来urlMap中的参数可以在流程定义中流程属性的参数设置中设置。
*/
@Deprecated
public CompleteTaskTipType submitInstance(String definitionName, FormFlowable entity, Map<String,String> urlMap);
/**
* 提交流程
* 提交前用户保存自己的实体;
* 如果流程没有启动,则启动流程并提交
* 若流程已经在保存时启动了,则只提交流程
* @param workflowDefinitionId 工作流定义id
* @param entity 业务实体
* @param urlMap
* @return CompleteTaskTipType {@link com.norteksoft.wf.base.enumeration.CompleteTaskTipType}
*@deprecated
* 替换为 <code>submitInstance(Long workflowDefinitionId, FormFlowable entity)</code>;原来urlMap中的参数可以在流程定义中流程属性的参数设置中设置。
*/
@Deprecated
public CompleteTaskTipType submitInstance(Long definitionId, FormFlowable entity, Map<String,String> urlMap);
/**
* 删除流程实例,(调用该方法删除工作流实例时,调用者不用删除自己的数据,只需要实现接口FormFlowableDeleteInterface {@link com.norteksoft.wf.engine.client.FormFlowableDeleteInterface}), 然后将实现类设置到流程定义->流程属性->参数设置中的删除流程实例设置执行方法中
* @param entity 业务实体
*/
public void deleteInstance(FormFlowable entity);
/**
* 自定义表单 删除流程实例,(调用该方法删除工作流实例时,调用者不用删除自己的数据,只需要实现接口FormFlowableDeleteInterface {@link com.norteksoft.wf.engine.client.FormFlowableDeleteInterface}), 然后将实现类设置到流程定义->流程属性->参数设置中的删除流程实例设置执行方法中
* @param entity 业务实体
*/
public void deleteInstance(String instanceId);
/**
* 在环节办理时,当前环节办理人是否有权删除流程实例
* @param entity 业务实体
* @param taskName 当前环节名称
* @return true 为可以,false为不可以
*/
public boolean canDeleteInstanceInTask(FormFlowable entity, String taskName);
/**
* 自定义表单 在环节办理时,当前环节办理人是否有权删除流程实例
* @param instanceId 流程实例id
* @param taskName 当前环节名称
* @return true 为可以,false为不可以
*/
public boolean canDeleteInstanceInTask(String instanceId, String taskName);
/**
* 流程是否结束
* @param entity 业务实体
* @return
*/
public boolean isInstanceComplete(FormFlowable entity);
/**
* 根据实例id查询流程实例
* @param workflowId 流程实例的唯一标识
* @return 流程实例
*/
public WorkflowInstance getInstance(String workflowId);
}