精华内容
下载资源
问答
  • Flowable流程高级课程

    2021-05-27 12:01:16
    本课程是《Flowable流程入门课程》的后续高级课程。在学习本课程前,应先学习入门课程,以掌握相关基础知识。高级课程着重讲解Flowable工作流的高级概念、复杂理论和实战应用。课程内容包括流程管理思想、技术与标准...
  • Flowable流程入门课程

    千人学习 2021-05-08 21:48:22
    课程内容包括Flowable的架构、安装部署与配置、工作流应用开发与运行的主要过程、Flowable流程引擎服务及其API、Flowable主要元素如事件/序列流/网关/活动和任务、Flowable表单引擎的安装配置和引擎服务、Flowable...
  • 华为IPD流程完整版

    2018-12-07 17:58:13
    华为IPD产品研发流程完整版。华为IPD产品研发流程完整版。
  • AUTOSAR架构以及开发流程详细介绍(Vector公司制作-中文版),非常适合初学者以及从事AUTOSAR开发的研究者和工作人员
  • 流程审批管理系统源代码

    热门讨论 2016-10-20 22:13:08
    权限管理,流程审批系统,实现了网上流程的审批。
  • Activiti在线流程设计器

    千次下载 热门讨论 2015-09-16 11:19:05
    忙活了一个星期左右,查找各种资料,终于将Activiti的流程设计器分离出来,与SpringMVC,spring整合了起来,先把工程分享出来,等有时间了在慢慢讲解具体的整合步骤。工程下载之后直接可以运行,只需要改一下数据库...
  • activit自定义流程demo

    热门讨论 2016-07-14 17:24:41
    博客中activiti自定义流程demo
  • 收发文流程实现,以及流程引擎中动态增加节点|临时子流程的使用。流程引擎动态任务实现。


    1.  原始需求
     收发文流程原始需求如下:

    2.  需求说明
     
    2.1. 收文登记
    普通环节处理(普通用户任务)
     
    2.2. 收文拟办
    选择1:领导阅示(1)、领导阅(2)、主办(3)、协办(4)可以选四者之一、四者的自由组合、四者全部;且这四者可以自由组合。
    选择2:移交归档,如果选择移交归档的前提是承办环节必须被办理过,否则不能选择移交归档。
    注意:选择1与选择2是互斥,不能同时选;收文拟办办理完毕后可以补发或撤回领导阅示、领导阅、主办、协办环节上的办理人,当都全部撤回完时,收文拟办会拥有初始时所有操作,不再有补发或撤回操作。
     
    2.3. 领导阅示
    办理完毕后,等待领导阅、主办、协办、承办办理,都办理完毕后流到收文拟办环节。
     
    2.4. 领导阅
    办理完毕后,等待领导阅示、主办、协办、承办办理,都办理完毕后流到收文拟办环节。
    2.5. 主办
    选择1:承办(3.1)、协办(3.2)以选二者之一、二者全部;
    选择2:直接办理完毕,等待领导阅、领导阅示、协办办理,都办理完毕后流到收文拟办环节。
     
    注意:
    1、主办办理完毕后可以补发或撤回承办(3.1)、协办(3.2)环节上的办理人,当都全部撤回完时,主办会拥有初始时所有操作,不再有补发或撤回操作。
     
    2.6. 移交主办
    就是办理权移交给其他人
    2.7. 承办
    选择1:协办;
    选择2:直接办理完毕,等待领导阅、领导阅示、主办、协办办理,都办理完毕后流到收文拟办环节。
    注意:承办办理完毕后可以补发或撤回协办环节上的办理人,当都全部撤回完时,承办会拥有初始时所有操作,不再有补发或撤回操作。
     
    2.8. 协办
    办理完毕,等待领导阅、领导阅示、主办、承办、协办办理,都办理完毕后流到收文拟办环节。
     
    2.9. 移交归档
    流程结束。
     
    3.  收发文需求特色
    上述的收发文流程,需要工作流引擎具有如下几个能力。
    1、任务节点定义人、办理能力。
    2、流程部分区间支持排列组合产生任务的能力。(领导阅、主办、协办、承办)可以随便组合使用。
    3、流程部分区间的任务可能没有连线的概念。任务的办理没有先后顺序,且可以无限的添加和删减。(这个与BPM2.0的部分概念有些冲突)。比如BPM有严格的先后顺序,任务节点必须有出线,否则实例会卡顿不前。流程部分区间的任务可能没有出线和入线。
    4、任务的标记能力。流程部分区间的任务需要进行标记,否则引擎也不知道该区间的任务什么时候创建。
    5、流程要有预测的功能,因为每一个节点可能要指定下一个处理的任务节点。
    6、任务具有选择执行功能。比如流程节点预测要执行的任务节点是a/b两个节点,那么实际执行的时候,可能进行二选一或者全选执行的功能。
     
     
    4.  收发文需求落地
     
    4.1. 流程绘制

    4.2. 流程区间子流程配置
    1、点击容器面板,选择展开子流程。

     
    2、选择流程并删除开始节点,如下所示。

     
    3、对需要执行的节点进行标记,如下所示。

    自定义属性需要增加标记。
    adHocInit true
    只有该标记的节点才可以任意选择创建。
    4、对需要选择执行的任务的节点配置按钮,如下所示。

     
    “可选按钮”可以在任务办理的时候,进行任务的选择。效果如下:

     
     
    5.  收发文需求执行效果
    5.1 流程启动
    在申请事务选项卡中找到发起流程菜单,点击“发起流程”菜单,进入当前流程列表页,我们找到“收发文”并点击该流程,如下所示:

     

    在流程启动页面,我们填写请假表单:开始时间、结束时间、请假天数、请假事由;填写完成之后,点击启动按钮,如下所示:

    5.2 审批流程
    在我的任务选项卡中找到我的任务菜单,点击“我的任务”菜单,进入我的任务列表页,在任务列表页,找到“收文登记”数据,并点击后面的“办理”按钮,如下所示:

    进入办理页面,我们点击“办理”按钮,如下所示:

    5.3 收文登记-办理
    在办理页面,可以看到下一个节点是“收文拟办”可以再次选择下一个节点的审批人员,设置优先级,设置任务标题,填写意见,信息核对无误后点击确定按钮,如下所示:

    5.4 收文拟办-办理
    在我的任务选项卡中找到我的任务菜单,点击“我的任务”菜单,进入我的任务列表页,在任务列表页,找到“收文拟办”数据,并点击后面的“办理”按钮,如下所示:

    在办理页面,点击可选办理,如下所示:

    在办理页面,我们可以看到下一个节点信息多选框:领导阅示、领导阅、协办、主办,根据排列组合方式可知一共有24种情况,我们可以根据实际需求,选择哪些节点成为我们的下一个节点,在此处我们从24种情况中选择稍微复杂的主办,填写意见,并点击确定按钮,如下所示:

    5.5 主办-办理
    在我的任务选项卡中找到我的任务菜单,点击“我的任务”菜单,进入我的任务列表页,在任务列表页,找到“主办”数据,并点击后面的“办理”按钮,如下所示:

     

    在办理页面,点击“可选办理”,如下所示:

    如果在此处您想看流程运转的流程图,可以点击流程图按钮,流程运转情况如下所示:

    在办理页面,我们可以看到下一个节点信息多选框,根据需求说明我们可知,主办的下一个节点可选协办和承办,根据排列组合方式一共有3种情况,此处我们验证两个节点都勾选的情况,并填写审批意见,点击确定按钮,如下所示:

    5.6 协办-办理
    在我的任务选项卡中找到我的任务菜单,点击“我的任务”菜单,进入我的任务列表页,在任务列表页,可以看到有两条数据,一条“协办”数据,另一条“承办”数据;我们可以根据喜好选择先办哪条数据,此处我们选择协办数据,点击该数据后面的办理按钮,如下所示:

    在办理页面,点击“办理”,如下所示:

    如果在此处您想看流程运转的流程图,可以点击流程图按钮,流程运转情况如下所示:

    在办理页面,我们可以看到下一个节点显示:动态流程无需预测,填写审批意见,并点击确定按钮,如下所示:

    5.7 承办-办理
    在我的任务选项卡中找到我的任务菜单,点击“我的任务”菜单,进入我的任务列表页,在任务列表页,现在只可以看到有一条“承办”数据,我们选择承办数据,点击该数据后面的办理按钮,如下所示:

    在办理页面,点击“办理”,如下所示:

    如果在此处您想看流程运转的流程图,可以点击流程图按钮,流程运转情况如下所示:

    在办理页面,我们可以看到下一个节点显示:协办,填写审批意见,并点击确定按钮,如下所示:

    5.8 协办-办理
    在我的任务选项卡中找到我的任务菜单,点击“我的任务”菜单,进入我的任务列表页,在任务列表页,现在只可以看到有一条“协办”数据,我们选择协办数据,点击该数据后面的办理按钮,如下所示:

    在办理页面,点击“办理”,如下所示:

    如果在此处您想看流程运转的流程图,可以点击流程图按钮,流程运转情况如下所示:

    在办理页面,我们可以看到下一个节点显示:协办,填写审批意见,并点击确定按钮,如下所示:

    5.9 收文拟办-办理
    在我的任务选项卡中找到我的任务菜单,点击“我的任务”菜单,进入我的任务列表页,在任务列表页,此时只有一条数据“收文拟办”,点击该数据后面的办理按钮,如下所示:

    在办理页面,点击“办理”,如下所示:

    如果在此处您想看流程运转的流程图,可以点击流程图按钮,流程运转情况如下所示:

    在办理页面,我们可以看到下一个节点信息多选框:领导阅示、领导阅、协办、主办,根据排列组合方式可知一共有24种情况,我们可以根据实际需求,选择哪些节点成为我们的下一个节点,在此处我们从24种情况中选择稍微复杂的主办,填写意见,并点击确定按钮,如下所示:

    (后续的操作,可以参考上文操作步骤)
    5.10 移交归档
    如果流程审核完成之后,需要移交归档,则在办理页面,我们选择移交归档,填写意见,并点击确定按钮,如下所示:

    在我的任务选项卡中找到我的任务菜单,点击“我的任务”菜单,进入我的任务列表页,在任务列表页,此时只有一条数据“移交归档”,点击该数据后面的办理按钮,如下所示:

    在办理页面,点击“办理”,如下所示:

    如果在此处您想看流程运转的流程图,可以点击流程图按钮,流程运转情况如下所示:

    在办理页面,我们可以看到下一个节点信息为:结束,填写意见,并点击确定按钮,如下所示:

    流程结束。
     
     

    展开全文
  • web流程图动态绘制-使用raphael

    热门讨论 2015-09-30 10:17:49
    web流程图动态绘制-使用raphael,具体过程和效果看博文 http://blog.csdn.net/evankaka/article/details/48439017
  • 流程图怎么画

    万次阅读 多人点赞 2017-12-20 21:14:49
    最近在看博客的时候发现很多流程图都不是流程图,想画成流程图但是总有些时候会变了样子,所以我就想说说流程图到底因该怎么画。 组成 流程图一般由由圆角矩形、矩形、菱形、平行四边形、箭头组成。 作用 流程图...

    前言

    最近在看博客的时候发现很多流程图都不是流程图,想画成流程图但是总有些时候会变了样子,所以我就想说说流程图到底因该怎么画。

    组成

    流程图一般由由圆角矩形、矩形、菱形、平行四边形、箭头组成。

    作用

    流程图一般都是用圆角矩形来表示“开始”与“结束”,用矩形表示行动方案、普通工作环节,菱形表示判断,平行四边形表示输入输出,箭头表示工作流方向。

     

    例子1

     

    比如说我们要定义两个数a=1,b=2然后进行比较输出大的数,那么流程图如下

     

    例子2

     

    这个流程图是简单描述在登录的时候判断账号和密码的流程图

     

    例子3

    更新上最近画的机房收费系统的流程图

     

    总结

     

    我觉得流程图的画法很简单,它采用的符号也很简单,结构清晰,逻辑性强,便于描述和理解。我们在日常的学习中可以多多的使用,但是也要酌情使用,毕竟流程图是面向过程,而我们编程则用的是面向对象。

     

     

     

    展开全文
  • 【IPD流程学习 二】IPD主要流程

    千次阅读 2020-02-13 17:52:26
    上一篇博客详细论述了产品开发过程中遇到的问题,看来不光是我自己感受到了,其实大家都有那种很累但是又没产出的感觉,是整体的流程机制出了问题,所以才要搞流程变革,而其中和我们开发人员最密切相关的就是IPD...

    上一篇博客详细论述了产品开发过程中遇到的问题,看来不光是我自己感受到了,其实大家都有那种很累但是又没产出的感觉,是整体的流程机制出了问题,所以才要搞流程变革,而其中和我们开发人员最密切相关的就是IPD流程,了解了IPD的目标、核心理念以及涉及人员之后,来详细聊聊IPD的流程。

    1. 概念与设计阶段:项目建立、组织、架构与概要设计的评审
    2. 开发阶段:产品的详细设计、开发测试到上线的迭代流程
    3. 验证阶段:产品的内部验证和客户试用
    4. 发布阶段:已经验证过的产品的正式发布,大面积公开发布
    5. 生命周期阶段:产品对外发布后进入维护、优化甚至下线的一个流程

    在此之前我们只有迭代,也就是只有开发阶段,而且开发阶段还不怎么规范。需要注意的是这5个生命周期也不一定需要全部经历,当然最好是尽量都走,很多情况下如果是比较小的迭代或者敏捷迭代,就不一定需要走。

    概念与设计阶段

    第一个阶段主要就是定义目标和成员,并且分解任务和需求,在进行第一个阶段的时候包含以下几个步骤和涉及的人员:

    步骤步骤目标人员任务内容
    1MM组下达任务书MM组思考以下几个问题:Why:为什么要开发这个产品?What:开发什么产品,从而要满足客户的什么需求?Who:都有谁来参与产品的开发?When:每个阶段的时间安排,比如何时进入开发阶段?How:如何开发这个产品?How much:产品开发的投资收益是多少?
    2组建PDTMM组组建项目组、指派一条龙的项目经理,PDT包括(产品经理、架构师、产品Marketing、服务、运维、软件、安全、测试、项目财务等)
    3Kick OffPDT核心成员项目启动仪式,项目的启动要有仪式感,此时是项目的核心成员参与,包括开发leader等、但此时尚未指派具体工作,具体模块到底由谁做还不确定
    4输出WBS项目经理和架构师WBS(Work Breakdown Structure)项目工作任务分解,进行具体的任务拆解,可能还需要按照模块进行大的拆解,
    5需求分析与架构设计项目经理和产品经理以及架构师有了初步的WBS后,项目经理可以会同相关的产品经理和架构师,主要工作是进行需求分析和架构设计,对产品的需求是怎么理解的、对场景等的理解。架构师也需要做技术路线分析与方案。当然如果有需要,UE/UI需要定义主设计、运维需要定义运维策略,总之这一步就是在WBS的拆解基础上进行详细的产品设计
    6需求与概要设计评审 和技术方案评审MM组和技术委员会第一个TR点,主要包括产品和技术两个方面的评审,是不是符合最开始的项目任务书的要求,以及为什么这么做,这么做有什么风险,评审通过后或者同期,架构师进行需求匹配与分解,产品市场定义运营策略、财务进行成本评估
    7计划决策MM组和技术委员会评审完毕后进入第一个ChekPoint决策点,在评审和资源划分后认为可行 就将项目推入具体的开发阶段

    开发阶段

    第二个阶段就涉及到具体的开发细节了,也就是我们通常认为的迭代主流程,也是耗时最久的一个流程,在此过程中项目经理全程监控项目进度(1-10),架构师团队在正式代码开发前对过程中的需求变更、技术评审等流程提供支持(1-6)、财务在正式代码开发前跟踪成本和费用(1-6)。产品市场在测试阶段开始进行同时产品经理和产品市场可以开始进行局部培训,产品市场可以开始制定发布计划与前期售卖计划(9),除去跨流程的人员外在进行第二个阶段的时候包含以下几个步骤和涉及的人员:

    步骤步骤目标人员任务内容
    1详细设计产品开发测试设计产品经理为主、开发和测试参与帮助进行产品的详细设计,用户场景、用户功能以及规约等形成整体的PRD(产品原型),同步进行的是UE/UI的整体视觉设计、交互设计等出一个视觉设计稿,如有需要还可以确定前期的用户验证
    2详细设计评审项目经理和产品主Owner第二个TR点,详细设计的评审,可以拉一些前端人员或者设计验证组等一起进行详细设计的评审,这个评审一定要特别细腻和完整,成员由项目经理灵活指定
    3任务分解主副leader主leader负责技术开发,辅leader主要负责具体的故事的负责。主副leader要对排期进行评估,分配到人 宣讲之前!这一点非常重要,谁的任务谁参加任务宣讲反讲。
    4宣讲&反讲产品开发测试设计建议产品在宣讲时按照规范结构讲解,先说说背景再到story,把前因后果都讲清楚,设计部分建议设计来讲,建议听讲的开发测试再听到讲完story再统一提出一些问题,不要中途打断
    5一页纸方案开发测试需要开发人员提出一页纸的设计,我个人觉得这个环节特别棒,很多坑在开始前就能通过充分讨论规避掉,接下来的开发任务就是照本宣科就可以了,可以规避很多的开发风险
    6实现方案评审评审技术委员会第三个TR点,一页纸方案的评审,在这个环节主要对一页纸设计的方案进行评审,并进行好的差的的评比
    7开发前后端开发人员正常的开发流程,按照排期和一页纸设计的方案进行正常的开发流程
    8Demo演示开发测试前后端开发人员对开发好的模块给测试进行Demo主流程演示,确认是否达到了可以测试的标准
    9测试环境流程测试测试要进行模块测试、集成测试、labs演示和安全测试,
    10版本上线开发测试产品产品的迭代上线,我认为这里需要加上运维这个角色

    验证阶段

    第三个阶段比较简单,耗时比较短,涉及人员也比较少,在进行第三个阶段的时候包含以下几个步骤和涉及的人员:

    步骤步骤目标人员任务内容
    1早期客户验证销售进行早期的客户验证,在小部分的客户群体进行产品试用,例如推出10-20家左右的客户
    2产品优化与验证项目经理组织对产品进行优化,fix修改,依据客户的反馈对产品进行调整
    3可获得性分析产品经理产品经理依据优化和客户验证进行可获得性分析,为接下里的可获得性决策提供依据
    4可获得性决策MM组和技术委员会第二个ChekPoint决策点,决策是否要将该产品铺开到市场上去

    发布阶段

    在可获得性决策通过后就进入发布阶段,第四个阶段比较简单,耗时比较短,涉及人员也比较少,在进行第四个阶段的时候包含以下几个步骤和涉及的人员:

    步骤步骤目标人员任务内容
    1产品发布与市场宣传产品市场进行产品的发布,产品的宣传和验证
    2产品发布与市场宣传流程项目经理等项目经理对产品进行验收和总结,是产品积累的重要阶段,设计验证组进行盈利分析

    生命周期阶段

    发布完成后进入生命流程阶段,第五个阶段比较简单,耗时比较短,涉及人员也比较少,在进行第五个阶段的时候包含以下几个步骤和涉及的人员:

    步骤步骤目标人员任务内容
    1组建LMTMM组组建LMT,也即产品生命周期管理团队
    2持续产品运营流程产品市场产品市场为主持续进行产品的运营,项目经理和架构师进行产品维护和管理,设计验证组进行维护与改进成本,产品经理和开发进行维护与改进支持
    3下线决策产品市场产品市场决定产品是否需要下线
    4下线决策流程项目经理开发产品下线决策后,项目经理进行产品生命周期终止计划,开发产品进行下线支持
    5退出市场决策MM组第三个ChekPoint决策点,决策产品是否退出市场,退出后IPD流程结束

    了解了整个流程后我觉得最为关键的两个应该就是概念与设计、开发流程,也就是我们的评审和迭代主流程,其它的虽然也重要但是和开发人员其实关系不大,了解了解也没坏处,总体而言整个流程是围绕IPD核心理念设计的。

    展开全文
  • 使用activiti工作流引擎显示流程图时高亮显示流程图中已执行节点和已执行路径方法源代码
  • Flowable 流程实例

    千次阅读 2020-09-28 09:58:46
    流程实例系列 RuntimeService 运行服务类 核心功能 启动实例、查询与实例相关的一些信息 是Flowable的流程执行服务类。可以从这个类中获取很多关于流程执行相关的信息。 实现类为RuntimeServiceImpl 提供了一...

    流程实例系列

    RuntimeService 运行服务类

    核心功能 启动实例、查询与实例相关的一些信息

    是Flowable的流程执行服务类。可以从这个类中获取很多关于流程执行相关的信息。

    实现类为RuntimeServiceImpl

    提供了一系列根据自身业务场景启动流程实例的API

    流程定义、执行实例、流程实例概念

    1. 流程定义类 可以从这里获得资源文件。类似于java类

    2. 流程实例 代表流程定义的执行实例,比如张三请了一天假,他就必须发出一个流程实例的申请

    3. 一个流程实例包括了所有的运行节点。 我们可以用这个对象来了解当前流程实例的进度信息等

    4. 流程实例就表示一个流程从开始到结束的最大流程分支,即一个流程中流程实例只有一个。

    5. 流程实例通常也可以叫做执行实例的根节点

    执行实例.

    1. public interface ProcessInstance extends Execution

    2. 从源代码中可以看出 ProcessInstance就是Execution

    3. 启动流程的时候会首先创建流程实例,然后创键执行实例

    4. 流程运转的过程中永远执行的是自己对应的执行实例

    5. 当所有的执行实例按照规则执行完毕之后,这实例随之结束

    6. flowable用这个对象去描述流程执行的每一个节点

    7. 流程按照流程定义的规则执行一次的过程,就可以表示执行对象Execution

    8. 一个流程中,执行对象可以存在多个,但是流程实例只能有一个

    9. 执行实例的父级或者父级的父级为流程实例

    10. 执行实例可能会暂停到某一个活动节点,需要我们去通过特定的API去完成,然后执行实例继续往下走

    流程实例启动

    使用RuntimeService启动流程实例

    操作的是act_ru_execution表,如果是用户任务节点,同时也会在act_ru_task添加一条记录

    /**
     * 部署流程
     */
    @Test
    public void deploy() {
        DeploymentBuilder deploymentBuilder = repositoryService.createDeployment()
                .category("leave")
                .name("请假流程")
                .addClasspathResource("leave.bpmn");
        //流程部署
        Deployment deploy = deploymentBuilder.deploy();
        System.out.println(deploy.getId());
    }
    
    /**
     * 启动流程实例  根据key
     */
    @Test
    public void startProcessInstanceByKey() {
        String processDefinitionKey = "leave";
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);
        System.out.println(processInstance.getId()+","+processInstance.getActivityId());
    }

    查询个人任务 TaskService(act_ru_task)

    /**
     * 查询个人任务
     */
    
    @Test
    public void createTaskQuery() {
        String assignee = "张三";
        String processDefinitionKey = "leave";
        List<Task> list = taskService.createTaskQuery()
                .taskAssignee(assignee)
                .processDefinitionKey(processDefinitionKey).list();
        list.forEach(v -> System.out.println(v.getId() + " "
                + v.getName() + " " + v.getTaskDefinitionKey()
                + " " + v.getExecutionId() + " " + v.getProcessInstanceId() + " " + v.getCreateTime()));
    }
    1. 从processEngine中应该得到TaskService

    2. 使用TaskService获取到任务查询对象TaskQuery

    3. 为查询对象添加过滤条件,使用taskAssignee指定任务的办理者(即查询指定用户的待办任务),同时可以添加分页排序等过滤条件

    4. 调用list方法进行查询

    5. 任务id、名称、办理人、创建时间可以从act_ru_task表中查到

      完成个人任务

      /**
       * 完成个人任务
       */
      
      @Test
      public void completeTask() {
          String taskId = "20006";
          taskService.complete(taskId);
      }

      对于执行完的任务,Flowable将从act_ru_task表中删除该任务,下一个任务会被插入进来(这两个操作是在一个事物中)

      查询流程状态

      /**
       * 查询流程实例状态 判断流程正在执行还是结束
       */
      
      @Test
      public void createProcessInstanceQuery() {
          String processInstanceId = "30001";
          ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
                  .processInstanceId(processInstanceId).singleResult();
          if (processInstance != null) {
              System.out.println("当前流程实例正在运行");
          } else {
              System.out.println("当前流程实例正在运行");
          }
      }
        /**
           * 查询执行实例状态 判断流程正在执行还是结束
           */
      
          @Test
          public void createExecutionQuery() {
              List<Execution> list = runtimeService.createExecutionQuery().list();
              list.forEach(v-> System.out.println(v.getId()+","+v.getActivityId()));
          }

      历史流程实例查询historyService(act_hi_procinst)

      HistoryService 用于查询act_hi 开头的表

    /**
     * 查询历史流程实例
     */
    
    @Test
    public void createHistoricProcessInstanceQuery() {
        String processInstanceId = "20001";
        HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
        System.out.println("流程实例id"+historicProcessInstance.getId());
        System.out.println("流程定义id"+historicProcessInstance.getProcessDefinitionId());
        System.out.println("开始时间"+historicProcessInstance.getStartTime());
        System.out.println("结束时间"+historicProcessInstance.getEndTime());
    }

    历史活动信息查询 (act_hi_actinst)

    历史活动表 act_hi_actinst 活动节点的数据都会存储在这个表中

    /**
     * 查询历史活动节点
     * select RES.*
     *  FROM ACT_HI_ACTINST RES order by RES.ID_ asc;
     */
    
    @Test
    public void createHistoricActivityInstanceQuery() {
        List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery().list();
        list.forEach(v -> System.out.println(v.getId()));
    }

    历史任务查询(act_hi_taskinst)

    /**
     * 查询历史任务
     * select distinct RES.*
     *  FROM ACT_HI_TASKINST RES order by RES.ID_ asc;
     */
    
    @Test
    public void createHistoricTaskInstanceQuery() {
        List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery().list();
        list.forEach(v -> System.out.println(v.getId()));
    }

    act_hi_taskinst表中的end_time有值,说明任务完成了。为空则任务还在运行,没有结束

    act_hi_taskinst表之后存储任务节点的数据,其他节点的数据不会存储在这个表中

    流程实例涉及到的5张表

    act_ru_execution:正在执行的信息

    act_hi_procinst:已经执行完的历史流程实例信息

    act_hi_actinst:存放历史所有完成的活动

    act_ru_task: 正在执行的任务信息

    act_hi_taskinst:已经执行完的历史任务信息

    流程发起人设置

     

    /**
     * 设置流程实例的启动人
     */
    @Test
    public void setAuthenticatedUserId() {
        String authenticatedUserId = "tyy";
        identityService.setAuthenticatedUserId(authenticatedUserId);
        String processDefinitionKey = "leave";
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);
        System.out.println(processInstance.getId() + "," + processInstance.getActivityId());
    }
    /**
     * 设置流程实例的启动人
     */
    @Test
    public void setAuthenticatedUserId2() {
        String authenticatedUserId = "tyy2";
        Authentication.setAuthenticatedUserId(authenticatedUserId);
        String processDefinitionKey = "leave";
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);
        System.out.println(processInstance.getId() + "," + processInstance.getActivityId());
    }

    开始节点 initator 跟启东人配合才有意义,否则没有意义

    dataObject使用 (act_ru_variable)

    flowable允许开发人员在流程文档中为流程或者子流程定义dataObject元素,该元素可以指定变量的id,名称,数据类型等,支持的数据类型有string、boolean、datetime、double、int、long等。流程实例启动时会将dataObject元素的信息自动转换为流程实例变量的存在,变量名称对应dataobject元素中定义的“name”值

    /**
     * 获取dataObject
     * select *
     * FROM ACT_RU_VARIABLE
     * WHERE EXECUTION_ID_ = '40001' and NAME_= '天数' and TASK_ID_ is null;
     */
    @Test
    public void getDataObject() {
        String executionId = "40001";
        String dataObject = "天数";
        DataObject dataObject1 = runtimeService.getDataObject(executionId, dataObject);
        if (dataObject1 != null) {
            System.out.println(dataObject1.getDataObjectDefinitionKey());
            System.out.println(dataObject1.getDescription());
            System.out.println(dataObject1.getExecutionId());
            System.out.println(dataObject1.getName());
            System.out.println(dataObject1.getValue());
            System.out.println(dataObject1.getType());
        }
    
    }
    
    /**
     * select *
     * FROM ACT_RU_VARIABLE
     * WHERE EXECUTION_ID_ = '40001' and TASK_ID_ is null;
     */
    @Test
    public void getDataObject2() {
        String executionId = "40001";
        Map<String, DataObject> dataObjects = runtimeService.getDataObjects(executionId);
        dataObjects.forEach((s, dataObject) -> {
            System.out.println(dataObject.getDataObjectDefinitionKey());
            System.out.println(dataObject.getDescription());
            System.out.println(dataObject.getExecutionId());
            System.out.println(dataObject.getName());
            System.out.println(dataObject.getValue());
            System.out.println(dataObject.getType());
        });
    }

    流程实例删除

     

    /**
     * 流程实例删除
     */
    @Test
    public void deleteProcessInstance() {
        String processInstanceId = "30001";
        String deleteReason = "测试删除";
        runtimeService.deleteProcessInstance(processInstanceId, deleteReason);
    
    }
    
    
    
    /**
    *级联删除
    */
    
    package com.webcreate.runtimeservicetest;
    
    import org.flowable.common.engine.impl.AbstractEngineConfiguration;
    import org.flowable.common.engine.impl.interceptor.Command;
    import org.flowable.common.engine.impl.interceptor.CommandContext;
    import org.flowable.engine.ProcessEngineConfiguration;
    import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
    
    public class DeleteProcessInstanceIdCaCadeCmd implements Command<Void> {
        String processInstanceId = "";
        String deleteReason = "";
    
        public DeleteProcessInstanceIdCaCadeCmd(String processInstanceId, String deleteReason) {
            this.processInstanceId = processInstanceId;
            this.deleteReason = deleteReason;
        }
    
        @Override
        public Void execute(CommandContext commandContext) {
            AbstractEngineConfiguration currentEngineConfiguration = commandContext.getCurrentEngineConfiguration();
            if (currentEngineConfiguration != null) {
                ProcessEngineConfigurationImpl processEngineConfiguration = (ProcessEngineConfigurationImpl) currentEngineConfiguration;
                processEngineConfiguration.getExecutionEntityManager().deleteProcessInstance(processInstanceId, deleteReason, true);
    
            }
    
            return null;
        }
    }
    
    
    
      /**
         * 流程实例删除  级联删除
         */
        @Test
        public void deleteProcessInstance2() {
            String processInstanceId = "32501";
            String deleteReason = "测试删除";
            managementService.executeCommand(new DeleteProcessInstanceIdCaCadeCmd(processInstanceId, deleteReason));
        }

    流程实例获取运行的活动节点

    /**
     * ### 流程实例获取运行的活动节点
     */
    @Test
    public void getActiveActivityIds() {
        String executionId = "35004";
        List<String> activeActivityIds = runtimeService.getActiveActivityIds(executionId);
        activeActivityIds.forEach(v -> System.out.println(v));
    }

    流程实例启动

    /**
     * ### 根据流程定义ID启动流程
     */
    @Test
    public void startProcessInstanceById() {
        String processDefinitionId="dataobject:1:37504";
         runtimeService.startProcessInstanceById(processDefinitionId);
    }
    /**
     * 启动流程实例  根据key
     */
    @Test
    public void startProcessInstanceByKey() {
        String processDefinitionKey = "leave";
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);
        System.out.println(processInstance.getId()+","+processInstance.getActivityId());
    }

    流程实例的挂起与激活

    /**
     * 判断流程定义是否被挂起
     */
    @Test
    public void isProcessDefinitionSuspended() {
        String processDefinitionId = "leave:1:45004";
        boolean processDefinitionSuspended = repositoryService.isProcessDefinitionSuspended(processDefinitionId);
        System.out.println(processDefinitionSuspended);
    }
    
    /**
     * 流程定义挂起
     * SUSPENSION_STATE_ = 2 表示被挂起
     * SUSPENSION_STATE_ = 1 没有被挂起
     */
    @Test
    public void suspendProcessDefinitionById() {
        String processDefinitionId = "leave:1:45004";
        repositoryService.suspendProcessDefinitionById(processDefinitionId);
    }
    
    /**
     * 流程定义激活
     */
    @Test
    public void activateProcessDefinitionById() {
        String processDefinitionId = "leave:1:45004";
        repositoryService.activateProcessDefinitionById(processDefinitionId);
    }
    
    
    /**
     * 流程定义挂起 同时挂起流程实例
     */
    @Test
    public void activateProcessDefinitionById2() {
        String processDefinitionId = "leave:1:45004";
        repositoryService.suspendProcessDefinitionById(processDefinitionId, true, null);
    }

    通过runtimeService挂起流程实例

    展开全文
  • 制定扩展流程:超高速发展的企业扩展技术平台所需的流程,包括故障和问题管理、危机管理、变更管理、确定余量、风险管理、性能和压力测试、回退等。构建可扩展的方案:通过AKF扩展立方识别扩展需求,选择最佳的...
  • 销售关乎企业生死,可是很多企业的销售流程体系是散乱无序、效率低下;没能洞察市场寻找更多商机,项目线索不够多,即便有了项目线索也因为没能尽早有效跟踪培育线索而失去项目机会;难以快速响应客户需求;面向客户...
  • C#流程图绘制(Netron Light)

    热门讨论 2014-02-16 00:36:17
    外国牛人制作的C#绘制流程图软件 附有英文的文档 可编译,可运行 画出来的图比较简单
  • 软件工程-系统流程

    万次阅读 多人点赞 2019-06-16 16:49:57
    在软件工程可行性研究中需要建立新系统的高层逻辑模型,这个就需要系统流程图了。 作用 系统流程图时描述物理系统的工具 物理系统 所谓物理系统,就是一个具体实现的系统。 与程序流程图的区别 在系统流程图中...
  • 基于HTML5的WEB流程图绘制

    热门讨论 2014-02-18 10:27:43
    基于HTML5的WEB流程图绘制,界面简洁
  • wms 仓储相关的流程图,包括 进货入库 上架 验货 拣货 出库等
  • 流程设计器(新)

    千次下载 热门讨论 2012-04-18 11:34:07
    WEB端的流程设计器 主要使用的技术:VML(缺点:只支持IE浏览器)、Ext和JS操作XML。 事先申明,代码并不是很规范,可能很难阅读,有需要源码的我可以提供,仅供参考。
  • 业务流程图的绘制流程分享(一)

    万次阅读 2018-03-25 09:14:46
    前言:近来一段时间,忙于整理业务流程图,期间,关于流程图的绘制方法和工具也与内部团队和外部做了心得交流,恰好,个人生活也牵涉在买房,婚礼,户口迁移等流程中。不知不觉,伴随着实践与反思,个人所得的系统...
  • 首先我们有一种常见的应用场景,比如我们定义流程文档的时候,通常任务节点的使用会非常的频繁,如果我们将流程文档部署之后,流程实例运行了一段时间突然发现任务节点的名称、分类或者处理人需要修改,这个时候我们...
  • Activiti5.20.0整合spring4.15示例,整合流程编辑器modeler; 项目导入myeclipse后,请先看doc文件夹下的readme.txt说明文档!
  • 什么是业务流程

    千次阅读 2019-06-10 15:29:26
    1.“业务流程”是什么? 业务流程图(transaction flow chart)简称:TFD。 它到底是什么?可以按照“流程流程图→业务流程图”的路径理解: (1)流程(flow): 为了达到“特定目标”而进行的一系列“有先后...
  • 微信小程序登录流程

    千次阅读 2019-05-15 10:41:53
    一、微信小程序官方登录流程图: 二、具体理解 微信小程序客户端(小程序前端) 第三方服务器端(小程序后端) 微信服务器端(微信官方api) 1、客户端获得code值,并将code传给第三方服务端 微信小程序...
  • Flowable 快速入门教程:Flowable 入门开发案例,结合流程设计器详细讲解前言流程设计器集成整体流程图项目结构流程部署启动流程流程节点说明第一审核人节点:实际设置审核人配置信息说明第二审核人:参数设置审核人...
  • 前端项目的开发流程

    千次阅读 2017-06-26 11:13:21
    前端的开发过程中主要有以下流程: 编写代码->单元测试->检查语法->整合代码->生成文档->压缩代码->部署测试环境->测试->发布。 产品最终的结果是原型图,而原型图可以理解为设计的草图 设计师的结果是psd文件,他...
  • redmine中软件项目各角色工作流程制定,包括权限和角色的设置
  • Activity子流程——调用子流程

    千次阅读 2020-06-14 12:11:54
    BPMN2.0区分一般的子流程,通常也称作嵌入式子流程,与调用活动,尽管他们看起来很像。从概念上说,两者都在流程执行到达该活动时,调用一个子流程。区别在于:调用活动引用一个流程定义外部的流程,而subprocess...
  • activity流程变量使用

    千次阅读 2020-06-25 15:39:06
    activity中有一个非常强大的功能就是可以动态设置流程变量,activity的流程变量的用处总结下来,作用有几点,一是可以动态为某个流程节点设置执行条件,在流程运转的过程中进行传递,第二个就是配合网关和监听器一起...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,868,062
精华内容 1,147,224
关键字:

流程