Nesta lição, falaremos sobre escopos e referências. Isso ajudará você a tornar as regras e ações reutilizáveis e também a acessar e gerenciar dados em todo o componente.

Há dois escopos nos quais você pode declarar regras, ações e armazenar dados:

  • passo: Cada etapa de um componente tem seu próprio escopo. Regras, ações e dados definidos aqui não estão disponíveis em outros lugares.
  • Fluxo de trabalho: Todas as etapas de um componente têm acesso às regras, ações e dados adicionados ao escopo do fluxo de trabalho.

Além disso, há três escopos disponíveis para armazenar dados:

  • raiz: Todos os componentes de um fluxo de trabalho têm acesso ao escopo raiz. Isso pode ser usado para passar dados entre componentes.
  • user_session: Enquanto o usuário não fizer logout, os dados armazenados no escopo user_session estarão acessíveis mesmo depois de concluir a execução do fluxo de trabalho (por exemplo, de dentro de outro fluxo de trabalho ou ao executar o mesmo fluxo de trabalho várias vezes).
  • global: Enquanto o aplicativo Frontline Workplace não estiver fechado, os dados armazenados no escopo global estarão acessíveis, mesmo se um usuário sair e outro entrar.

Componente de exemplo

<fluxo de trabalho [ATRIBUTOS]>
    <contexto> [...] </contexto>                              \
    <ações> [...] </ações>                              -\
    <regras>                                                 --\ 
        <rule id="menu_button_selection">                   ---\
            <expressão>[..] </expressão>                   ----\
            <ações>                                       -----|--> Escopo
                do fluxo de trabalho[...]                                       ----/
            </actions>                                      ---/
        </rule>                                             --/
    </rules>                                                -/
                               
    <steps> 
        <step id="stepA" [ATTRIBUTES]>
            <context> [...] </context>                      ----\
            <rules> [...] </rules>                          -----|--> Etapa escopo
            <ações> [...] </actions>                      ----/
            <states>
                <onevent> 
                    <rule ref="menu_button_selection"/>     -------> Fazendo referência a uma regra do fluxo de trabalho scope

                    <rule id="show_notification">           --\<
                        expression>[..] </expressão>       ---\
                        <ações>                           ----\
                            [...]                           -----|--> Definição direta (ainda pode fazer referência a uma ação predefinida)
                        </actions>                          ----/
                    </rule>                                 ---/
                </onevent> 
            </states>
        </step>

        <step id="stepB" [ATTRIBUTES]>
            <states>
                <onevent> 
                    <rule ref="menu_button_selection"/>     -------> Referenciando uma regra do escopo
                do fluxo de trabalho</onevent>< 
            /states><
        /step>
    </passos>
</fluxo de trabalho>

Neste exemplo:

  • Uma regra com id="menu_button_selection" é definida no escopo do fluxo de trabalho e, em seguida, referenciada em etapa id="stepA" e etapa id="stepB" usando o ref atributo.

Nota: A reutilização de regras e ações torna o comportamento do componente consistente, melhora a capacidade de manutenção e minimiza a quantidade de código.

  • Os IDs dentro de um escopo precisam ser exclusivos. Você pode usar IDs idênticos em outros escopos, mas a menos que você tenha um bom motivo, recomendamos não fazê-lo, para evitar confusão. Se você usar IDs idênticos, a ordem de precedência será de baixo para cima: se uma regra com id="menu_button_selection" for definida diretamente no escopo da etapa, ela será executada em vez de quaisquer regras predefinidas com a mesma ID no escopo do fluxo de trabalho.
  • Você também pode ter regras/ações que são necessárias apenas em uma de suas etapas, mas são necessárias em vários estados/regras dessa etapa específica. Nesse caso, você pode definir a regra/ação no escopo da etapa e fazer referência a ela da mesma maneira.
  • Por fim, você também pode definir regras e ações diretamente onde elas são necessárias. Tal regra/ação não estará disponível em nenhum outro lugar. Se você souber que sua regra/ação não será reutilizada, uma definição direta pode tornar o componente mais legível, já que você não precisa pular para ver a implementação.

Observação: os IDs precisam ser exclusivos dentro de um escopo. Se você copiar e colar uma regra ou ação existente como um modelo ao criar uma nova, um erro típico é esquecer de alterar o atributo ID. Crie o hábito de alterar o ID primeiro.

📌Designação

Refatore nosso componente de escolha:

  • Coloque a finish_workflow ação no escopo global e faça referência a ela na regra
  • Coloque a menu_button_selection regra no escopo global e faça referência a ela na etapa
  • Verifique se o componente ainda funciona como pretendido

Componente de Download (Pré-Atribuição)

Ajuda e Recursos

Aqui estão algumas dicas para tornar o desenvolvimento de fluxos de trabalho e componentes um pouco mais fácil:

Modo de visualização

Esse modo permite que você teste imediatamente suas alterações sem precisar publicar o fluxo de trabalho. Para obter mais informações, consulte a seção Visualizar fluxo de trabalho.

Logs de servidor e cliente

Você pode acessar o FCC e os logs do dispositivo fazendo login com o usuário sysadmin ou acessando diretamente sua pasta UBIMAX_HOME\logs. Os logs do dispositivo são enviados para o servidor periodicamente, mas você pode solicitar o upload imediato como um usuário sysadmin.

Notas da solução

Se você ainda não tinha tudo pronto para o desenvolvimento, essa deveria ter sido a principal tarefa para este primeiro trabalho prático.

Vale ressaltar que, na definição da regra, você agora faz referência a uma ação predefinida definida no mesmo escopo. A ordem das <actions>tags e <rules> não importa para que isso funcione. Veja como deve ser a aparência do seu componente:

<?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: comando} == 'APPLE' || #{event:command} == 'PEAR'</expression>
            <actions>
                <action ref="finish_workflow"/>
            </actions>
        </rule><  
    /rules>

 

    <steps>
        <step id="choose" descriptor="the user selects between two options" uitemplate="ChoiceScreen">
            <states>
                <onevent><
                    rule ref="menu_button_selection"/>
                </onevent>
            </states>
        </step>
    </steps>

</workflow>

Componente de Download (Pós-Atribuição)

Com isso, você terminou a segunda lição. A próxima lição será sobre variáveis de dados.