跳到主要内容

工作流的全局配置


在工作流的"配置"页面中可以进行工作流的全局配置,主要分为三大类:流程的基础配置、人工节点的功能配置和流程参数的配置。

一、流程的基础配置

1.流程错误的通知人

当工作流发生错误的时候,可以通知给指定的人,可以通知给流程的拥有者,或者其他指定的人。如果一段时间内,相同的错误信息不需要通知,则可以设置XX时间内不接收相同错误信息。

  • 流程拥有者

    默认为流程的创建人,可以更换,有且只能有1个人。

  • 同时通知其他人

    除了拥有者必须通知外,可以指定通知其他若干人。

通知效果如下:

2.运行方式

同一个工作流可能会因批量操作,同时触发多个流程实例。例如,通过 Excel 导入 100 条数据时,可能瞬间触发 100 次流程。

对于需要同时处理多个流程实例的场景,可以根据业务需求选择 并行执行、顺序执行、严格串行分区严格串行

四种方式的核心区别在于:流程实例之间是否需要排队,以及排队时是否要等前一个流程完全执行完毕。

可选择运行方式的流程类型

只有以下 3 类流程可以选择运行方式:

  • 仅新增记录时删除记录时触发的流程

    常见于通过 Excel 批量导入、新增或删除记录时。例如,一次导入 100 条记录,可能同时触发 100 次流程。

  • 自定义动作触发的流程

    常见于勾选多条记录后,点击按钮批量触发流程。

其他触发方式均采用并行执行,不支持修改运行方式。

子流程和封装业务流程的运行方式,取决于子流程节点或调用封装业务流程节点中配置的运行方式。

四种运行方式的区别如下:

运行方式流程实例如何执行是否等待前一流程完全结束不同业务对象之间
并行执行同时执行不适用同时执行
顺序执行按顺序逐条执行不一定统一排队
严格串行按顺序逐条执行统一排队
分区严格串行同一分区逐条执行不同分区并行

其中,顺序执行严格串行的主要区别是:顺序执行不一定等待前一个流程完全结束;严格串行则要求前一个流程完全结束后,才开始下一个流程。

并行执行

并行执行时,多个流程实例同时运行,不保证执行顺序。这种方式速度快,适合流程实例之间互不影响的场景。

例如,在 Bug 管理应用中,有 19 个 Bug 已经修复,需要通知对应的反馈人进行验证。可以批量勾选 19 个 Bug,然后点击【通知验证】按钮执行通知工作流。这 19 个流程互不影响、没有先后顺序要求,因此适合并行执行。

并行执行时的排序: 无序,不保证流程实例的执行顺序。

顺序执行

顺序执行时,多个流程实例按一定顺序逐条启动,适用于流程实例之间存在数据影响、需要控制处理顺序的场景。

例如,在《领用申请》表中,新增一条领用记录后,工作流需要从库存中查询空闲设备并扣减库存。假设笔记本库存为 10 台,3 个人同时提交申请、每人领用 5 台。如果并行执行,3 个流程可能同时查询到库存为 10 台,再分别扣减,导致库存被超额扣减。

此时需要让流程按顺序执行:

  1. 第 1 个人的申请流程执行时,库存为 10 台,领用 5 台后剩余 5 台。
  2. 第 2 个人的申请流程执行时,库存为 5 台,领用 5 台后剩余 0 台。
  3. 第 3 个人的申请流程执行时,库存不足,流程中止。

顺序执行时的排序规则:

  • 手动逐条勾选后批量触发:按勾选顺序执行。
  • 全选记录后批量触发:按当前页面的排序,从上到下逐条执行。
  • 新增记录触发:按记录的创建顺序执行。

前一条流程在什么情况下开始下一条流程

顺序执行并不要求前一条流程完全结束,下一条才开始。出现以下情况时,即可开始执行下一条流程:

  • 当前流程正常执行完成。
  • 当前流程异常中止。
  • 当前流程进入延时节点。
  • 当前流程进入审批或填写节点。由于等待时间不确定,进入此类节点后即可开始下一条流程。
  • 当前流程进入子流程或封装业务流程。

进入子流程或封装业务流程时,是否等待其执行完成,取决于当前节点的配置:

  • 勾选了【等待子流程执行完毕后再执行后续节点】:批量流程排队执行时不会等待子流程执行完成,当前流程进入子流程后即可开始下一条流程。
  • 未勾选:当前流程继续执行后续节点,等当前主流程正常执行完毕后,才开始下一条流程

严格串行

顺序执行只保证流程按顺序启动,遇到延时、审批、填写、子流程或封装业务流程等情况时,可能会提前开始下一条流程。如果业务要求前一条流程完全结束后,下一条流程才能开始,可以使用严格串行。

严格串行会等待当前流程及其子流程、封装业务流程全部执行完毕,再开始下一条流程。这种方式安全性最高,但速度最慢,因为所有流程实例共用一个全局队列——即使两条流程处理的是完全无关的数据,也必须依次等待。

