Todos os dados em um componente são salvos como uma variável <context>
. As variáveis podem ser declaradas e inicializadas no fluxo de trabalho ou no escopo da etapa do componente, dependendo de onde você precisar delas:
<context>
<param name="Title" type="string">Please choose one</param>
</context>
Tipos de dados disponíveis: string
, bool
, double
, long
e object
(tipo padrão).
Exemplo de componente
Use a ação setvar
para manipular dados. Essa ação também pode ser usada para declarar e definir variáveis não declaradas.
<setvar id="next_step">
<context_of>workflow</context_of>
<!-- possible values: step, workflow, root, user_session,global -->
<context_update>
<param name="current_step_index" type="long">#{current_step} + 1</param>
<param name="string_concat" type="string">Step #{step_name} with description: #{step_description}</param>
</context_update>
</setvar>
- O elemento <context_of> permite que você defina o escopo no qual a variável é armazenada. Essa ação é usada sempre que você quiser armazenar dados no escopo "root", "user_session" ou "global". Ao usar esses escopos, tenha cuidado com a nomenclatura das variáveis. Certifique-se de que outros componentes/fluxos de trabalho que usam os mesmos nomes de variáveis não causem efeitos colaterais (especialmente se você reutilizar componentes que acessam esses escopos)
Dicas e truques: Ao passar dados entre componentes, você normalmente deve usar um parâmetro de saída em sua ação finish_workflow
. Nesse caso, a saída estará disponível no escopo da etapa inicial de seu componente subsequente. Só use o escopo raiz se isso não for suficiente para você e o gerenciamento dos parâmetros de saída se tornar muito complicado.
O exemplo acima também mostra como as variáveis de dados podem ser acessadas:
Na tag context_update
, duas variáveis são definidas com a mesma ação setvar.
- O primeiro parâmetro
current_step_index
é definido acessando a variável de contexto, #{current_step}
e incrementando-a em 1. - A segunda variável
string_concatsmostra
um exemplo de concatenação de strings com variáveis de contexto existentes.
O acesso às variáveis de dados funciona com o nome delas, começando com '#{' e terminando com '}'.
- Por fim, o escopo especial
user_session
salvará o valor globalmente até que o usuário saia. Ele pode ser acessado mesmo depois que o usuário sair do fluxo de trabalho e entrar no mesmo ou em outro fluxo de trabalho. Ele pode ser acessado usando #{user_session::my_value}
.
Atribuição
Tarefa 1: Vamos testar como o contexto raiz funciona:
- Use a ação
setvar
para salvar a escolha do usuário em uma escolha
de variável raiz. - Insira um componente "Comparação de código" em seu fluxo de trabalho.
- Coloque
#{choice}
no campo de entrada de configuração do componente "Labels -> Component Title". Se você executar o fluxo de trabalho, o valor escolhido deverá ser mostrado no cabeçalho do componente de comparação de código. - Experimente e certifique-se de que a opção seja mostrada corretamente no componente "Code Comparison" (Comparação de códigos).
Tarefa 2: Conforme descrito, o contexto raiz deve ser usado com parcimônia e engloba riscos, especialmente ao reutilizar o componente no mesmo fluxo de trabalho. Reverta as alterações feitas anteriormente (você pode selecionar uma versão mais antiga no painel de fluxo de trabalho, ao lado da opção publicar fluxo de trabalho) ou altere o código existente.
- Em vez disso, salve a opção no escopo do fluxo de trabalho.
- Passe o conteúdo dessa variável como um parâmetro de saída da ação
finish_workflow
. - Coloque seu parâmetro de saída no painel de configuração do componente "Code Comparison" e teste se ele funciona.
Componente de download (pré-atribuição)
Ajuda e recursos
- Documentação para a ação
setvar
. - Documentação para a ação
finish_workflow
.
Notas de solução
Como você viu, é possível até mesmo usar variáveis de contexto no painel de configuração. Isso pode ajudá-lo a configurar componentes com base em ações anteriores do usuário.
Download da solução com a variável raiz
Download da solução com o parâmetro de saída
PERGUNTAS FREQUENTES
Questão: Tentei inserir um componente diferente de "Comparação de código", mas o título agora mostra #{initialChoice}
(ou outro nome de variável) em vez do conteúdo real da variável. Por quê?
Resposta: Nem todos os nossos componentes padrão são escritos de forma a permitir a avaliação imediata da variável no layout. Você poderia alterar qualquer componente para que ele funcione, mas isso envolve o conhecimento da interface do usuário e da configuração do componente, que discutiremos em lições posteriores. A diferença entre o componente "Comparação de código" e alguns outros é que o componente de comparação de código insere o valor da configuração diretamente no mapeamento, enquanto os outros componentes inicializam uma variável de contexto com a configuração. Uma maneira simples de fazer isso funcionar para outros componentes é colocar o valor da configuração diretamente no mapeamento ou no layout, por exemplo:
<mapping>
<ui_element name="Topic">
<param name="content">§{configuration.labels.value.title.value}§</param>
</ui_element>
</mapping>
Agora você terminou a terceira lição. A próxima lição abordará profundamente as expressões de regras.