このレッスンでは、スコープと参照について説明します。これらは、ルールとアクションを再利用可能にし、コンポーネント全体のデータにアクセスして管理するのに役立ちます。
ルール、アクションを宣言し、データを格納できるスコープは 2 つあります。
さらに、データの格納に使用できるスコープは 3 つあります。
<workflow [ATTRIBUTES]>
    <context> [...] </context>                              \
    <actions> [...] </actions>                              -\
    <rules>                                                 --\ 
        <rule id="menu_button_selection">                   ---\
            <expression>[..]</expression>----                   \
            <actions>                                       -----|--> ワークフロースコープ
                [...]                                       ----/
            </actions>---                                      /
        </rule>                                             --/
    </rules>                                                -/
                               
    <steps> 
        <step id="stepA" [ATTRIBUTES]>
            <context> [...] </context>----\
            <rules> [...] </rules>                      -----                          |--> Step scope
            <actions> [...] </actions>----                      /
            <states><
                onevent> 
                    <rule ref="menu_button_selection"/>     -------> ワークフロースコープ
                    からのルールの参照<ルール id="show_notification">           --\
                        <expression>[..]</expression>---       \
                        <actions>----                           \
                            [...]                           -----|--> 直接定義 (事前定義されたアクションを参照できます)
                        </actions>                          ----/
                    </rule>---/
                </onevent>                                 < 
            /states><
        /step><
        step id="stepB" [ATTRIBUTES]>
            <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グローバル スコープに配置し、ステップで参照しますここでは、ワークフローとコンポーネントの開発を少し簡単にするためのヒントをいくつか紹介します。
このモードでは、ワークフローを公開することなく、変更をすぐにテストできます。詳細については、「ワークフローのプレビュー」セクションを参照してください。
FCCおよびデバイスログにアクセスするには、sysadminユーザーでログインするか、UBIMAX_HOME\logsフォルダに直接アクセスします。デバイスログは定期的にサーバーにプッシュされますが、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="ユーザーが 2 つのオプションから選択" uitemplate="ChoiceScreen"><
            states>
                <onevent>
                    <rule ref="menu_button_selection"/>
                </onevent>
            </states>
        </step>
    </steps><
/workflowです>
             
             これで、2 回目のレッスンは終了です。次のレッスンでは、データ変数について説明します。