严格串行方式下,前一条流程在什么情况下开始下一条流程:

  • 当前流程完全正常执行完毕,包括流程中的子流程、封装业务流程全部执行完毕。
  • 当前流程异常中止。

分区严格串行

严格串行虽然能保证流程完全按顺序执行,但所有流程实例共用一个全局队列。例如,领用 A 物料的流程正在执行时,领用 B 物料的流程也必须等待——对彼此无关的业务对象,这种等待没有必要。

分区严格串行通过将流程实例划分到不同分区,在保证同一业务对象严格串行的同时,让不同业务对象可以并行处理。它的核心不是"按字段排序",而是按字段值划分独立队列

  • 字段值相同的记录:归入同一分区。
  • 同一分区内:严格串行执行,上一条流程完全执行完毕后,才开始下一条。
  • 不同分区之间:并行执行,互不等待。

相当于将一个全局队列,拆分成多个互不干扰的小队列。

经典场景:库存扣减 / 防超卖

仍以《领用申请》表为例,多人同时对同一物料提交领用申请。

  • 采用并行执行:多个流程可能同时读到相同的库存数量,分别扣减后写回,导致库存被超额扣减。
  • 采用严格串行:所有物料的领用流程共用一个队列,领用 A 物料的流程执行时,领用 B 物料的流程也必须等待,尽管两者毫无关系。
  • 采用分区严格串行,按【物品】字段分区:同一物品的领用流程进入同一分区,依次执行,确保库存扣减不冲突;不同物品的领用流程进入不同分区,可同时执行、互不影响。

分区字段怎么选

分区字段决定了"哪些流程实例之间需要互相排队"。选择前应先明确一个问题:哪些流程实例之间存在数据竞争、需要互相等待? 然后选择能够稳定标识这些业务对象的字段作为分区字段,例如商品、物料、账户、客户、订单等唯一标识,而不是流程执行过程中会变化的数值字段。

  • 正确:按【商品】分区 → 同一商品的订单排队扣减【库存数量】。
  • 错误:按【库存数量】分区 → 不同商品只要库存数量相同,就会被分到同一分区;而同一商品在库存变化后,又可能被分到不同分区,导致原本需要排队的流程反而并行执行。

分区严格串行方式下,同一分区内前一条流程在什么情况下开始下一条流程:

  • 当前流程完全正常执行完毕,包括流程中的子流程、封装业务流程全部执行完毕。
  • 当前流程异常中止。

3、数据格式

数值字段的小数位数

工作表中的数值字段可以设置显示的小数位数,在当前流程的分支节点中使用数值时,可以选择按原始值比较,还是按设置的小数位数比较。

仅支持分支节点的条件判断时使用,其他节点使用时始终是原始值。

例如,数值字段存储的值为3.14159,按字段原始值取所有小数位数,参与比较的值为3.14159;如果按字段配置中的小数位数(配置的2位小数),参与比较的值为3.14.

系统字段中的日期值

在工作流的"配置"页面中,可以设置系统时间字段在工作流中的计算精度。默认为精确到分钟,设置为精确到秒后,所有的工作流系统字段时间以秒进行引用和计算。

系统时间字段主要包括:

  • 工作表 - 创建时间
  • 工作表 - 审批 - 发起时间
  • 工作表 - 审批 - 节点开始(审批块内有效)
  • 工作表 - 审批 - 剩余时间(审批块内有效)
  • 工作流 - 触发时间
  • 流程参数 - 日期时间类型参数
  • 运算节点 - 为日期加减时间 - 输出格式为“日期+时间”的

系统当前时间始终精确到秒

主要作用在:

  • 代码块节点

  • 运算节点

  • 其他使用时间字段的节点中

在获取数据节点中当做查询条件,查询方式是等于或不等于时,日期时间字段始终精确到天去查询,其他查询方式精确到秒。

文本格式化

日期、时间、数值、金额字段支持格式化显示。当用于审批、抄送的摘要字段显示,或作为通知内容时(短信、邮件),可设置以下显示格式:

  • 按原始值显示:直接输出原始数值,如:3141592.6

  • 按字段格式显示:按设定的格式化效果显示,如:3,141,592.6

4、保存节点输入、输出参数

启用后,可以在历史日志中查看单个节点在流程执行时的输入、输出数据。日志保留最近90天的数据。

在查看运行历史中的节点时,动态字段会直接显示为当时的值。

5、触发者查看

工作流【配置】 → 开启或关闭【触发者查看】。

作为流程的触发者,如果您不想让此工作流出现在发起的待办流程中,设为关闭即可。

关闭后,触发者在查看待办流程时,此流程不会出现在发起分类下。

新建的流程默认为关闭状态,如果流程中添加了审批、填写、抄送节点会自动开启(发起审批流程内添加的不会自动开启)

6、触发其他工作流

当前工作流中,如果有更新记录、新增记录、删除记录等节点,这些节点执行后,可能触发其他工作流。

例如: 流程A的节点中,通过新增记录节点向表1新增一行记录。另一条流程B的触发器设置为:当表1有新增记录时触发流程,那么流程A在执行中向表1新增了记录,是符合流程B的触发条件的,到底要不要触发流程B,我们可以通过配置来决定。

  • 允许触发

    即允许触发其他工作流,但是, 如果本流程和其他流程的触发器选择的是同一张表,那么其他流程的触发器中必须指定了触发字段,才能触发。

    如下图, 被触发的流程中,必须要指定触发字段才能被触发。在上例中,流程B触发时必须指定触发的字段。

    如果流程A是按钮触发的,则流程B不需要指定字段。 流程A是自动触发的,流程B才需要指定字段。

  • 只能触发指定工作流

    当前流程的操作,例如修改了其他表的记录数据,会触发相关的N个流程,那么在这N个流程可以选择几个特定的流程才可触发,其他流程不能触发。

    这些流程不一定是本应用下的,也可以是其他应用下的。

  • 不允许触发

    凡是工作流自动处理的数据,都不再触发其他工作流,即使对数据的更改满足了其他工作流的触发条件也不触发。

    注意:点击按钮新增记录,然后执行工作流。是可以触发流程B(新增时触发),因为新的记录是人工创建的,不是工作流自动创建的。

    又如,点击按钮后,通过工作流新增记录,就不会再触发流程B(新增时触发)了,因为新的记录是工作流自动创建的,而流程设置了不运行触发。

二、人工节点(审批、抄送/通知)的配置

本功能仅作用于直接使用审批节点配置的审批流程,对【发送审批流程】内的审批节点无效。

1、撤回和催办

工作流触发后,支持触发流程的人员进行撤回或催办:

  • 撤回

    • 支持指定当某个审批节点通过后,流程不允许触发者撤回。

    • 撤回后流程中止。

  • 催办

    当审批人长时间不进行审批,触发者可点击按钮进行催促,通知审批人加快处理。

如何撤回或催办

审批流程的触发者依次进入【待办】 》 【我发起的】流程列表,打开流程后,可看到撤回和催办按钮。

管理员如何查看工作流是否被撤回

管理员可以通过历史触发的流程中看到状态。

提示

流程被撤回后,已经执行的节点操作不会撤销。
例如流程A的配置:触发节点 》 更新节点》 审批节点 流程触发后,自动执行了更新节点,将字段的值由a修改b, 然后进行审批节点,等待审批,此时如果流程触发者撤回了,则不再继续审批,且b不会改回a。

2、审批自动通过的配置

本功能仅作用于直接使用审批节点配置的审批流程,对【发送审批流程】内的审批节点无效。

  • 1)工作流触发者自动通过

    如果触发流程的触发人员和当前审批节点的审批人是同一个人的话,如果勾选,那么此节点自动通过。如果不勾选,则需要触发者再审批一次。

  • 2)已经审批过该对象的审批人自动通过

    流程中有多个审批节点,例如,审批节点1》审批节点2》审批节点3》审批节点4.

    如果审批节点1和审批节点4,审批的对象记录是同一记录,且审批人是同一个人,那么审批节点3审批通过后,到审批节点4 这一步就可以自动通过审批了,因为他在第1步已经通过了。

  • 3)审批人为空时自动通过

    当审批节点没有设置审批人或者审批人无效时,勾选后,本次审批自动通过。

  • 4)验证必填字段

    主要是针对1)和2)的审批自动通过的场景。 如果当前审批节点配置了必填字段,是否还能自动通过。 如果勾选,则不能自动通过,必须再次审批一次。 如果未勾选,则自动通过。 审批人为空时始终会自动通过。

3、通知节点

是否向流程触发者发送通知。此配置适用此流程中所有的抄送和站内通知节点。

操作者触发了工作流,流程中有通知/抄送节点,会有以下两种情况

  • 节点通知人只有操作者本人, 此节点直接跳过

  • 节点通知人还包括有其他人,则正常执行,但不会向本人发通知

如果您在使用时,发现通知节点不执行,或者收不到通知消息,可以看下这里的配置。

三、流程参数

在流程中定义一个参数对象,就像一个临时的工作流字段一样,可以存放某个字段值,或计算结果,或接收其他流程中传过来的值,然后被其他节点引用。 流程运行结束后,参数值会被清空重置。

  • 参数类型

    目前支持:文本、数值(金额)、日期时间、成员、部门几种类型。

  • 参数名称

    名称必须以字母开头,可以包含数字和下划线。

如何给参数赋值

  • 通过 “更新流程参数” 为本流程参数赋值

  • 在“子流程节点”为子流程的参数赋值

    必须先进入子流程,把子流程的参数配置好,这里才能给子流程的参数赋值,在子流程执行时参数就自动有了初始值。

这篇文档对你有帮助吗?