`

Activiti获取某个流程实例的FormKey

 
阅读更多
通过任务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 即eventid
			businessKey = ((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();
	}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    activiti流程说明

    可以通过Form Key与流程中的表单字段关联,实现数据的双向绑定。 6. **变量管理**:在流程执行过程中,可以设置和获取流程变量,这些变量可以用来传递信息和控制流程的走向。 7. **监听器与事件**:Activiti支持...

    activiti5.6一个小例子

    2. 部署完成后,可以通过流程定义Key(如“myprocess”)查询到对应的流程定义实例。 五、流程启动 1. 调用Activiti API启动流程实例,这将根据流程定义创建一个新的运行实例。 2. 在启动时,可以传递变量(如...

    Activiti-develop_activiti5.22下载_运行流_

    - **启动流程实例**:通过FormKey或BusinessKey启动流程实例。 - **处理任务**:TaskService可用于查询当前用户的任务,并完成或委托任务。 - **监控流程**:HistoryService提供对流程实例的历史记录,用于跟踪和...

    springboot+activiti流程设计

    4. **表单集成**:Activiti 支持与表单系统的集成,可以通过 Form Key 在流程图中关联表单,实现数据的输入和展示。 **四、优化与扩展** 1. **自定义服务任务**:通过实现 `JavaDelegate` 接口,可以创建自定义的...

    Spring boot整合activiti工作流引擎

    111、前端页面与用户任务通过formkey进行关联,办理任务时,通过获取formkey值展示对应的前端页面。 1111、整合流程图在线设计器,设计后需要发布,完成流程的部署。 11111、如需添加新的流程,设计好后还需编写前后...

    基于Spring boot+activiti+mysql实现的工作流引擎 【含源码+数据库】

    前端页面与用户任务通过formkey进行关联,办理任务时,通过获取formkey值展示对应的前端页面。 整合流程图在线设计器,设计后需要发布,完成流程的部署。 如需添加新的流程,设计好后还需编写前后端代码完成业务逻辑...

    Activiti Modeler java参考代码.rar

    当需要启动一个流程实例时,可以调用`RuntimeService`的`startProcessInstanceByKey`方法,传入流程定义的key作为参数。这将触发流程的执行,并创建一个新的流程实例。 5. **处理任务** Activiti中的任务处理通常...

    activiti文档

    - **表单集成**:使用表单(如Form Key)与流程交互,收集和展示数据。 通过阅读"activiti实例开发.doc",你可以看到具体的编程示例,如何在Java代码中操作Activiti,以及如何设计和运行一个实际的业务流程。这将...

    ActivitiDemo

    10. **流程审计和历史追踪(History and Auditing)**:Activiti 提供了完整的审计功能,记录了流程实例的完整生命周期。`HistoryService` 可以用来查询历史流程实例、任务和变量,这对于分析和优化流程非常有用。 ...

    Activiti6.0教程例子下载

    7. HistoryService: HistoryService用于获取正在运行或已经完成的流程实例的信息,与RuntimeService中获取的流程信息不同,历史信息包含已经持久化存储的永久信息,并已经被针对查询优化。 现在至少要知道有这些对象...

    Activiti-develop

    - 启动流程实例,`RuntimeService.startProcessInstanceByKey()` 方法传入流程定义的 key。 - 处理用户任务,`TaskService` 提供的接口如 `createTaskQuery()` 和 `complete(taskId)`。 6. **监听器与事件** - ...

    activiti6.0工作流配置(中文)

    1. 流程实例的启动:通过Runtime Service启动一个流程实例,指定流程定义的关键信息,如流程定义Key和业务键。 2. 任务分配与处理:利用Task Service获取当前用户的任务列表,实现任务的领取和完成,理解委托、定时...

    Myecise插件activiti

    5. **表单集成**:Activiti 可以与各种表单系统集成,如通过 FormKey 关联自定义表单,提供丰富的用户交互体验。 6. **监控与报表**:Activiti 提供了丰富的监控工具,包括流程实例统计、活动实例统计、任务统计等...

    activiti学习例子

    2. **流程启动**:示例代码可能演示了如何使用Activiti API启动新的流程实例,如 "StartProcess.java",它会调用`runtimeService.startProcessInstanceByKey()`方法启动一个由流程定义Key标识的流程。 3. **任务...

    activiti节点说明

    - **Form Key**:用于指定一个外置表单的URL,格式通常为`.form`或`.html`等。这种类型的启动事件常用于收集流程启动时所需的信息。 - **定时启动事件**:这类启动事件可以根据预设的时间条件自动触发流程实例的...

    Activiti23张表详解

    - `FORM_KEY_`: 表单键。 - `CATEGORY_`: 类别。 - `TENANT_ID_`: 租户ID。 - **索引说明**:针对`PROC_INST_ID_`、`PROC_DEF_ID_`和`START_TIME_`创建索引。 ##### 2.10 历史变量表 (act_hi_varinst) - **简要...

    activiti表结构

    - **INDEX HI_PROC_INST_BUS**: 对 BUSINESS_KEY_ 字段建立索引,方便按业务键查询流程实例。 ##### 9. 历史任务实例表 (ACT_HI_TASKINST) **9.1 简要描述** - **用途**: 存储历史任务实例的信息。 **9.2 表结构...

    Activiti数据库文档的整理

    Activiti是一款开源的工作流引擎,用于简化业务流程的实现和管理。它支持BPMN 2.0标准,并且提供了强大的API来支持流程的设计、部署、执行以及监控等功能。Activiti能够很好地与Spring框架集成,这使得它成为了很多...

    activiti将用户输入框修改为弹出选择框

    1. **设计流程定义**:在流程定义中,你需要为用户任务指定一个表单键(formKey)。这个键用于关联特定的表单。在Activiti的工作流设计器中,你可以直接编辑XML定义,或者使用图形化界面添加用户任务,并设置表单键...

    activiti5.22数据库设计.doc

    - **FORM_KEY_**:表单键。 - **CATEGORY_**:类别。 - **TENANT_ID_**:租户 ID。 11. **ACT_HI_VARINST**:此表用于存储历史变量实例信息。 - **字段说明**: - **ID_**:变量实例 ID。 - **PROC_INST_ID_*...

Global site tag (gtag.js) - Google Analytics