Activiti获取某个流程实例的FormKey

来源:互联网 发布:怎样开通手机淘宝 编辑:程序博客网 时间:2024/06/02 02:20
通过任务id获得formkey

ProcessDefinitionEntity -->TaskDefinition -->DefaultFormHandler -->Expression.getExpressionText() 



用处是用户点击办理任务时可以跳出业务信息的页面,而页面的位置则存放在对应节点的form key中。

HistoricTaskInstance -->ProcessDefinitionEntity -->TaskDefinition-->DefaultFormHandler -->Expression -->Expression.getExpressionText() ;



当前任务是同时存在 ACT_RU_TASK 和 ACT_HI_TASKINST
/** *  *  @CreateUser:xxxx *  @ReturnType:String *  @param taskId *  @param businessEventId *  @return *  @CreateDate:2014-6-10下午7:49:32 *  @UseFor    :根据任务id获得form key值 */public String getBusinessInfoUrl(String taskId, String businessEventId) {String url = "";String businessKey = "";// 获得任务对象HistoricTaskInstance taskInstance = (HistoricTaskInstance) historyService.createHistoricTaskInstanceQuery().taskId(taskId).singleResult();// 判断当前任务Task是否为空if (taskInstance != null) {url = getTaskFormData(taskId);if (url == null || "".equals(url)) {String processDefinitionId = taskInstance.getProcessDefinitionId();url = getProcessDefinitionFormData(processDefinitionId);}// 业务id 即eventidbusinessKey = ((HistoricProcessInstance) historyService.createHistoricProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult()).getBusinessKey();} else {HistoricProcessInstance historicProcessInstance = (HistoricProcessInstance) historyService.createHistoricProcessInstanceQuery().processInstanceBusinessKey(businessEventId).singleResult();if (historicProcessInstance != null) {url = getProcessDefinitionFormData(historicProcessInstance.getProcessDefinitionId());businessKey = businessEventId;}}// 拼接URL 把eventid接到url上面 url的格式是 xx.htm?eventid=return (new StringBuilder(String.valueOf(url))).append(businessKey).toString();} /** *  *  @CreateUser:xxxx *  @ReturnType:String *  @param taskId *  @return *  @CreateDate:2014-6-10下午5:21:27 *  @UseFor    :根据任务iD获得form Key 值 */private String getTaskFormData(String taskId) {//表单key值String formkey = "";//获取需查询的任务实例HistoricTaskInstance task = (HistoricTaskInstance) historyService.createHistoricTaskInstanceQuery().taskId(taskId).singleResult();//获取流程定义对象ProcessDefinitionEntity processDefinition = getProcessDefinitionEntityByProcessDefinitionId(task.getProcessDefinitionId());TaskDefinition taskDefinition = (TaskDefinition) processDefinition.getTaskDefinitions().get(task.getTaskDefinitionKey());DefaultFormHandler defaultFormHandler = (DefaultFormHandler) taskDefinition.getTaskFormHandler();Expression expression = defaultFormHandler.getFormKey();if (expression != null)formkey = expression.getExpressionText();return formkey;}/** *  *  @CreateUser:xxxx *  @ReturnType:ProcessDefinitionEntity *  @param processDefinitionId *  @return *  @CreateDate:2014-12-10下午7:39:01 *  @UseFor    :获得 ProcessDefinitionEntity */private ProcessDefinitionEntity getProcessDefinitionEntityByProcessDefinitionId(String processDefinitionId) {ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(processDefinitionId);return processDefinitionEntity;}/** *  *  @CreateUser:xxxx *  @ReturnType:String *  @param processDefinitionId *  @return *  @CreateDate:2014-12-10下午7:38:46 *  @UseFor    :获得第一个节点的Form key */private String getProcessDefinitionFormData(String processDefinitionId) {StartFormData startFormData = formService.getStartFormData(processDefinitionId);return startFormData.getFormKey();}
0 1