96编辑器旗下产品
找图
终身
ID:0
到期时间:永久
退出登录
您的位置:首页 > 百科管理 > 详情

activiti 在线设计-《Activiti实战》epub下载在线阅读全文,求百度网盘云资源

原创:找图网 2023-04-07 08:39:38
  • activiti6的流程编辑器怎么整合进自己的项目中

  • 建议你可以看一下咖啡兔的相关技术博文:

    网页链接

    ,

    activiti6和activiti5整合方式一致

    1. 为什么要整合

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

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

    2. 整合工作

    2.1 下载源码

    首先需要从Github下载源码:

    2.2 复制文件

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

    src/main/resources中的、、到项目源码的源码根目录,保证编译之后在classes根目录

    src/main/webapp中的api、editor、explorer、libs到项目的webapp目录(与WEB-INF目录同级)

    2.3 添加依赖

    ?

    123456789101112131415161718192021222324

    <dependency>    <groupid></groupid>    <artifactid>activiti-explorer</artifactid>    <version>5.14</version>    <exclusions>        <exclusion>            <artifactid>vaadin</artifactid>            <groupid></groupid>        </exclusion>        <exclusion>            <artifactid>dcharts-widget</artifactid>            <groupid></groupid>        </exclusion>        <exclusion>            <artifactid>activiti-simple-workflow</artifactid>            <groupid></groupid>        </exclusion>    </exclusions></dependency><dependency>    <groupid></groupid>    <artifactid>activiti-modeler</artifactid>    <version>5.14</version></dependency>

    2.4 添加Java类

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

    ?

    1234567891011121314151617181920212223242526272829

    package ;

    import ;import ;import ;import ;import ;import ;

    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);    (router);    JsonpFilter jsonpFilter = new JsonpFilter(getContext());    (router);    return jsonpFilter;  }

    }

    2.5 配置

    在文件中添加如下配置:

    ?

    12345678910111213141516

    <!-- Restlet adapter, used to expose modeler functionality through REST --><servlet>    <servlet-name>RestletServlet</servlet-name>    <servlet-class></servlet-class>    <init-param>        <!-- Application class name -->        <param-name></param-name>        <param-value></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实现。

    ?

    123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163

    package ;

    import ;import ;

    import ;import ;

    import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;

    /** * 流程模型控制器 * * @author henryyan */@Controller@RequestMapping(value = "/workflow/model")public class ModelController {

    protected Logger logger = (getClass());

    @Autowired  RepositoryService repositoryService;

    /**   * 模型列表   */  @RequestMapping(value = "list")  public ModelAndView modelList() {    ModelAndView mav = new ModelAndView("workflow/model-list");    List<model> list = ().list();    ("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 = ();      ("id", "canvas");      ("resourceId", "canvas");      ObjectNode stencilSetNode = ();      ("namespace", "#");      ("stencilset", stencilSetNode);      Model modelData = ();

    ObjectNode modelObjectNode = ();      (_NAME, name);      (_REVISION, 1);      description = (description);      (_DESCRIPTION, description);      (());      (name);      ((key));

    (modelData);      ((), ().getBytes("utf-8"));

    (() + "/service/editor?id=" + ());    } catch (Exception e) {      ("创建模型失败:", e);    }  }

    /**   * 根据Model部署流程   */  @RequestMapping(value = "deploy/{modelId}")  public String deploy(@PathVariable("modelId") String modelId, RedirectAttributes redirectAttributes) {    try {      Model modelData = (modelId);      ObjectNode modelNode = (ObjectNode) new ObjectMapper().readTree((()));      byte[] bpmnBytes = null;

    BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);      bpmnBytes = new BpmnXMLConverter().convertToXML(model);

    String processName = () + ".";      Deployment deployment = ().name(()).addString(processName, new String(bpmnBytes)).deploy();      ("message", "部署成功,部署ID=" + ());    } catch (Exception e) {      ("根据模型部署流程失败: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 = (modelId);      BpmnJsonConverter jsonConverter = new BpmnJsonConverter();      JsonNode editorNode = new ObjectMapper().readTree((()));      BpmnModel bpmnModel = (editorNode);      BpmnXMLConverter xmlConverter = new BpmnXMLConverter();      byte[] bpmnBytes = (bpmnModel);

    ByteArrayInputStream in = new ByteArrayInputStream(bpmnBytes);      (in, ());      String filename = ().getId() + ".";      ("Content-Disposition", "attachment; filename=" + filename);      ();    } catch (Exception e) {      ("导出model的xml文件失败:modelId={}", modelId, e);    }  }

    }</pre>

    ### 2.7 注意事项

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

    <pre class="brush:xml"><property name="processEngineName" value="test"></property></pre>

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

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

    在JVM参数中添加参数:

    > -=UTF-8 -=UTF-8

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

    ## 4. 效果截图

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

    登录[

    ![kft-activiti-demo中的效果截图](/files/2013/03/)![kft-activiti-demo中的效果截图](/files/2013/03/)</model>

  • Activiti6.0中如何设计和关联表单?

  • 新增了环节用户任务,这时紧跟着新增一个表单即可,以及脚本、样式、Web API;删除了环节用户任务,这时可以不用管,为顾及旧版本的流程定义,其对应的表单还需要保留,并不能删除;修改了环节用户任务,比如在 A 环节新增了两个字段,同时在 B 环节减少了两个字段,这时就要为 A、B 两个环节各自重新创建表单、重新创建脚本、样式、以及重新创建Web API,因为表单变了,那么业务也就变了,SQL(表)也都跟着变了。

  • 《Activiti实战》epub下载在线阅读全文,求百度网盘云资源

  • 《Activiti实战》(闫洪磊)电子书网盘下载免费在线阅读

    链接:

    提取码: xdni

    书名:Activiti实战

    豆瓣评分:7.2

    作者:闫洪磊

    出版社: 机械工业出版社

    出版年: 2015-1-1

    页数: 508

    内容简介:

    《Activiti实战 》立足于实践,不仅让读者知其然,全面掌握Activiti架构、功能、用法、技巧和最佳实践,广度足够;而且让读者知其所以然,深入理解Activiti的源代码实现、设计模式和PVM,深度也足够。

    《Activiti实战 》一共四个部分:准备篇(1~2章)介绍了Activiti的概念、特点、应用、体系结构,以及开发环境的搭建和配置;基础篇(3~4章)首先讲解了Activiti Modeler、Activiti Designer两种流程设计工具的详细使用,然后详细讲解了BPMN2.0规范;实战篇(5~14章)系统讲解了Activiti的用法、技巧和最佳实践,包含流程定义、流程实例、任务、子流程、多实例、事件以及监听器等;高级篇(15~21)通过集成WebService、规则引擎、JPA、ESB等各种服务和中间件来阐述了Activiti不仅仅是引擎,实际上是一个BPM平台,最后还通过源代码对它的设计模式及PVM进行了分析。

    作者简介:

    闫洪磊(咖啡兔) 资深软件开发工程师和架构师,为Activiti贡献了大量代码,为Activiti在中国的推广与普及做了大量的工作,在社群中有很高的威望和知名度,被称为中国Activiti领域的第一人。多年来一直从事OA、ERP等系统的开发与架构设计工作,持续关注并深入研究工作流引擎,目前就职于小马购车,担任架构师一职,并负责公司内部工作流平台的建设工作。

    最新文章 更多
    最新素材 更多
    公司介绍 网站地图 图片资讯
    Copyright © 2010-2022 山东找图网络科技有限公司  鲁ICP备18007836号-3  邮箱:15653358549@163.com