触发器

Prev Next

了解如何使用触发器在无需编写代码的情况下构建应用逻辑。

This topic is featured in the Basic App Design and Logic course in Tulip University.


在本文中,您将学习:

  • 触发器命令、逻辑及执行行为
  • 构建和组织触发器的最佳实践
  • 常见用例

触发器可让您为应用添加逻辑。您可以使用触发器与设备交互、发送警报、写入数据、与后端系统通信等——所有这些操作均无需编写任何代码。

触发器的常见使用场景包括:

  • **在应用内导航:**使用过渡效果跳转到另一个步骤。
  • **完成应用:**记录应用的元数据。
  • **运行连接器函数以访问后端系统:**使用连接器使 Tulip 能够与第三方系统交互,并通过触发器运行连接器函数。
  • **发送警报:**从应用程序向管理员发送电子邮件或短信警报。这些消息可包含图片、流程状态信息或其他相关信息。
  • **存储数据:**将应用程序的输入数据存储到变量或表中。
  • **使用设备:**对于在流程中需要双手操作的操作员,可添加设备事件(如脚踏开关)的触发器,以进入下一步。

触发器如何工作?

逻辑

触发器采用*“当(when*)-如果(if)-那么(then)-否则(else)”的逻辑结构:

  • 当“Tulip中记录了事件”
  • then“执行操作”或“进行状态转换”。

触发器还可以包含条件逻辑:

  • 当“Tulip中记录了事件”
  • if“满足条件”
  • 则“执行操作”
  • 否则“执行另一项操作”

点击此处了解有关条件触发器逻辑的更多信息。

触发器由 Trigger Event 打包,由操作和条件组成。

触发器可以像下面的示例一样简单:

ex simple trigger

当按下按钮时,则转到下一步。

或者,触发器也可以更复杂,例如扫描条形码时查询后端数据库,并将订单信息作为变量返回。

当条形码扫描仪在当前工作站输出数据时,则通过API Call(经由连接器函数执行)从外部数据库检索订单详情,并将该值存储在变量中。*随后,*触发器还会过渡到下一步。

命令类型

您可以在触发器中使用两种类型的命令:

  1. **操作:**应用中的变更,与步骤切换无关(例如:显示错误消息、发送电子邮件、截取应用屏幕截图)
  2. **过渡:**应用内部的导航事件(例如:跳转到下一步、完成应用、取消应用)。过渡可触发其他触发器(即启动)。例如,您可以创建一个应用级触发器,该触发器会在每次应用完成时触发。

触发器队列

Trigger Event(例如点击按钮)会将触发器添加到一个顺序执行的单线程 Trigger Queue 中,以便在 Tulip Player 中执行。

Trigger queue and events graphpic.png

Trigger Queue 会影响:1.函数: * 函数包含在触发器队列中2.自定义控件: * 自定义控件中逻辑的执行可能会影响触发器队列

Automations

Automations run in the background, not in an app (even if the Automation is initiated by an action performed in the app), and therefore are not added to the trigger queue.

执行顺序

触发器根据Trigger Event (即按钮点击、定时器、表格行选择等)依次按顺序运行。

触发器按顺序运行,这意味着系列中的第一个触发器必须完成后,第二个触发器才会开始执行。这种触发器执行顺序被称为触发器队列。

触发器队列与应用内的其他任务(如变量交互(例如文本输入、复选框)、自定义控件以及自定义控件的 JavaScript)是相互独立的。

触发器中如何使用输入值?

输入值(即变量)是通过引用传递给触发器的。

触发器引用的是触发器执行时变量的输入值。如果输入值在触发器执行前发生变化,触发器将引用最新值。

变量在应用程序中是全局的,因此应用程序中的其他逻辑可以对其进行修改。

:

触发器何时会被取消?

当出现以下情况时,触发器队列中的触发器将被取消,因此不会执行:

  1. 触发器在过渡后被加入队列:当执行过渡操作(例如“下一步”、“完成应用”、“按名称转到步骤”等)时,队列中剩余的任何触发器都会被取消。
  2. **强制关闭 Tulip 播放器:**如果操作员强制关闭播放器(例如,应用程序无响应时),正在运行的触发器中剩余的任何操作以及队列中所有剩余的触发器都将被取消。

错误处理

在以下情况下会发生触发器错误及随后的取消:

  1. 触发器操作错误
  2. 触发器超时

触发器操作错误

NOTE

The Show Error action (show a message to the operator with a red background) does not count as a trigger error.show error trigger (1).png

当触发器中的某个操作发生错误时,该触发器中剩余的操作将被跳过/取消:

发生错误后,默认情况下,队列中以及触发事件中剩余的任何触发器都不会执行以下应用级和步骤级触发器:* 应用启动* 应用完成* 应用取消* 进入步骤* 退出步骤

Trigger error handling ex.gif

对于所有其他类型的触发器(例如“按下按钮时”),“发生错误时停止剩余触发器”开关默认处于禁用状态。

触发器超时

如果某个触发器超时(参见“触发器超时”),队列中所有剩余的触发器都将被取消。

技术行为

触发器运行时

  • 触发器在单个触发器运行时中依次执行。触发器运行时是指触发器在 Tulip 中处于活动执行状态的时段。
  • 触发器绝不会并行执行,也不会与其他触发器在后台同时运行。只有当当前正在运行的触发器结束之后,新的触发器才能开始执行。
  • 在触发器执行期间,操作员仍可与应用程序进行交互(例如点击按钮、操作表格)。这些按钮点击及其他触发器事件会向触发器队列中添加新的触发器。

触发器超时——更新于 LTS15 / r332

**默认触发器超时时间为 10 分钟,**超过此时间后,该触发器及任何剩余操作将被取消,且队列中的所有其他触发器也将被取消。

该 10 分钟超时时限适用于 Trigger Event。例如,如果一次按钮点击触发了 5 个触发器,则触发器队列中的所有 5 个触发器及其各自的操作必须在 10 分钟内执行完毕。

触发器运行 30 秒后,应用程序会向操作员显示以下消息:r331 trigger wait1.png

触发器运行 100 秒后,应用将向操作员显示以下消息:r331 Trigger wait2.png

10 分钟后,触发器被取消,应用程序向操作员显示以下错误消息:r331 trigger cancel2.png

可选的超时设置

可通过以下方法编辑实例的超时设置:

  1. Tulip 可启用或禁用一项设置,该设置允许操作员在触发器运行超过最初 100 秒后手动取消该触发器。请联系 Tulip 支持团队以启用此功能。

  2. Tulip 支持团队可以缩短或延长超时时间。请注意**,Tulip 建议将 10 分钟作为超时时间的起始值,以提高逻辑执行成功的概率。**如果某个触发器执行时间持续超过几分钟,请考虑以下措施:

    • 简化触发器逻辑,以提升操作员体验并降低触发器失败的可能性。
    • 如果可能,请在后台启动自动化流程,以卸载逻辑执行任务,并避免阻碍操作员继续工作。
    • 审查并优化触发器逻辑中对第三方系统的任何依赖(例如:运行缓慢的连接器函数、使用了非最优的 API)。

表记录操作

Record history widget

Inconsistent sequencing of Trigger Actions will result in inconsistent user experience when reviewing audit trails in the Record History Widget.

表记录创建

对于新建表记录,最佳实践是在**“表记录/创建记录**”操作之后立即执行相应的数据操作,以填充新创建的表记录的其他列。

如果在“表记录/创建”操作与填充其他列的操作之间存在其他操作,则该表记录的生成将在记录历史记录小部件中显示为单独的事件。

表记录创建——自 LTS15 / r332 起

从 LTS15 开始**,“表记录 / 创建记录**”和**“数据操作 / 存储**”的顺序表操作将针对同一条记录进行捆绑。这意味着触发器中的“创建”和“数据操作”操作将在一个事务中执行。

如果“创建记录”和“数据操作/存储”操作之间存在任何其他操作(例如对变量或其他表记录的数据操作、连接器函数等),则这两项操作不会被捆绑到同一个事务中。

在下面的示例触发器中,“创建记录”操作和“数据操作/存储”操作将被捆绑,要么全部成功,要么全部失败。如果所有操作均失败,则将通过弹性重试机制一起重试。

**示例 1:对同一表记录的顺序“创建”和“数据操作”**在 LTS15 中,这些操作要么全部成功,要么全部失败,但在 LTS12 之前版本中并非如此。table record create lts15 ex1.png

示例 2:对同一表记录依次执行创建和数据操作,随后执行连接器函数操作在LTS15中,“表记录创建”和“数据操作”操作本身会被打包。无论表操作是否成功,连接器函数操作都可能失败。table record create lts15 ex2.png

在下面的触发器中,“数据操作/存储”操作针对两个不同的表记录进行,因此这些操作不会被打包到单个事务中。

示例 3:针对同一表记录的“表记录/创建”和“数据操作/存储”操作之间夹杂着另一个“数据操作”操作。这些操作不会被打包到单个事务中。table record create lts15 ex4.png

在下面的触发器中,“表记录”操作和“数据操作/存储”操作不会被打包,因为“数据操作/存储”操作的数据输入使用了前一个操作中创建的表记录的元数据。

示例 4:从自身读取数据进行创建和更新。这些操作不会被捆绑到单个事务中。table record create lts15 ex5.png

在捆绑的表更新操作中使用聚合时,聚合值是在更新发生之前确定的。该聚合值不会反映捆绑的表记录更新。

示例 5:使用聚合进行创建和更新这些操作将被捆绑,且聚合值是在创建操作发生之前确定的。create records bundle with aggregations ex1.png

表记录更新

针对同一表记录的连续数据操作将被打包为单个网络请求执行,因此它们会同时发生

涉及表记录的触发操作会根据其操作类型和顺序进行分组。存储位置相同的存储操作会被分组到一个网络请求中。而**“加载记录**”或**“创建记录**”等操作则被视为独立的事务。

为获得最佳性能,建议将针对同一记录的更新操作集中执行——即不要将针对同一记录的更新与其他表或数据操作混杂执行。

示例 1:对同一条记录的顺序更新 这些操作将打包为一个事务:table record update ex1.png

示例 2:由其他操作分隔的同一记录更新由于同一表中的记录更新并非连续进行,因此这些操作不会被捆绑在一起:table record update ex2.png

在下面的触发器中,数据操作/存储操作针对的是两个不同的表记录,因此这些操作不会被打包到单个事务中。

示例 3:对两个不同记录的更新这些操作不会被捆绑到单个事务中。table record create lts15 ex3.png

在捆绑的表更新操作中使用聚合时,聚合值是在更新发生之前计算的。该聚合值不会反映捆绑的表记录更新。

示例 4:包含聚合的更新操作这些操作将被打包,这意味着计算出的聚合值是在更新发生之前确定的。update records bundle with aggregations ex1.png

触发器(表操作)重试——LTS15 / r332 版本新增

触发器仅重试表操作(例如表数据写入、表数据更新、表交互等)。

在触发器运行的 10 分钟内,如果单个表操作失败,则会重试最多 2 分钟。如果 2 分钟后操作仍执行失败,触发器队列中剩余的所有操作和触发器都将被取消。

对于网络容错型触发器,请确保触发器的操作仅包含表交互和数据更新。有关容错型表操作的指导,请参阅“表记录操作”。

Connector function calls, send emails, and machine monitoring would not be network resilient in LTS15.

如果操作意外运行两次,触发器操作的重试不会导致结果重复。这可确保表操作不会多次写入相同的数据。

限制和超时

限制
触发器事件超时- 一旦达到此时间限制,与该事件关联的所有触发器都将报错并从触发器队列中清除。 - LTS15/r332:Trigger Event 的超时时间为 10 分钟。 **- (LTS15/r332 之前):**触发器事件的超时时间为 100 秒。
Trigger Queue- 一旦达到此限制,新的触发事件将被取消且不会执行。 默认情况下,触发器队列最多可容纳 100 个触发事件。
由过渡触发的连续触发器数量——例如:按钮触发过渡到步骤 1 → “步骤打开”运行 2 个触发器 → 过渡到步骤 2 → “步骤关闭”运行 3 个触发器 → “步骤打开”运行 1 个触发器,以此类推。 触发队列最多将执行由一次过渡引发的100 个连续触发 一旦达到此限制,新的过渡触发器将被取消。
过渡触发超时(过渡事件触发超时)——“转到步骤”、“进入步骤”、“退出步骤”等过渡触发器完成的超时时间 **- LTS15/r332:**25 秒(可配置)

触发器的类型

触发器分为三种类型:

应用级触发器

您可以将应用级触发器应用于以下事件:

  • 应用启动
  • 应用完成
  • 应用取消

可在“应用”选项卡中访问应用级触发器。App tab triggers

点击此处了解有关应用级触发器的更多信息。

步骤级触发器

您可以将步骤级触发器应用于以下事件:

  • 按固定时间间隔触发(“定时触发”)
  • 当收到来自机器或设备的输入时(“机器与设备”)
  • 当步骤被打开时
  • 当步骤被关闭时

可在“步骤”选项卡中访问步骤级触发器。Step tab triggers

点击此处了解有关步骤级触发器的更多信息

控件触发器

小部件触发器在按下按钮时被激活。一个步骤中可以包含多个按钮触发器,当操作员在 Tulip Player 中按下相应的按钮时,这些触发器就会被触发。

选择所需的小部件,然后从小部件选项卡中访问小部件触发器。

Widget tab triggers

点击此处了解有关小部件触发器的更多信息。

创建触发器

  1. 在 中,点击**“触发器”部分中的“+”号**。触发器编辑器将打开。
  2. 为触发器命名,以便识别其在应用中的作用。您还可以添加描述以提供更多详细信息。

最佳实践

  • 配置触发器以应对错误:应配置触发器,使其在发生错误时能够继续执行或停止。触发器可能因无效输入、执行错误,或连接器函数失败、表写入尝试失败而报错。
  • 当触发器配置为继续执行时,发生错误的触发器将停止,但后续触发器将继续执行
  • 当触发器配置为“停止”时,“触发器事件”中的其他触发器将被取消。

Trigger error handling ex

  • 避免在包含交互式控件的步骤上设置长时间运行的触发器。控件在交互后会立即发生可视状态变化。虽然操作员会立即看到控件上的操作发生,但由于网络速度慢或连接器运行时间过长,逻辑执行可能会存在轻微延迟。
  • 培训操作员在点击过渡按钮(例如“下一步”)后稍作等待。在步骤中,排在过渡按钮之后的触发器将不会执行。 如果操作员与带有过渡操作的小部件进行交互,他们将留在该步骤上,直到过渡操作执行完毕。例如,如果操作员点击“下一步”,然后在等待期间触发另一个触发器,过渡操作之后剩余的触发器将不会执行。
  • 将长时间运行的连接器和数据更新放在不同的步骤上。涉及敏感数据的交互不应与长时间运行的连接器逻辑放在同一个步骤上。如果操作员在点击长时间运行的触发器或过渡后与该步骤进行交互,则存在关键数据无法被存储的风险。
  • 确保每个步骤的变量仅有一个输入变量。变量不应与相互竞争的输入逻辑共享(即应用程序中多个按钮更新同一个变量),以避免竞争条件。例如,某个触发器捕获了变量的当前值。如果该变量的值在触发器捕获之前发生了变化,则数据将不正确。

进一步阅读