组件 是用 XML 编写的,您可以通过写下其规则来实现所需的行为,这些规则是 if A then B 语句。
例如,要求是在检查机器时,如果用户按下“相机”按钮,则设备的内部相机将启动。
同样的规则可以表达为更接近实现:
如果我们在 step
“inspect_machine”中并且“command
相机”发生, event
则执行 action
“start_camera”。
组件的典型结构框架如下:
<workflow [属性]> <上下文> [...] </context> // 数据变量, optional <rules> [...] </rules> // 如果 [表达式] 则 [操作]; 可选 <操作> [...] </actions> // 可选 <步骤> 步骤<步骤 [属性]> <状态> <onresume> [...] </onresume> // 可选 <onevent> [...] </onevent> // 可选 [...] </状态> <映射> [...] </映射> </步骤> [...] </steps> </workflow>
在继续举例之前,下面是 XML 标记的概述:
工作流程为:
<?xml version=“1.0” encoding=“UTF-8” standalone=“no”?> <workflow xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” wfd_version=“1.0” reporting=“false” id=“choice” name=“choice” descriptor=“Choice component” startstep=“choose” xsi:noNamespaceSchemaLocation=“../../../configuration/workflow.xsd“> <steps> <step id=”choose“ descriptor=”用户在两个选项之间进行选择“ uitemplate=”ChoiceScreen“> <states> <onevent> <rule id=”menu_button_selection“> <expression>#{event:command} == 'APPLE' || #{event:command} == 'PEAR'</expression> <actions> <finish_workflow id=”finish_workflow“> <output> <参数名称=“selected_button” type=“string”>#{event:command}</param> </output> </finish_workflow> </actions> </rule> </onevent> </states>< /step> </steps> </workflow>
1. 工作流标签包含属性 startstep=“choose”。这用于选择初始化组件后将首先执行的步骤。
2. <step id="choose"...
用于指代将使用 uitemplate="ChoiceScreen"
进一步显示的选项。ChoiceScreen 是一个文件,用于定义我们执行此步骤时屏幕上显示的内容。
如前所述,组件的行为是使用规则定义的。规则由表达式(或条件)以及当该条件为 True 时要执行的操作组成。每个规则都分配给状态<onenter>
之一 、 <onresume>
、 <onleave>
或 <onevent>
<onpause>
。仅当组件处于该状态时(例如,onenter - 组件首次启动时),才会检查规则。
3. <rule id="menu_button_selection">
分配给<onevent>
状态。每当事件发生时,都会检查提供给此状态的所有规则。在这里,<expression>#{event:command} == 'APPLE' || #{event:command} == 'PEAR'</expression>
检查事件是否包含特定命令。当通过语音命令或按下屏幕上的按钮触发名为“APPLE”或“PEAR”的按钮时,将激活此类事件。
4. 如果规则表达式的计算结果为 true,则执行规则<actions>
标签中的一组操作。在此示例中,使用该finish_workflow
操作。一旦用户选择了两个选项之一,这将立即离开组件,并传递在参数中<output>
所做的选择,以便我们可以根据该选择在工作流图中创建不同的过渡。
假设您要扩展我们的选择组件,以 将包含用户选择的消息 发送回 Frontline Connector(后者可以将此信息传达给后端系统)。请考虑以下问题:
操作 是我们可以使用的基本构建块。它们的范围从更改用户看到的内容(颜色、文本、通知,...)到通过管理数据和与 Frontline Connector 或外部设备通信来控制程序的流程(过渡到下一步)。
首先,您可能会争辩说,与 Frontline Connector 通信是一项单独的功能,应该有自己的组件。你是绝对正确的:将通信方面分离到它自己的组件中将使两个组件都更易于重用。另一方面,有时您希望通过将多个功能放在一个组件中来简化 Frontline Creator Interface 中为客户显示的流程。现在,假设我们将这两个功能组合在一个组件中。
以前,您被告知步骤等同于屏幕。那么,如果附加功能只是后端通信,为什么还要有多个步骤呢?
答案是可维护性和可重用性。可维护性,因为在对通信方面进行更改时,您只需要查看该步骤,而无需阅读任何其他代码。可重用性,因为如果组件变得更加复杂,您还可以使用相同的步骤发送不同的消息。
同样,最好将这两个功能的两个独立组件放在一起。如果将它们组合到一个组件中,则至少创建单独的步骤是一个好主意。只需使屏幕看起来相同,或添加来自连接器的进度通知确认即可。因此,我们建议这里有两个步骤,例如“选择”和“message_connector”。
本问题的主要目的是让您熟悉“操作”目录。以下是在实施过程中可能使用的操作示例:
至此,您现在已经完成了第一课。下一课将介绍范围,并涵盖您的第一个实际作业。