工作流
概述
工作流是针对工作中具有固定程序的常规活动而提出的一个概念。通过将工作活动分解成定义良好的任务、角色、规则和过程来进行执行和监控,达到提高生产组织水平和工作效率的目的。工作流技术为企业更好地实现经营目标提供了先进的手段。
工作流基本概念
1. 问:什么是工作流呢?
答:工作流是两个或两个以上的人,为了共同的目标,连续的以串行或并行的方式去完成某一业务或某一项活动。如工作流的名称所表达的含义,一个人处理的业务不称其为工作流,只有任务从一个人"流"向另一个人的时候才有工作流,并且个体参与工作流必须是为了同一个工作目标,如果个体处于两个相互独立的项目之中,不会产生工作流。
2. 问:什么是串行?什么是并行?
答:业务中的步骤也许以一步接着一步的方式进行,我们称之为串行;
在一个活动节点由不同的人或组合根据不同的情况处理,我们称之为并行。
工作流作用
1. 首先声明一点,所有能使用工作流的系统都能不用工作流实现。但是,这样做的坏处是:
a. 开发人员很头疼,相同的流程需要不断的coding,开发周期将变长
b. 维护更是恶梦,一旦变更流程或流程有纰漏,更改会很麻烦
c. 需要人工进行数据查询、统计、分析
d. 系统将无法控制活动或任务的流向任何人都能进行处理操作
e. 等等。太多了。
2. 用工作流的好处是:
a. 上面的问题都将得到解决
b. 事找人只要人计划好事情,事情会自动去找相关的人,这样人只要专注于任务处理就行
c. 数据存储对每个人的每项操作都有记录
d. 便于可管理系统自动统计每项任务,并按你的需求进行统计分析,给出结果
e. 等等。优点多多。
适用领域
- 适用行业:
消费品行业,制造业,电信服务业,银证险等金融服务业,物流服务业,物业服务业,物业管理,大中型进出口贸易公司,政府事业机构,研究院所及教育服务业等,特别是大的跨国企业和集团公司。 - 具体应用:
关键业务流程:订单、报价处理、采购处理、合同审核、客户电话处理、供应链管理等
行政管理类: 出差申请、加班申请、请假申请、用车申请、各种办公用品申请、购买申请、日报周报等凡是原来手工流转处理的行政表单。
人事管理类:员工培训安排、绩效考评、职位变动处理、员工档案信息管理等。
财务相关类:付款请求、应收款处理、日常报销处理、出差报销、预算和计划申请等。
客户服务类:客户信息管理、客户投诉、请求处理、售后服务管理等管理等。
特殊服务类: ISO系列对应流程、质量管理对应流程、产品数据信息管理、贸易公司报关处理、物流公司货物跟踪处理等各种通过表单逐步手工流转完成的任务均可应用工作流软件自动规范地实施。
实现方法
既然工作流这么神奇,这么好用,那么我们该如何实现一套工作流呢?别急,接下来我们以请假流程为例,带你领略一套完整的工作流程。
工作流需要依靠工作流管理系统来实现。限于篇幅,我们这里只讨论工作流的实现,假设你现在有一套能正常运行的管理系统。
那么我们要做的就是根据客户的业务需求,画出整体的工作流程图,以请假流程为例,如图1-1。
图1-1 请假管理流程图
至于具体的图标含义,诸君可参见于http://www.mossle.com/docs/activiti工作流用户手册。
有了工作流程图,我们接下来要做的就是将该流程部署并发布到系统中。其中,LeaveProcess.bpmn20.xml是工作流程图的文件名称。
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
repositoryService.createDeployment()
.addClasspathResource("org/activiti/test/LeaveProcess.bpmn20.xml")
.deploy();
发布完成后,我们还需要启动该流程实例。其中,"LeaveProcess:1:4"是流程定义id,variables是该流程实例启动人的信息,存于Map中。
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance processInstance = runtimeService. startProcessInstanceById("LeaveProcess:1:4", variables);
到了这里,一个工作流任务就正式开始了,然后我们可以根据api里所提供的接口,自定义我们工作流程的功能函数,它们的特点就是从当前节点流转到下一节点,都只需要知道当前执行人、下一执行人和当前执行任务的描述信息。
当然,我们开始了一个工作流程后,到最后一定要关闭它,也就是要结束这项工作。如果不这么做,那么这项工作就会一直留在数据库里,一两条没什么影响,但如果任务多了,那么对数据访问性能的影响那将是很可怕的。接下来就结束任务流程,其实任务流程的结束和其他正常的流转没什么区别,唯一的不同就是,结束的下一执行人是不存在的。即,对api的调用只需传当前执行人和执行任务描述信息即可。
限于篇幅,这里只介绍了工作流的理论和实现的大体流程,想要详细了解的可以联系本文作者!