Skip to content

glenlivet/ik-activiti

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 

Repository files navigation

ik-activiti

activiti study

流程记录的设计

什么是流程记录

  • 流程中,每发生一个重要事件,都需要有一条信息记录,其类似activity的概念,但又比后者更宽泛。
  • 包括:用户任务(UserTask)的执行记录,自动任务的执行记录,沟通,转办,驳回,会签等业务动作的记录等等

转办

  • 用spring aop来实现
  • 通用接口实现代审查询
  • 拦截接口方法,审查当前用户是否有代理任务,有则将被代理人的代审纪录一并返回。
  • 沟通、会签都不能转办。沟通、会签都有明确的目标性。沟通、会签都提供撤销,从而解决了无人会签的问题。
  • 转办分为 永久转办 和 临时代理。永久转办,则该任务彻底交由他人处理;临时代理,则有实效性,在被代理人撤销代理后,自动恢复原办理人。
  • 临时代理,有一张代理表纪录,被代理人、代理人、起始时间、截止时间、有效标志。当代理人也申请临时代理时,会将和他相关的纪录的代理人一并改为他的代理人,从而达到代理移植的特性。被代理人关闭代理,则会删除代理纪录。

关于沟通的实现

沟通的需求为:

  • 在流程任何人工步骤中,都可以找若干个(一个或多个)人员进行沟通,让他们给出意见。
  • 沟通发起人可以提供一条沟通事由
  • 沟通人员可以为流程提供 反馈信息和附件
  • 沟通不必作为主流程的过程必要条件,即使发出了沟通,不需要等所有人沟通回复后,才能继续。 沟通发起人随时可以继续流程,忽略之后的沟通回复。

暂时考虑的实现方式为:

  • 因为沟通人数不定,抽象为每向一个人沟通为一个子流程,可以并发多个子流程来达到向多人沟通的目的。
  • 被沟通的人还可以再沟通给其他人。
  • 沟通记录为:开始沟通时,记录 沟通人开始沟通。查看沟通详情(链接),点击后进入沟通详情页面。
  • 沟通有时效性,沟通发起人可以在发起一个沟通后,任意时间,结束沟通,则流程记录中多记录一条数据,标识沟通结束。
  • 沟通中,被沟通人可以看到流程信息,可以回复沟通;一旦沟通结束,被沟通人可以查看流程信息,沟通记录,但不可以再回复沟通。

流程撤销

  • 考虑使用事件机制。
  • 发起者可以申请撤销。系统发给该流程实例一个撤销申请事件。流程捕捉该事件,来处理撤销校验。
  • 通过校验,则系统给该流程实例一个撤销批准事件。流程捕捉后,正式撤销。
  • 不通过校验,则系统给发起者一个撤销失败的信息。

关于会签

可以考虑用Multi-instance来实现。以下为示例代码:

<userTask id="miTasks" name="My Task" activiti:assignee="${assignee}">
  <multiInstanceLoopCharacteristics isSequential="false"
     activiti:collection="assigneeList" activiti:elementVariable="assignee" >
    <completionCondition>${nrOfCompletedInstances/nrOfInstances >= 0.6 }</completionCondition>
  </multiInstanceLoopCharacteristics>
</userTask>

关于发起人的设置

  • 用aop实现
  • 在系统发起一个流程时拦截,调用获取发起人的实现,将发起人以runtimeService.addUserIdentityLink的方式注入流程引擎。

About

activiti study

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages