组件 是用 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 标记的概述:

  • <context>:定义要使用的变量(数据)
  • <rules>定义在什么条件下执行一组操作。由一个表达式和一个另一个操作组成
  • <actions>:我们希望在工作流程中使用的预定义操作(例如,启动设备摄像头)。
  • <步骤>:设备上的屏幕,其中包含屏幕的数据(上下文)和逻辑(规则和操作),并链接到用户界面模板
  • <状态>:确定何时检查规则(例如,事件发生时,进入或离开步骤时)
  • <mapping>:将数据(上下文变量)映射到用户界面(在不同的文件中定义)

组件示例

为了更好地理解组件的结构,我们将使用 图像选择 组件的示例。

用户在“Apple”和“Pear”两个选项之间进行选择。相同的组件将用于此培训,并将随着我们的前进而改进。

下载组件

下面的 UI 显示了此组件在 Frontline Workplace 智能眼镜应用程序上执行时的显示方式。

工作流程为:

<?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”。

您可能需要执行哪些操作?

本问题的主要目的是让您熟悉“操作”目录。以下是在实施过程中可能使用的操作示例:

至此,您现在已经完成了第一课。下一课将介绍范围,并涵盖您的第一个实际作业。