精华内容
下载资源
问答
  • 以工作流来驱动业务应用是本次系统架构的主要实现思路。以往设计的系统观看,过去因没有引入工作流,所有设计的业务应用,都没有线上的审批过程(审批也是线下),只是单纯的状态来记录。比如,采购订单,生产订单,...

            以工作流来驱动业务应用是本次系统架构的主要实现思路。以往设计的系统观看,过去因没有引入工作流,所有设计的业务应用,都没有线上的审批过程(审批也是线下),只是单纯的状态来记录。比如,采购订单,生产订单,生产备料,生产退料。。。。只是通过系统做了一张单据(表单),然后打印交给相应的人员。

            重新设计系统后,引入工作流,以业务流程来驱应用。所有建立的业务应用,均是在工作流的前提下运作。比如:采购订单,采购员在系统中建立采购订单,没有最终提交前,采购订单可随时修改,直到最终确定再提交。提交后,将关键信息发送到流程中心,建立流程实例,这样一个工作流就驱动起来了,审批者接收到任务后进行审批;

            流程中心模块是否存储业务数据?如果存储,则会出现双重数据,一般不再存储。通常如果有特定的业务功能,在流程中心仅存储业务的关键信息。如果直接在流程中心中建立的业务,则可借用流程中心的数据存储功能。如果是第三方系统集成过来的数据,可将重要的数据存储到业务模块,然后再发往流程中心建立相应的流程实例。比如,SAP系统下达的采购订单,需要采购经理,主管,当金额更高时可能还需要总经理审批;那么采购订单提交后,关键信息发往流程中心,发起审批,而领导们,随时随地都可能会收到审批任务,通过手机,即可查看到审批信息,此时PO#是一个关键信息,通过接口读取到SAP系统采购订单的真实信息。

            表单的实现。早在模型设计时,已经在指定了与之配套的表单KEY,表单KEY可直接在线上设计。针对不平台做相应的适配即可,比如web模式,手机模式,即可完成相应的UI设计。

    从流程中心读取业务数据

    展开全文
  • Activiti5是由Alfresco软件2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM...
  • 整合Activiti Modeler到业务系统(或BPM平台) 1. 为什么要整合 Activiti 5.10版本把原本独立的Activiti Modeler模块整合到了Activiti Explorer中,两者相结合使用起来很方便,通过Modeler设计的流程模型可以...

    整合Activiti Modeler到业务系统(或BPM平台)

    1. 为什么要整合

    Activiti 5.10版本把原本独立的Activiti Modeler模块整合到了Activiti Explorer中,两者相结合使用起来很方便,通过Modeler设计的流程模型可以直接部署到引擎,也可以把已经部署的流程转换为Model从而在Modeler中编辑。

    在实际应用中也有这样的需求,把Modeler整合到业务系统中可以供管理员使用,或者作为BPM平台的一部分存在,很遗憾官方没有给出如何整合Modeler的文档。

    2. 整合工作

    2.1 下载源码

    首先需要从Github下载源码:https://github.com/Activiti/Activiti;可以直接用Git克隆,也可以下载zip格式的压缩包。

    Activit源码结构

    2.2 复制文件

    复制的所有文件均在activiti-webapp-explorer2目录中。

    1. src/main/resources中的editor.html、stencilset.json、plugins.xml到项目源码的源码根目录,保证编译之后在classes根目录
    2. src/main/webapp中的api、editor、explorer、libs到项目的webapp目录(与WEB-INF目录同级)

    2.3 添加依赖

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    < dependency >
         < groupid >org.activiti</ groupid >
         < artifactid >activiti-explorer</ artifactid >
         < version >5.14</ version >
         < exclusions >
             < exclusion >
                 < artifactid >vaadin</ artifactid >
                 < groupid >com.vaadin</ groupid >
             </ exclusion >
             < exclusion >
                 < artifactid >dcharts-widget</ artifactid >
                 < groupid >org.vaadin.addons</ groupid >
             </ exclusion >
             < exclusion >
                 < artifactid >activiti-simple-workflow</ artifactid >
                 < groupid >org.activiti</ groupid >
             </ exclusion >
         </ exclusions >
    </ dependency >
    < dependency >
         < groupid >org.activiti</ groupid >
         < artifactid >activiti-modeler</ artifactid >
         < version >5.14</ version >
    </ dependency >

    2.4 添加Java类

    添加一个ExplorerRestApplication.java类保存到项目中,注册了一些REST路由。

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    package org.activiti.explorer.rest.application;
     
    import org.activiti.editor.rest.application.ModelerServicesInit;
    import org.activiti.rest.api.DefaultResource;
    import org.activiti.rest.application.ActivitiRestApplication;
    import org.activiti.rest.filter.JsonpFilter;
    import org.restlet.Restlet;
    import org.restlet.routing.Router;
     
    public class ExplorerRestApplication extends ActivitiRestApplication {
     
       public ExplorerRestApplication() {
         super ();
       }
       /**
        * Creates a root Restlet that will receive all incoming calls.
        */
       @Override
       public synchronized Restlet createInboundRoot() {
         Router router = new Router(getContext());
         router.attachDefault(DefaultResource. class );
         ModelerServicesInit.attachResources(router);
         DiagramServicesInit.attachResources(router);
         JsonpFilter jsonpFilter = new JsonpFilter(getContext());
         jsonpFilter.setNext(router);
         return jsonpFilter;
       }
     
    }

    2.5 配置web.xml

    在web.xml文件中添加如下配置:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <!-- Restlet adapter, used to expose modeler functionality through REST -->
    < servlet >
         < servlet-name >RestletServlet</ servlet-name >
         < servlet-class >org.restlet.ext.servlet.ServerServlet</ servlet-class >
         < init-param >
             <!-- Application class name -->
             < param-name >org.restlet.application</ param-name >
             < param-value >org.activiti.explorer.rest.application.ExplorerRestApplication</ param-value >
         </ init-param >
    </ servlet >
     
    <!-- Catch all service requests -->
    < servlet-mapping >
         < servlet-name >RestletServlet</ servlet-name >
         < url-pattern >/service/*</ url-pattern >
    </ servlet-mapping >

    2.6 控制器

    使用Spring MVC做了一个简单的封装,也可以使用其他的MVC实现。

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    package me.kafeitu.demo.activiti.web.workflow;
     
    import java.io.ByteArrayInputStream;
    import java.util.List;
     
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import org.activiti.bpmn.converter.BpmnXMLConverter;
    import org.activiti.bpmn.model.BpmnModel;
    import org.activiti.editor.constants.ModelDataJsonConstants;
    import org.activiti.editor.language.json.converter.BpmnJsonConverter;
    import org.activiti.engine.RepositoryService;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.repository.Model;
    import org.apache.commons.io.IOUtils;
    import org.apache.commons.lang3.StringUtils;
    import org.codehaus.jackson.JsonNode;
    import org.codehaus.jackson.map.ObjectMapper;
    import org.codehaus.jackson.node.ObjectNode;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.support.RedirectAttributes;
     
    /**
      * 流程模型控制器
      *
      * @author henryyan
      */
    @Controller
    @RequestMapping (value = "/workflow/model" )
    public class ModelController {
     
       protected Logger logger = LoggerFactory.getLogger(getClass());
     
       @Autowired
       RepositoryService repositoryService;
     
       /**
        * 模型列表
        */
       @RequestMapping (value = "list" )
       public ModelAndView modelList() {
         ModelAndView mav = new ModelAndView( "workflow/model-list" );
         List<model> list = repositoryService.createModelQuery().list();
         mav.addObject( "list" , list);
         return mav;
       }
     
       /**
        * 创建模型
        */
       @RequestMapping (value = "create" )
       public void create( @RequestParam ( "name" ) String name, @RequestParam ( "key" ) String key, @RequestParam ( "description" ) String description,
               HttpServletRequest request, HttpServletResponse response) {
         try {
           ObjectMapper objectMapper = new ObjectMapper();
           ObjectNode editorNode = objectMapper.createObjectNode();
           editorNode.put( "id" , "canvas" );
           editorNode.put( "resourceId" , "canvas" );
           ObjectNode stencilSetNode = objectMapper.createObjectNode();
           stencilSetNode.put( "namespace" , "http://b3mn.org/stencilset/bpmn2.0#" );
           editorNode.put( "stencilset" , stencilSetNode);
           Model modelData = repositoryService.newModel();
     
           ObjectNode modelObjectNode = objectMapper.createObjectNode();
           modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, name);
           modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1 );
           description = StringUtils.defaultString(description);
           modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description);
           modelData.setMetaInfo(modelObjectNode.toString());
           modelData.setName(name);
           modelData.setKey(StringUtils.defaultString(key));
     
           repositoryService.saveModel(modelData);
           repositoryService.addModelEditorSource(modelData.getId(), editorNode.toString().getBytes( "utf-8" ));
     
           response.sendRedirect(request.getContextPath() + "/service/editor?id=" + modelData.getId());
         } catch (Exception e) {
           logger.error( "创建模型失败:" , e);
         }
       }
     
       /**
        * 根据Model部署流程
        */
       @RequestMapping (value = "deploy/{modelId}" )
       public String deploy( @PathVariable ( "modelId" ) String modelId, RedirectAttributes redirectAttributes) {
         try {
           Model modelData = repositoryService.getModel(modelId);
           ObjectNode modelNode = (ObjectNode) new ObjectMapper().readTree(repositoryService.getModelEditorSource(modelData.getId()));
           byte [] bpmnBytes = null ;
     
           BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);
           bpmnBytes = new BpmnXMLConverter().convertToXML(model);
     
           String processName = modelData.getName() + ".bpmn20.xml" ;
           Deployment deployment = repositoryService.createDeployment().name(modelData.getName()).addString(processName, new String(bpmnBytes)).deploy();
           redirectAttributes.addFlashAttribute( "message" , "部署成功,部署ID=" + deployment.getId());
         } catch (Exception e) {
           logger.error( "根据模型部署流程失败:modelId={}" , modelId, e);
         }
         return "redirect:/workflow/model/list" ;
       }
     
       /**
        * 导出model的xml文件
        */
       @RequestMapping (value = "export/{modelId}" )
       public void export( @PathVariable ( "modelId" ) String modelId, HttpServletResponse response) {
         try {
           Model modelData = repositoryService.getModel(modelId);
           BpmnJsonConverter jsonConverter = new BpmnJsonConverter();
           JsonNode editorNode = new ObjectMapper().readTree(repositoryService.getModelEditorSource(modelData.getId()));
           BpmnModel bpmnModel = jsonConverter.convertToBpmnModel(editorNode);
           BpmnXMLConverter xmlConverter = new BpmnXMLConverter();
           byte [] bpmnBytes = xmlConverter.convertToXML(bpmnModel);
     
           ByteArrayInputStream in = new ByteArrayInputStream(bpmnBytes);
           IOUtils.copy(in, response.getOutputStream());
           String filename = bpmnModel.getMainProcess().getId() + ".bpmn20.xml" ;
           response.setHeader( "Content-Disposition" , "attachment; filename=" + filename);
           response.flushBuffer();
         } catch (Exception e) {
           logger.error( "导出model的xml文件失败:modelId={}" , modelId, e);
         }
       }
     
    }
    </model>

    2.7 注意事项

    如果使用Spring代理引擎,并且在项目中同时有activiti.cfg.xml文件(不管在main/resources还是test/resources目录),在activiti.cfg.xml里面的引擎中添加下面的配置参数,否则会导致打开Modeler的编辑页面时读取数据返回204状态码。

    ?
    1
    < property name = "processEngineName" value = "test" ></ property >

    引擎默认名称为default,ProcessEngines.getDefaultProcessEngine()查询时会先检索main/resources,然后再检索test/resources的activiti.cfg.xml和activiti-context.xml文件,所以当main/resources监测不到指定文件时就会导致该引擎被当做web应用的引擎对象,这样会导致有两个引擎,所以把引擎的名称改为非默认的“default”。

    3. 中文乱码问题解决办法

    在JVM参数中添加参数:

    -Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8

    参考在Activiti Modeler中设计的流程包含奇数个中文时不能部署问题

    4. 效果截图

    在最新的kft-activiti-demo版本(1.7.0)中已经集成了Activiti Modeler,可以在线访问,也可以下载源码学习如何配置。

    登录http://demo.kafeitu.me/kft-activiti-demo后选择流程管理->模型工作区菜单项即可。

    kft-activiti-demo中的效果截图kft-activiti-demo中的效果截图

    展开全文
  • activiti入门-activiti官方应用使用

    千次阅读 2017-04-26 21:53:00
    0.目录 1.0 了解activiti 1.1 什么是 activiti ...1.5 使用activiti官方应用 1.5.1 相关war包介绍及发布 1.5.2 基本的请假流程 1.5.3 使用activiti-admin.war 管理流程 2.0 activiti的使用...

    0.目录

    1.0 了解activiti

    • 1.1 什么是 activiti
    • 1.2 activiti 相关概念
    • 1.3 为什么使用 activiti
    • 1.4 activiti的适用场景
    • 1.5 使用activiti官方应用
      • 1.5.1 相关war包介绍及发布
      • 1.5.2 基本的请假流程
      • 1.5.3 使用activiti-admin.war 管理流程

    2.0 activiti的使用

    • 2.1 activiti 入门案例
    • 2.2 activiti 数据库结构
    • 2.3 activiti 架构
    • 2.4 activiti 相关api学习
    • 2.5 activiti restful 接口调用

    3.0 BPMN规范

    4.0 activiti与现有的系统的整合

    5.0 规则引擎drools的使用


    1.0 了解activiti

    1.1 什么是activiti

    官方概念:业务过程的部分或整体在计算机应用环境下的自动化,是对工作流程及其各操作步骤之间业务规则的抽象、概括描述”,它主要解决的是“使在多个参与者之间按照一种提前定义好的规则流程来传递与执行文档、信息或任务的过程,让这个过程可以自动进行或者部分自动执行,从而完成预期的业务目标

    我个人理解的是工作流引擎是把流程中不同的操作或步骤用某种方式连接起来
    把原来杂乱无章的一系列活动规范起来变成有流程的活动,就比如说请假
    请假需要多个人审批

    1.2 activiti 相关概念

    • 工作流
      就是工作从开始到完成的过程。工作流由流程逻辑和路线规则组成。流程逻辑定义了任务的顺序和必须遵循的路线规则,还有截止期限以及由工作流引擎实现的其他业务规则

    • 流程定义
      一个图形流程定义或流程图,代表工作流的流程逻辑元素以及各元素之间的关系

    • 流程实例
      一个流程实例,通常称为工作,是一个流程定义的运行实例
    • 状态
      代表一种对外部参与者的依赖;这意味着在流程运行时流程引擎必须等待,直到外部参与者通知工作流系统指定的状态完成了
    • 动作
      在流程运行过程中,工作流系统为响应指定事件运行的一段程序逻辑;当流程运行过程中指定的事件发生时,工作流系统启动并执行这些动作
    • 流程上下文
      保存每一个流程运行的上下文信息;通常在流程定义中声明这些变量,然后在流程实例生成时被实例化
    • 参与者
      以下类型之一:资源集、特定资源、组织单元、角色(一个人在组织内部的作用)、人或系统(自动代理)
    • 活动
      组成流程定义中的一个逻辑步骤的任务。可以是自动的或人工的。自动指在流程操作过程中定义脚本和触发器的能力。流程定义中的特定活动可以作为无人参与的任务来运行,自动化可以在手工或人力驱动的任务中执行业务规则。常见的一种自动活动就是截止期限管理,如果某个工作项在预定的截止期限之前未能完成,该管理可以自动发送一条提醒消息或触发一个延期程序。
    • 活动所有者
      活动所有者是有权宣布一个活动结束,然后推进工作到流程中的下一个活动的参与者
    • 工作所有者
      工作所有者是有权整体控制流程实例执行过程的参与者
    • 工作项
      代表流程实例中活动的参与者将要执行的工作

    1.3 为什么使用 activiti

    首先来看一个案例:请假
    小明发起请假流程 -> 班长审批 -> 班主任审批 -> 结束

    程序员的角度
    不使用工作流能够完成以上功能吗?
    答案:可以实现,但是每个活动节点都需要开发交互页面和业务逻辑,每次活动的流转都需要硬性判断下一步活动节点及操作人,每次操作都需要维护业务数据和流程的相关数据
    使用流程引擎可以简化开发难度,流程引擎会维护流程数据并有丰富的api关联业务,并且有开始后的流程定义工具,把流程用xml文件从业务中分离出来,完成一个节点后会自动流转到下一个节点
    使用流程引擎只需要定义流程,不需要关流程的衔接和变量的持久化

    1.4 activiti的适用场景

    多人协作或(需要动态变更)的业务流程场景

    1.5 使用activiti官方应用

    看完上面的内容大家应该对activiti有一定的了解,activiti官方为我们提供了一套相对完整的activiti应用

    首先去官网下载activiti压缩包,如果官网访问不到可以戳这里下载
    activiti6.0.0下载+jd-gui

    解压后可以在文件夹下看到一下几个文件夹
    activiti解压后的图片

    database文件夹下存放的是activiti数据表sql,不同数据库有不同的sql文件

    wars文件夹下可以看到三个war包

    • activiti-app.war
    • activiti-rest.war
    • activiti-admin.war

    以上三个war包都是基于activiti开发的示例应用,并且都是使用内存数据库所以不需要配置数据库环境,直接丢到tomcat中就可以使用,当然如果你想使用本地的数据库可以用压缩工具打开war包修改WEB-INF/classes/META-INF/activiti-app/下的activiti-app.properties 文件即可

    activiti-app.war 是一套完整的工作流应用

    activiti-rest.war 是一套提供restful接口的应用,其实activiti已经提供了restful接口,这个war包只是稍微配置了一下并部署了几个示例流程

    activiti-admin.war 顾名思义是可以管理activiti流程相关的应用,这个大家可以打开就可以很快上手

    1.5.1 相关war包介绍及发布

    第一步:首先要有tomcat环境,相信大家都会配
    第二布: 把那三个war包丢到tomcat的webapps目录下
    第三步:启动tomcat服务器

    经过以上三部就可以在游览器访问app了
    其中只有activiti-app 和 activiti-admin有界面,URL和密码可以看下面的表格

    URL用户名密码
    localhost:8080/activiti-appadmintest
    localhost:8080/activiti-adminadminadmin

    首先访问activiti-app,你会看到如下界面
    activiti-app首页图片

    第一个Kickstart App 是用来设计流程的,这里就需要了解一下bpmn规范
    第二个Task App 是用来处理流程任务的app
    第三个Identity management 是用来管理用户和组的

    这里主要介绍Kickstart App其他两个点进去就会用了
    这里写图片描述

    Kickstart App 中有四个tab
    第一个Processes 是用来设计流程的点击Create Process 就可以新建一个流程
    第二个Forms是流程中要使用的表单,activiti会把表单存在数据中
    第三个Decision Tables 是决策表,如果判断条件比较多可以使用决策表,减少ifelse代码 基于drools 实现
    第四个Apps 是应用程序,一个应用程序可以包含多个流程

    1.5.2 基本的请假流程

    1.首先在Identity management创建两个用户

    • employee
    • manager
      这里写图片描述

    2.创建请假流程

    打开Kickstart App -> Process -> Create Process
    这里写图片描述

    这里大家可能不知道怎么画,去看看bpmn规范自然就知道怎么画了

    3.创建App

    打开Kickstart App -> Apps -> Create App
    这里写图片描述

    创建完成后,不要忘记点击publish发布流程

    这里写图片描述

    以上步骤做完后点击左上角的正方形回到首页,你会看到多个一个卡片
    这里写图片描述

    4.使用employee用户登陆启动流程

    这里写图片描述

    5.employee用户完成任务

    这里写图片描述

    6.使用manager用户登陆完成任务

    这里写图片描述

    管理者审批完后整个流程就结束了

    1.5.3 使用activiti-admin.war 管理流程

    用户名密码可以看上面的表格,界面也是简洁明了,这里就贴张图不多介绍了

    这里写图片描述

    以上资料我都打包好了,大家可以戳这里下载activiti示例下载csdn资源必须要金币可联系qq771979036下载

    展开全文
  • 我这个快速开发平台在系统基础功能(用户管理,部门管理…)上整合了工作流,你可以直接用来开发ERP,OA,CRM等企业级应用,不用再担心如何再去花大量的时间集成工作流进来。博主是个人开发者。研究工作流有几年了,...

    前言

    目前市场上有很多开源平台没有整合工作流,即使有,也是价格不菲的商业版,来看这篇文章的估计也了解了行情,肯定不便宜。我这个快速开发平台在系统基础功能(用户管理,部门管理…)上整合了工作流,你可以直接用来开发ERP,OA,CRM等企业级应用,不用再担心如何再去花大量的时间集成工作流进来。博主是个人开发者。研究工作流有几年了,依稀记得第一次写工作流是用在江苏某省局的用车申请业务上,那时候年轻气盛,精力充沛可是能力有限,熬了几十个夜整出来了,即使出来了,也是代码很乱。后面也在好几个系统参与了工作流的开发,目前是单独把这一套给抽取出来了,做成了可插拔的,可以非常方便的整合到你的程序中。下面我们来探索吧。

    一、项目形式

    springboot+vue+activiti集成了activiti在线编辑器,快速开发平台,可插拔工作流服务。

    二、项目介绍

    本项目拥有用户管理,部门管理,代码生成,系统监管,报表,大屏展示,业务审批等功能。功能太强大,只能粗矿的介绍,所见即所得,体验一下吧。

    三、工作流

    1.流程模型绘制

    进入流程模型菜单,创建流程模型,这里涉及到网关流转,需要设置流转条件,我们这里是三十岁以上的走下面分支,三十岁以下的走上面的分支。点击分支线,设置流转条件即可。${age<=30}。保存后我们在列表中点击发布即可。
    绘制流程
    设置流转条件
    在这里插入图片描述

    2.流程配置

    发布后,就到了已发布模型列表,在启用之前,我们需要先对进行节点设置和关联具体单据。

    已发布模型
    审批人员可以根据角色,直接指定人,部门,部门负责人,发起人部门负责人来进行配置,基本上满足所有的流转需求,并且可以设置表单变量。

    节点设置
    设置流程表单,目前就做了一个请假的测试表单,并且可以对相应角色授权,做到自定义权限。
    设置关联表单
    设置完后启动即可。

    3.流程提交

    填写请假表单
    填写表单发起申请
    列表

    提交单据,优先级分为普通,重要,紧急。消息通知可以选择站内通知,短信,邮件。

    提交表单

    提交之后可以撤回单据。
    撤回
    查看流程流转进度情况。

    查看流转进度

    也可以挂起,删除流程。
    挂起

    4.流程审批

    办理人审批列表,可以处理单据(驳回或者通过),也可以委托他人待办。
    审批待办
    审批通过。
    在这里插入图片描述
    委托他人待代。
    委托他人待办

    审批通过后进入已办列表。
    已办列表

    年龄大于30岁,进入下面分支流转。
    流程查看

    审批通过。

    审批通过

    5.待办信息推送

    站内消息推送。
    在这里插入图片描述

    总结

    上面只是展示了平台的审批流功能,还有其他很多功能没展示出来,自己也写了一些非常好用的组件,做到系统敏捷快速开发,大大减少开发时间和成本,目前正在对接移动端审批。之前由于没有时间去部署线上测试环境,考虑近期部署,目前可以单独找我,远程演示,有需要源码的联系我。q:2500564056。

    鸣谢:
    jeecgboot开源版http://jeecg.com/
    咖啡兔activiti实战https://kafeitu.me/

    展开全文
  • Activiti工作流应用

    千次阅读 2019-02-14 13:15:23
    工作流简介:...   config import org.activiti.engine.*;...import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.activit...
  • 流程与业务代码必然有一定的耦合性,这里建立的约定,旨在尽... - 不增加任务的情况下改变流程流向,不需要更改代码; - 业务代码尽可能复用; - 展示业务流程历史时间轴时,可展示每一步的执行结果,如批准/拒绝等
  • 上图中的1001是业务系统中的,某个唯一业务标识。比如请假单ID,调薪单ID。 结果 看上图中圈中的信息即可。应用就是当某个负责人进行任务处理的时候,可以拿到唯一标识businessKey,然后找到businessKey对应的...
  • activiti

    2020-08-04 20:56:50
    Activiti5是2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,它特色是...
  • Activiti是一个轻量级的工作流和业务流程管理(BPM)平台,面向业务人员,开发人员和系统管理员。 它的核心是用于Java的超快速,坚如磐石的BPMN 2流程引擎。 它是开源的,并根据Apache许可进行分发。 Activiti...
  • Activiti工作流开发中的应用

    千次阅读 2018-08-31 23:54:27
    Activiti5是由Alfresco软件2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM...
  • Activiti是一个轻量级的工作流和业务流程管理(BPM)平台,面向业务人员,开发人员和系统管理员。 它的核心是用于Java的超快速,坚固的BPMN 2流程引擎。 它是开源的,并根据Apache许可进行分发。 Activiti任何...
  • Activiti工作流与业务整合实战

    千次阅读 2020-12-07 14:33:34
    结合实际业务和技术背景对Activiti进行改造和融合,通过Aop切面抽离工作流业务,通过Spel进行形参实参绑定及复杂数据结构传参,通过合理的流程设计、架构设计实现Activiti业务逻辑整合
  • 《疯狂Workflow讲义——基于Activiti的工作流应用开》一:文档获取下载方式:1:花20CSDN积分:可以下载:http://download.csdn.net/download/ytfrdfiw/97898162: 脚本之家:...二:本书目录:图书简介:本书是一本...
  • Activiti

    2018-02-09 22:43:10
    Activiti流程引擎的配置文件是名为activiti.cfg.xml的XML文件。 从Activiti5.12开始,SLF4J被用作日志框架,替换了之前的java.util.logging,...Activiti需要运行JDK1.6或以上版本。 开始步骤: Activiti的下载...
  • 认识Activiti

    2021-02-01 16:59:17
    工作流(WorkFlow)引擎被广泛应用于各种信息化系统中,将原本散乱甚至混乱的业务梳理后制定成业务规范流程,进而约束业务的规范化处理和运转。需求人员、开发人员共同协作制定了符合BPMN 2.0规范的流程定义,之后将...
  • 环境: activiti-5.16 spring-4.0.6.RELEASE Activiti 可以单独运用,也可以与spring整合运用,但均继承自一个基础的配置对象(抽象类)org.activiti.engine.ProcessEngineConfiguration。 除了基础的引擎配置...
  • Activiti初学者教程

    万次阅读 多人点赞 2014-09-24 11:45:42
    它主要解决的是“使多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。(我的理解就是:将部分或者全部的工作流程、逻辑让计
  • Activiti 介绍

    千次阅读 2016-05-27 18:02:29
    工作流(Workflow),就是”业务过程的部分或整体计算机应用环境下的自动化”,它主要解决的是”使多个参与者之间按照 某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,561
精华内容 1,024
关键字:

activiti在业务系统的应用