在本课中,我们将讨论作用域和引用。这些将帮助您使规则和操作可重用,并访问和管理整个组件中的数据。

您可以在两个范围内声明规则、操作和存储数据:

  • 步:组件的每个步骤都有自己的范围。此处定义的规则、操作和数据在其他地方不可用。
  • 工作流程:组件的所有步骤都可以访问添加到工作流范围的规则、操作和数据。

此外,还有三个范围可用于存储数据:

  • 根:工作流的所有组件都有权访问根范围。这可用于在组件之间传递数据。
  • user_session:只要用户不注销,即使在完成工作流执行后(例如,从另一个工作流内部或多次执行同一工作流时),也可以访问存储在user_session范围内的数据。
  • 全球:只要 Frontline Workplace 应用程序未关闭,就可以访问全局范围内存储的数据,即使用户注销而另一个用户登录也是如此。

示例组件

<workflow [属性]>
    <上下文> [...] </上下文>                              \
    <操作> [...] </actions>                              -\
    <rules>                                                 --\ 
        <rule id=“menu_button_selection”>                   ---\
            <expression>[..]</expression>                   ----\
            <actions>                                       -----|--> 工作流范围
                [...]                                       ----/
            </actions>                                      ---/
        </rule>                                             --/
    </rules>                                                -/
                               
    <steps> 
        <step id=“stepA” [属性]>
            <上下文> [...] </context>                      ----\
            <rules> [...] </rules>                          -----|--> 步骤范围
            <操作> [...] </actions>                      ----/
            <states>
                <onevent> 
                    <rule ref=“menu_button_selection”/>     -------> 从工作流范围

                    引用规则<规则 id=“show_notification”>           --\
                        <expression>[..]</expression>       ---\
                        <actions>                           ----\
                            [...]                           -----|--> 直接定义(仍可引用预定义操作)
                        </actions>                          ----/
                    </rule>                                 ---/
                </onevent> 
            </states>
        </step>

        <step id=“stepB” [属性]>
            <states>
                <onevent> 
                    <rule ref=“menu_button_selection”/>     -------> 引用工作流范围
                中的规则</onevent> 
            </states><
        /step>
    </steps>
</workflow>

在此示例中:

  • 在工作流作用域中定义 的规则,  id="menu_button_selection"然后使用该 ref 属性在步骤 id="stepA" 和步骤 id="stepB" 中引用。

注意: 重用规则和操作可使组件的行为保持一致,提高可维护性,并最大限度地减少代码量。

  • 作用域内的 ID 必须是唯一的。您可以在其他范围内使用相同的 ID,但除非您有很好的理由,否则我们建议不要这样做,以防止混淆。 如果 使用相同的 ID ,则优先级顺序是自下而上的:如果在步骤作用域中直接定义了具有的规则 id="menu_button_selection" ,则将执行该规则,而不是在工作流作用域中执行具有相同 ID 的任何预定义规则。
  • 您可能还具有仅在其中一个步骤中需要的规则/操作,但在该特定步骤的多个状态/规则中需要这些规则/操作。在这种情况下,您可以在步骤范围中定义规则/操作,并以相同的方式引用它。
  • 最后,您还可以直接在需要的地方定义规则和操作。这样的规则/行动在其他任何地方都不可用。如果您知道您的规则/操作不会被重用,则直接定义可以使组件更清晰,因为您不必跳来跳去查看实现。

注意: ID 在作用域内必须是唯一的。如果在创建新规则或操作时将现有规则或操作复制并粘贴为模板,则典型的错误是忘记更改 ID 属性。养成先更改 ID 的习惯。

📌分配

重构我们的选择组件:

  • finish_workflow将操作放入全局范围并在规则中引用它
  • menu_button_selection将规则放入全局范围并在步骤中引用它
  • 确保组件仍按预期工作

下载组件(预分配)

帮助和资源

以下是一些使开发工作流和组件更容易的提示:

预览模式

此模式允许您立即测试更改,而无需发布工作流。有关详细信息,请参阅预览工作流部分。

服务器和客户端日志

您可以通过使用 sysadmin 用户登录或直接访问 UBIMAX_HOME\logs 文件夹来访问 FCC 和设备日志。设备日志会定期推送到服务器,但您可以请求以 sysadmin 用户身份立即上传。

解决方案说明

如果你还没有为开发做好一切准备,那应该是第一个实际任务的主要任务。

值得注意的是,在规则定义中,您现在引用了在同一作用域中定义的预定义操作。和 <rules> 标记的<actions>顺序对于此工作无关紧要。以下是组件的外观:

<?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“>
   
    <actions>
        <finish_workflow id=”finish_workflow“> 
            <output>
                <param name=”selected_button“ type=”string“>#{event:command}</param>
            </output>
        </finish_workflow>
    </actions>
   

    <rules>
        <rule id=”menu_button_selection“>
            <expression>#{event:命令} == 'APPLE' ||#{event:command} == 'PEAR'</expression>
            <actions>
                <action ref=“finish_workflow”/>
            </actions>
        </rule>  
    </rules>

 

    <steps>
        <step id=“choose” descriptor=“用户在两个选项之间进行选择” uitemplate=“ChoiceScreen”><
            states>
                <onevent>
                    <rule ref=“menu_button_selection”/>
                </onevent>
            </states>
        </step>
    </steps>

</workflow>

下载组件(分配后)

至此,您已经完成了第二课。下一课将介绍数据变量。