表单功能

发表时间:2018-05-05 16:57:28 浏览量( 13 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

    Activiti和设计非常好,表单和流程是分开的,我们前面的示例中并没有使用表单,但是我们也可以添加表单进去。在Activiti中总共有三种表单,动态表单,普通表单和外置表单,你可以使用表单和你的业务系统结合,这样可以满足大部分的业务场景。

一、设计表单

表单的可视化设计非常简单。如下图:

attcontent/f3dbf554-5f96-425f-97cb-343f46a4eb98.png

    variable的值会最终保存再流程示例中的对应的名字。最下面还有可读,可写,必填等约束。我们可以再请假流程的第一步就可以把这些值设计好。下面给每一个节点都设计了对应的表单。

二、使用activiti-webapp-explorer2启动流程

    使用activiti-exploer运行我们的带表单的流程。启动activiti-webapp-explorer2项目,然后把我们刚才设计的流程图上传到项目中,然后启动这个流程就可以看到相关的表单内容了。

attcontent/e34384e5-561a-4a80-8306-79da2f1dd036.png


    启动流程

attcontent/8f581c9c-44f0-409a-b5d1-e8141a6e5ee1.png

    然后就可以看到我们刚才设计的表单了

attcontent/fcab4159-6068-40c6-9233-b16308d36b99.png


三、自己编写一个表单解析工具。

   当然我们也是可以使用代码来启动这个流程的。这时候需要使用formService操作表单就可以了,其他和之前使用taskService是一样的。

	/**
	 * 启动流程
	 * 
	 * @throws Exception
	 */
	@Test
	public void testFormStart() throws Exception {

		String loginUserId = "liubao";

		// 业务数据
		Map<String, String> variables = new HashMap<String, String>();
		variables.put("days", "20");
		variables.put("projectManager", "liuProjectManager");
		variables.put("reason", "请假原因");
		variables.put("startTime", "2017-07-01");
		variables.put("endTime", "2017-07-21");

		ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
				.processDefinitionName("leaveForm").latestVersion().singleResult();

		System.out.println(processDefinition.getId());
		
		identityService.setAuthenticatedUserId(loginUserId);
		ProcessInstance processInstance = formService.submitStartFormData(processDefinition.getId(), variables);

		System.out.println("processInstanceId:" + processInstance.getId());
		assertNotNull(processInstance.getId());

	}

完成任务

	@Test
	public void testComTask1() throws Exception {

		String taskId = "20016";
		Map<String, String> variables = new HashMap<String, String>();
		variables.put("deptManager", "liuDeptManager");
		variables.put("apply", "true");
		// 使用表单完成任务
		formService.submitTaskFormData(taskId, variables);

	}

我们可以查看表单和变量的历史数据库的

	@Test
	public void testGetHisFormVari() throws Exception {

		String processInstanceId = "20001";

		List<HistoricDetail> historicDetails = historyService.createHistoricDetailQuery()
				.processInstanceId(processInstanceId).list();

		for (HistoricDetail detail : historicDetails) {

			if (detail instanceof HistoricFormProperty) {
				HistoricFormProperty formProperty = (HistoricFormProperty) detail;

				System.out.println(formProperty.getExecutionId() + ":" + formProperty.getTaskId() + ":"
						+ formProperty.getPropertyId() + ":" + formProperty.getPropertyValue());

			} else if (detail instanceof HistoricVariableUpdate) {
				HistoricVariableUpdate variableProperty = (HistoricVariableUpdate) detail;

				System.out.println(variableProperty.getExecutionId());
				System.out.print(":" + variableProperty.getTaskId());
				System.err.print(":" + variableProperty.getVariableName());
				System.out.print(":" + variableProperty.getValue());
			}
			

		}

	}