在本课中,我们将讨论作用域和引用。这些将帮助您使规则和操作可重用,并访问和管理整个组件中的数据。
您可以在两个范围内声明规则、操作和存储数据:
此外,还有三个范围可用于存储数据:
<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="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>
             
             至此,您已经完成了第二课。下一课将介绍数据变量。