`

Activiti自我总结

 
阅读更多
Spring代码
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
        <property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:jasgis" />
        <property name="username" value="zsmseip" />
        <property name="password" value="a111111" />
    </bean>
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- Activiti 配置  begin-->
    <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
        <property name="dataSource" ref="dataSource" />
        <property name="transactionManager" ref="transactionManager" />
        <property name="databaseSchemaUpdate" value="true" />
        <property name="jobExecutorActivate" value="false" />
        <property name="history" value="full" />
        <property name="processDefinitionCacheLimit" value="10" />
        <!-- 流程图节点乱码问题配置 -->
        <property name="activityFontName" value="微软雅黑"/>
    </bean>
    <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
        <property name="processEngineConfiguration" ref="processEngineConfiguration" />
    </bean>
    <bean id="repositoryService" factory-bean="processEngine"
        factory-method="getRepositoryService" />
    <bean id="runtimeService" factory-bean="processEngine"
        factory-method="getRuntimeService" />
    <bean id="formService" factory-bean="processEngine"
        factory-method="getFormService" />
    <bean id="identityService" factory-bean="processEngine"
        factory-method="getIdentityService" />
    <bean id="taskService" factory-bean="processEngine"
        factory-method="getTaskService" />
    <bean id="historyService" factory-bean="processEngine"
        factory-method="getHistoryService" />
    <bean id="managementService" factory-bean="processEngine"
        factory-method="getManagementService" />
    <!-- Activiti 配置 end -->
</beans>


Jave代码
/**
 * 
 */
package com.activiti;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.activiti.bpmn.model.BpmnModel;
import org.activiti.engine.FormService;
import org.activiti.engine.HistoryService;
import org.activiti.engine.IdentityService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.history.HistoricActivityInstanceQuery;
import org.activiti.engine.history.HistoricDetail;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.history.HistoricVariableInstance;
import org.activiti.engine.history.HistoricVariableUpdate;
import org.activiti.engine.impl.ProcessEngineImpl;
import org.activiti.engine.impl.RepositoryServiceImpl;
import org.activiti.engine.impl.bpmn.diagram.ProcessDiagramGenerator;
import org.activiti.engine.impl.context.Context;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.pvm.PvmTransition;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.impl.pvm.process.TransitionImpl;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 
 * @author Test
 * @createDate 2014-6-1上午10:08:05
 * @className TestFinancial.java
 * @useFor
 */
public class TestFinancial {

	private RuntimeService runtimeService;
	private IdentityService identityService;
	private RepositoryService repositoryService;
	private FormService formService;
	private TaskService taskService;
	private HistoryService historyService;
	ProcessEngine processEngine;

	/**
	 * 
	 * @author Test
	 * @createDate 2014-6-1下午10:34:26
	 * @params
	 * @return void
	 * @useFor 初始化ProcessEngine和重要的service
	 */
	@Before
	public void initActiviti() {
		// 加载spring配置
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		// 流程引擎
		processEngine = (ProcessEngine) ctx.getBean("processEngine");
		// 发布流程
		repositoryService = processEngine.getRepositoryService();
		// 获得流程实例和运行实例(Execution)
		runtimeService = (RuntimeService) ctx.getBean("runtimeService");
		taskService = (TaskService) ctx.getBean("taskService");
		identityService = (IdentityService) ctx.getBean("identityService");
		formService = processEngine.getFormService();
		deploy("diagrams/ActivitiTest.bpmn");
		historyService = (HistoryService) ctx.getBean("historyService");
	}

	/**
	 * 
	 * @author Test
	 * @createDate 2014-6-1下午10:32:49
	 * @params
	 * @return void
	 * @useFor 部署流程
	 */
	public void deploy(String srcName) {
		// Deploy the process definition
		repositoryService.createDeployment().addClasspathResource(srcName)
				.deploy();
	}

	/**
	 * 
	 * @author Test
	 * @createDate 2014-6-1下午10:38:29
	 * @params keyName 表示流程图ID businessID是业务主键ID
	 * @return ProcessInstance
	 * @useFor 开启流程
	 */
	public ProcessInstance startProcessInstanceByKey(String keyName,
			String businessID) {
		return runtimeService.startProcessInstanceByKey(keyName, businessID);
	}

	/**
	 * 
	 * @author Test
	 * @createDate 2014-6-1下午10:42:36
	 * @params 指定用户ID
	 * @return List<Task>
	 * @useFor 获得指定用户的任务集合 taskAssignee只是针对 Assignee的对candidate不适用
	 */
	public List<Task> getTaskFromAssignee(String assigneeName) {
		List<Task> result = new ArrayList<Task>();
		result = taskService.createTaskQuery().taskAssignee(assigneeName)
				.list();
		return result;
	}

	/**
	 * 
	 * @author Test
	 * @createDate 2014-6-2上午10:13:07
	 * @params
	 * @return List<Task>
	 * @useFor 查询委托组的任务列表
	 */
	public List<Task> getTaskFromCandidateGroup(String groupName) {
		return taskService.createTaskQuery().taskCandidateGroup(groupName)
				.list();
	}

	/**
	 * 
	 * @author Test
	 * @createDate 2014-6-2上午10:16:32
	 * @params
	 * @return List<Task>
	 * @useFor 查询委托用户的任务列表 只能对candidate适用 用户在某个组下也适用
	 */
	public List<Task> getTaskFromCandidateUser(String userName) {
		return taskService.createTaskQuery().taskCandidateUser(userName).list();
	}

	/**
	 * 
	 * @author test
	 * @createDate 2014-6-8下午05:46:34
	 * @params
	 * @return byte[]
	 * @useFor 获得流程图加亮
	 */
	public byte[] getActivitiPngBytes(ProcessInstance processInstance)
			throws IOException {
		byte[] result = null;
		try {
			BpmnModel bpmnModel = repositoryService
					.getBpmnModel(processInstance.getProcessDefinitionId());
			List<String> activeActivityIds = runtimeService
					.getActiveActivityIds(processInstance.getId());
			ProcessEngineImpl defaultProcessEngine = (ProcessEngineImpl) ProcessEngines
					.getDefaultProcessEngine();
			Context.setProcessEngineConfiguration(defaultProcessEngine
					.getProcessEngineConfiguration());
			/** 得到图片输出流 **/
			InputStream imageStream = ProcessDiagramGenerator.generateDiagram(
					bpmnModel, "png", activeActivityIds);
			result = new byte[imageStream.available()];
			imageStream.read(result);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * 
	 * @author Test
	 * @createDate 2014-6-2下午12:19:00
	 * @params
	 * @return void
	 * @useFor 流程圖保存到本地
	 */
	public void loadActivitiPng(byte[] srcPng, String locationStr) {
		File file = null;
		OutputStream out = null;
		file = new File(locationStr);
		try {
			out = new FileOutputStream(file);
			out.write(srcPng);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 
	 * @author Test
	 * @createDate 2014-6-2下午06:11:48
	 * @params 发起人名称
	 * @return void
	 * @useFor 设置发起人
	 */
	public void startProcessBy(String userName) {
		identityService.setAuthenticatedUserId("Test");
	}

	/**
	 * 
	 * @author Test
	 * @createDate 2014-6-2下午06:16:18
	 * @params
	 * @return List
	 * @useFor 查看某个人的开启过的流程
	 */
	public List<HistoricProcessInstance> getProcinstListStartBy(String userName) {
		List<HistoricProcessInstance> hpis = historyService
				.createHistoricProcessInstanceQuery().startedBy(userName)
				.list();
		return hpis;
	}

	public String getVariableNameAndValueFromProcIns(String processInsId,
			String keyName) {
		List<HistoricVariableInstance> list = historyService
				.createHistoricVariableInstanceQuery().processInstanceId(
						processInsId).list();
		for (HistoricVariableInstance variableInstance : list) {
			System.out.println("variable: "
					+ variableInstance.getVariableName() + " = "
					+ variableInstance.getValue());

			if (keyName.equals("variableInstance.getVariableName()")) {
				return variableInstance.getValue().toString();
			}
		}
		return "";
	}

	/**
	 * 
	 * @author Test
	 * @createDate 2014-6-1下午10:39:05
	 * @params
	 * @return void
	 * @useFor 测试流程
	 */
	@Test
	public void activitiTest() {

		// 流程起始参数,会保存在流程实例的变量中
		Map<String, Object> map = new HashMap<String, Object>();
		// 设置发起人
		startProcessBy("Test");
		// 开启流程并传参数
		ProcessInstance processInstance = startProcessInstanceByKey(
				"myProcess", "ddddaaddd");
		// 获得流程实例中的任务
		List<Task> tasks = getTaskQueryByUserid("456").list();
		System.out.println("456ID的任务个数:" + tasks.size());
		for (Task task : tasks) {
			// claim调用claim的用户将变成该任务的所有人,其它用户将不能claim与complete该任务
			// taskService.claim(task.getId(), "456");
			// 节点任务结束
			map.put("comments", "456前台汇总");
			taskService.claim(task.getId(), "456");
			taskService.complete(task.getId(), map);
			try {
				loadActivitiPng(getActivitiPngBytes(processInstance),
						"d://activitiTest1.png");
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		// 转后台123
		System.out.println("123ID的任务数:"
				+ getTaskQueryByUserid("123").list().size());
		tasks = getTaskQueryByUserid("123").list();
		for (Task task : tasks) {
			task.setDescription("啦啦啦啦啦");
			map.put("comments", "123认真学习认真工作  不同意");
			oneActivity2Another(task, "不同意", map, "123");
			// taskService.claim(task.getId(), "123");
			// taskService.complete(task.getId(),map);
			try {
				loadActivitiPng(getActivitiPngBytes(processInstance),
						"d://activitiTest2.png");
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		// 获得流程实例中的任务
		tasks = getTaskQueryByUserid("456").list();
		System.out.println("456ID的任务个数:" + tasks.size());
		for (Task task : tasks) {
			// claim调用claim的用户将变成该任务的所有人,其它用户将不能claim与complete该任务
			// taskService.claim(task.getId(), "456");
			// 节点任务结束
			task.setDescription("啦啦啦啦啦");
			map.put("comments", "456认真学习认真工作2");
			// 转办
			// taskService.addCandidateUser(task.getId(), "123");
			taskService.claim(task.getId(), "456");
			taskService.complete(task.getId(), map);
			try {
				loadActivitiPng(getActivitiPngBytes(processInstance),
						"d://activitiTest1.png");
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		// 转办123
		System.out.println("123ID的任务数:"
				+ getTaskQueryByUserid("123").list().size());
		tasks = getTaskQueryByUserid("123").list();
		for (Task task : tasks) {
			task.setDescription("啦啦啦啦啦");
			map.put("comments", "123认真学习认真工作  同意");
			taskService.claim(task.getId(), "123");
			taskService.complete(task.getId(), map);
			try {
				loadActivitiPng(getActivitiPngBytes(processInstance),
						"d://activitiTest2.png");
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		// 获得流程实例中的任务
		tasks = getTaskQueryByUserid("567").list();
		Map<String, Object> map1 = new HashMap<String, Object>();
		System.out.println("567ID的任务个数:" + tasks.size());
		for (Task task : tasks) {
			System.out.println("formKey值----->"
					+ getFormKeyByTaskId(task.getId()));
			// 传到后台后根据pass值 来判断是否撤回
			map1.put("comments", "567认真学习认真工作");
			// 这个pass 就是流程图中任务节点(预算审核)中不同意路径的Main
			// config中的condition值即${!pass}
			// map1.put("pass", true);
			taskService.addComment(task.getId(), task.getProcessInstanceId(),
					"567认真学习认真工作");
			taskService.claim(task.getId(), "567");
			taskService.complete(task.getId(), map1);
		}
		List<HistoricProcessInstance> hpis = getProcinstListStartBy("Test");
		System.out.println("Test开启过得流程有:" + hpis.size() + "个");
		try {
			loadActivitiPng(getActivitiPngBytes(processInstance),
					"d://activitiTest3.png");
		} catch (IOException e) {
			e.printStackTrace();
		}
		HistoricProcessInstance historicProcessInstance = getProcessInstanceIdByBusinessId("ddddaaddd");
		System.out.println(" 流程id--->" + historicProcessInstance.getId());
		List<HistoricActivityInstance> actInsList = getHisUserTaskActivityInstanceList(historicProcessInstance
				.getId());
		for (HistoricActivityInstance v : actInsList) {
			System.out.println(v.getId());
			System.out
					.println("开始时间--->"
							+ v.getStartTime()
							+ "   结束时间------>"
							+ v.getEndTime()
							+ "   任务名称---->"
							+ v.getActivityName()
							+ "   办理人---->"
							+ identityService.createUserQuery().userId(
									v.getAssignee()).singleResult()
									.getFirstName() + " UserId---->"
							+ v.getAssignee()
							+ "   审批意见---->"
							// +
							// taskService.getTaskComments(v.getTaskId()).get(0).getFullMessage());
							+ getWorkflowVariables(v.getProcessInstanceId(), v
									.getId()));
		}
	}

	/**
	 * 
	 * @author Test
	 * @createDate 2014-6-1下午10:58:16
	 * @params 任务
	 * @return void
	 * @useFor 从当前节点转向另一个节点
	 */
	public void oneActivity2Another(Task task, String flowName,
			Map<String, Object> map, String userid) {

		ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)
				.getDeployedProcessDefinition(task.getProcessDefinitionId());

		ExecutionEntity executionEntity = (ExecutionEntity) runtimeService
				.createExecutionQuery().executionId(task.getExecutionId())
				.singleResult();// 执行实例
		String activitiId = executionEntity.getActivityId();
		System.out.println("当前运行节点id值:" + activitiId);
		List<ActivityImpl> activitiList = new ArrayList<ActivityImpl>();
		// 流程定义对象才能得到节点对象
		activitiList = processDefinition.getActivities();
		// 当前实例的执行到哪个节点
		ActivityImpl srcActivity = findActivity(activitiList, activitiId);
		ActivityImpl endActivity = null;
		TransitionImpl transitionImpl = null;
		List<PvmTransition> pvmTransitionList = srcActivity
				.getOutgoingTransitions();// 获取当前节点的所以出口(这个方法做的不好,应该返回List<TransitionImpl>才对的,这样就不用下面的强转换了,我想以后版本会改了这点)
		for (PvmTransition pvmTransition : pvmTransitionList) {
			transitionImpl = (TransitionImpl) pvmTransition;// 强转为TransitionImpl
			System.out.println(transitionImpl.getProperty("name"));
			if (flowName.equals(transitionImpl.getProperty("name"))) {
				endActivity = transitionImpl.getDestination();
			}
		}
		List<PvmTransition> oriPvmTransitionList = new ArrayList<PvmTransition>();
		oriPvmTransitionList.addAll(pvmTransitionList);

		// 先清空其他Transition
		pvmTransitionList.clear();
		pvmTransitionList.add((PvmTransition) transitionImpl);
		transitionImpl.setDestination(endActivity);
		taskService.claim(task.getId(), userid);
		taskService.complete(task.getId(), map);
		// 还原回去其他Transition
		pvmTransitionList.clear();
		pvmTransitionList.addAll(oriPvmTransitionList);
	}

	public ActivityImpl findActivity(List<ActivityImpl> activitiList,
			String activitiId) {
		for (ActivityImpl activityImpl : activitiList) {
			String id = activityImpl.getId();
			if (id.equals(activitiId)) {
				return activityImpl;
			}
		}
		return null;
	}

	/**
	 * 
	 * @author Test
	 * @createDate 2014-6-29上午08:25:13
	 * @params
	 * @return TaskQuery
	 * @useFor 根据用户名获得待办任务列表
	 */
	private TaskQuery getTaskQueryByUserid(String candidateUserId) {
		TaskQuery taskQuery = taskService.createTaskQuery();
		if (candidateUserId != null) {
			taskQuery = taskQuery.taskCandidateUser(candidateUserId);
		}
		return taskQuery;
	}

	/**
	 * 
	 * @author Test
	 * @createDate 2014-6-29上午08:35:38
	 * @params
	 * @return String
	 * @useFor 根据任务id获得formkey 值
	 */
	private String getFormKeyByTaskId(String taskId) {
		HistoricTaskInstance historicTaskInstance = historyService
				.createHistoricTaskInstanceQuery().taskId(taskId)
				.singleResult();

		return historicTaskInstance.getFormKey();
	}

	/**
	 * 
	 * @author Test
	 * @createDate 2014-6-29上午08:57:30
	 * @params
	 * @return String
	 * @useFor
	 */
	private HistoricProcessInstance getProcessInstanceIdByBusinessId(
			String eventid) {
		return historyService.createHistoricProcessInstanceQuery()
				.processInstanceBusinessKey(eventid).singleResult();
	}

	/**
	 * 
	 * @author Test
	 * @createDate 2014-6-29上午09:00:12
	 * @params
	 * @return List<HistoricActivityInstance>
	 * @useFor 获取审批记录
	 */
	private List<HistoricActivityInstance> getHisUserTaskActivityInstanceList(
			String processInstanceId) {
		List<HistoricActivityInstance> hisActivityInstanceList = ((HistoricActivityInstanceQuery) historyService
				.createHistoricActivityInstanceQuery().processInstanceId(
						processInstanceId).activityType("userTask").finished()
				.orderByHistoricActivityInstanceEndTime().desc()).list();
		return hisActivityInstanceList;
	}

	/**
	 * 
	 * @author Test
	 * @createDate 2014-6-29上午09:11:18
	 * @params
	 * @return String
	 * @useFor 获得审批意见
	 */
	private String getWorkflowVariables(String processInstanceId,
			String activityInstanceId) {
		// 执行任务时提的意见
		String comment = "";
		List<HistoricDetail> historicDetailList = historyService
				.createHistoricDetailQuery().processInstanceId(
						processInstanceId).activityInstanceId(
						activityInstanceId).list();
		if (historicDetailList != null && historicDetailList.size() > 0) {
			for (Iterator<HistoricDetail> iterator = historicDetailList
					.iterator(); iterator.hasNext();) {
				HistoricDetail historicDetail = (HistoricDetail) iterator
						.next();
				HistoricVariableUpdate variable = (HistoricVariableUpdate) historicDetail;
				if ("comments".equals(variable.getVariableName())) {
					comment = String.valueOf(variable.getValue());
					return comment;
				}

			}
		}
		return comment;
	}

	@After
	public void end() {
		System.out.println("流程测试完毕");
	}
}

分享到:
评论
发表评论

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

相关推荐

    工作流引擎Activiti使用总结

    工作流引擎Activiti是开源的工作流引擎,这是一份简单的使用总结,希望对大家有用。

    Activiti-activiti-5.22.0 源码

    Activiti 是一个开源的工作流程引擎,它主要用于自动化业务流程。这个源码包是 Activiti 5.22.0 版本,包含了整个框架的源代码,为开发者提供了深入理解 Activiti 内部机制的机会。以下是一些关于 Activiti 的核心...

    Activiti 使用总结

    以上是对Activiti使用的一些核心知识点的总结,对于学习和使用Activiti的朋友来说,这些都是理解和应用 Activiti 必不可少的基础。通过深入理解和实践,你可以利用Activiti构建出高效、灵活的业务流程管理系统。

    activiti designer 5.18 eclipse eclipse插件 activiti插件 activiti设计

    总结来说,Activiti Designer 5.18 是一个强大的Eclipse插件,专为设计和优化Activiti工作流而生。它利用Eclipse的插件机制,提供了一整套流程建模工具,让开发者能够更高效地构建符合BPMN 2.0标准的流程模型,...

    activiti安装总结

    Activiti是一款开源的工作流引擎,它能够帮助企业和组织实现业务流程自动化。在本文中,我们将深入探讨如何在各种环境中安装和配置Activiti,特别关注在Eclipse集成开发环境中的安装步骤,这是在尝试多种方法无效后...

    activiti5.22jar包_activiti_

    总结,Activiti5.22jar包为Java开发者提供了强大的工作流引擎,能够方便地集成到各种企业应用中,实现流程自动化。通过理解其核心概念和使用方法,开发者可以构建出灵活、高效的业务流程管理系统。

    activiti-5.22.0zip下载

    Activiti 是一个开源的工作流和业务流程管理(BPM)平台,它被广泛用于企业级应用中,以实现流程自动化和提升工作效率。标题中的 "activiti-5.22.0zip下载" 指的是Activiti的一个特定版本——5.22.0的压缩包文件,...

    activiti适配达梦数据库教程

    Activiti 适配达梦数据库教程 activiti 是一个开源的 Workflow 和 BPM system,它提供了强大的工作流引擎和业务流程管理功能。然而,activiti 默认支持的数据库只有 MySQL、 PostgreSQL、Oracle 等少数几种,而达梦...

    activiti modeler.zip_activiti_activiti-modeler_java_zip

    总结来说,Activiti Modeler是一款强大的业务流程建模工具,基于Java开发,遵循BPMN 2.0标准,能够帮助用户直观地设计、测试和部署流程。它提供了版本控制、导出导入等功能,易于集成到Java应用程序中,是企业级工作...

    Spring-activiti-ruoyi-activiti

    《Spring-Activiti在Ruoyi框架中的应用与二次开发》 在当今的企业级应用开发中,工作流管理系统已经成为不可或缺的一部分。Spring-Activiti作为一款强大的工作流引擎,结合Spring Boot框架,为开发者提供了便捷、...

    工作流Activiti5学习总结

    【工作流Activiti5学习总结】 工作流管理系统(Workflow Management System, WfMS)是企业信息化建设中的重要组成部分,它负责协调和管理业务流程。Activiti5是一款开源的工作流引擎,由Alfresco公司开发,它基于...

    Jeecg集成activiti.docx

    Jeecg集成activiti.docx Jeecg集成activiti是一个关于如何将activiti集成到Jeecg平台上的指南。下面是从给定的文件中提取的相关知识点: 1. activiti项目结构:activiti项目是一个Maven项目,包含了数据库文件,...

    activiti-6.0.0.zip

    activiti-6.0.0.zip 工作流官网包 (如果没有积分可以直接Q我:499384808,免费分享) 1. database里放着各种数据库的建表、删表、升级语句数据库包括db2、h2、hsql、mssql、mysql、oracle、postgres 2. libs 相关...

    activiti流程学习总结

    ### Activiti流程学习总结 #### 一、工作流的基本概念 在深入了解Activiti之前,我们需要先理解工作流的概念。工作流是一种将业务过程部分或全部自动化的方法,它可以帮助组织提高工作效率,减少错误,并且能够更...

    工作流Activiti的学习总结(十二) activiti官方十分钟快速学习

    在本篇博客“工作流Activiti的学习总结(十二)activiti官方十分钟快速学习”中,作者分享了关于Activiti工作流引擎的快速学习经验。Activiti是一个开源的、基于Java的企业级工作流引擎,它被广泛应用于自动化业务...

    activiti-explorer.rar_Activiti Explorer_Explorer_activiti_activi

    activiti 5.22 explorer的war包

    activiti 5.22完整包下载 activiti-explorer.war

    Activiti 是一个开源的工作流程和业务自动化引擎,它在企业级应用中被广泛使用来管理业务流程。这个压缩包 "activiti-explorer.war" 是 Activiti 的一个版本,具体是 5.22 版本。WAR 文件是 Web 应用程序档案(Web ...

    Activiti数据库总结说明参考.docx

    ### Activiti5数据库表结构详解 #### 概述 Activiti是一个开源的工作流引擎,用于构建业务流程自动化应用。它支持BPMN 2.0标准,并提供了灵活的方式来定义复杂业务流程。Activiti5版本中,为了实现业务流程管理的...

    activiti工作流PPT

    **正文** ...总结来说,了解并熟练掌握Activiti的常用API对于任何希望实现高效工作流管理的开发者都至关重要。通过学习这个PPT,你将能够更好地理解和应用Activiti,从而提升你的业务流程自动化能力。

    activiti-explorer-eclipse项目

    总结来说,activiti-explorer-eclipse项目为Eclipse开发人员提供了一站式的解决方案,以便他们在IDE内实现和管理基于Activiti的工作流程。通过这个项目,开发者不仅可以更高效地设计流程,还可以在本地环境中便捷地...

Global site tag (gtag.js) - Google Analytics