Nesta lição, falaremos sobre escopos e referências. O conhecimento desses elementos o ajudará a criar regras e ações reutilizáveis para acessar e gerenciar dados em todo o componente.
Há dois escopos nos quais você pode declarar regras, ações e dados:
- etapa: Cada etapa de um componente tem seu próprio escopo. Regras, ações e dados definidos aqui não estão disponíveis em outro lugar.
- 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 os componentes.
- user_session: Desde que o usuário não faça logout, os dados armazenados no escopo user_session estarão acessíveis mesmo após o término da 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 for fechado, os dados armazenados no escopo global estarão acessíveis, mesmo que um usuário saia e outro usuário entre.
Componente de exemplo
<workflow [ATTRIBUTES]>
<context> [...] </context> \
<rules> -\
<rule id="menu_button_selection"> --\
<expression>[..]</expression> ---\
<actions> ----\
[...] -----|--> Workflow scope
</actions> ----/
</rule> ---/
</rules> --/
<actions> [...] </actions> -/
<steps>
<step id="stepA" [ATTRIBUTES]>
<context> [...] </context> ----\
<rules> [...] </rules> -----|--> Step scope
<actions> [...] </actions> ----/
<states>
<onevent>
<rule ref="menu_button_selection"/> -------> Referencing a rule from the workflow scope
<rule id="show_notification"> --\
<expression>[..]</expression> ---\
<actions> ----\
[...] -----|--> Direct definition (could still reference a pre-defined action)
</actions> ----/
</rule> ---/
</onevent>
</states>
</step>
<step id="stepB" [ATTRIBUTES]>
<states>
<onevent>
<rule ref="menu_button_selection"/> -------> Referencing a rule from the workflow scope
</onevent>
</states>
</step>
</steps>
</workflow>
Neste exemplo:
- Uma regra com
id="menu_button_selection"
é definida no escopo do fluxo de trabalho e, em seguida, referenciada na etapa id="stepA"
e na etapa id="stepB"
usando o atributo ref
.
Observação: a reutilização de regras e ações torna o comportamento do seu componente consistente, melhora a capacidade de manutenção e minimiza a quantidade de código.
- As IDs dentro de um escopo devem ser exclusivas. Você pode usar IDs idênticas em outros escopos, mas, a menos que tenha um motivo muito bom, recomendamos que não o faça 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 qualquer regra predefinida com o mesmo ID no escopo do fluxo de trabalho. - Você também pode ter regras/ações que sejam necessárias apenas em uma das etapas, mas que sejam 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 forma.
- Por fim, você também pode definir regras e ações diretamente onde elas são necessárias. Essa regra/ação não estará disponível em nenhum outro lugar. Se você sabe 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 ficar pulando para ver a implementação.
Observação: Os IDs devem ser exclusivos em um escopo. Se você copiar e colar uma regra ou ação existente como modelo ao criar uma nova, um erro comum é esquecer de alterar o atributo ID. Crie o hábito de alterar o ID primeiro.
Atribuição
Refatorar nosso componente de escolha:
- Coloque a ação
finish_workflow
no escopo global e faça referência a ela na regra. - Coloque a regra
menu_button_selection
no escopo global e faça referência a ela na etapa. - Certifique-se de que o componente ainda esteja funcionando como planejado.
Componente de download (pré-atribuição)
Ajuda e recursos
Pré-requisitos
Antes de iniciar esta primeira tarefa prática, você precisará acessar o Centro de Comando (FCC) do site Frontline.
- Seu usuário deve ter as funções "Creator" e "Developer".
- Você precisa de um dispositivo inicializado com esse FCC para fins de teste.
- O dispositivo do usuário também deve ter a função "Desenvolvedor".
Para obter mais informações, consulte a seção Pré-requisitos do Guia de instalação.
Aqui estão algumas dicas para facilitar um pouco o desenvolvimento de fluxos de trabalho e componentes:
Modo de visualização
Se os seus usuários tiverem a função "Desenvolvedor", você poderá usar o recurso Modo de visualização. Esse modo permite que você teste imediatamente suas alterações sem precisar publicar o fluxo de trabalho. Você pode usar o modo de visualização de duas maneiras:
- Faça login no seu dispositivo e selecione o modo Preview no menu principal. O dispositivo deve agora mostrar "Waiting for Server" (Aguardando servidor).
- No Frontline Creator, selecione o dispositivo de depuração que está disponível à direita do ícone de salvar fluxo de trabalho e pressione o botão Play ou "Alt + P". Você também pode usar a tecla de atalho "Alt + p" no editor de componentes.
O estado atual do seu fluxo de trabalho será salvo e enviado ao dispositivo. Você pode alterar temporariamente a transição de início para testar apenas um componente específico do seu fluxo de trabalho.
Flipper
É útil configurar uma ferramenta de depuração para que você possa acessar os registros do dispositivo durante a execução do fluxo de trabalho. O Flipper é uma dessas ferramentas.
Registros do servidor e do cliente
Você pode acessar os logs do FCC e do dispositivo fazendo login com o usuário sysadmin ou acessando diretamente a pasta UBIMAX_HOME\logs. Os registros do dispositivo são enviados ao servidor periodicamente, mas você pode solicitar o upload imediato como usuário sysadmin.
Notas de solução
Se você ainda não tinha tudo configurado para o desenvolvimento, essa deveria ter sido a principal tarefa desse primeiro trabalho prático.
Pode ser interessante notar que, na definição da regra, você agora faz referência a uma ação predefinida definida no mesmo escopo. A ordem das tags <actions> e
<rules>
não é importante para que isso funcione. Aqui está a aparência de 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">
<rules>
<rule id="menu_button_selection">
<expression>#{event:command} == 'APPLE' || #{event:command} == 'PEAR'</expression>
<actions>
<action ref="finish_workflow"/>
</actions>
</rule>
</rules>
<actions>
<finish_workflow id="finish_workflow">
<output>
<param name="selected_button" type="string">#{event:command}</param>
</output>
</finish_workflow>
</actions>
<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.