Omnia DocumentaçãoRecursos
DocumentaçãoRecursos
Recursos
Voltar | Lista de artigos

Máquinas de Estado: Workflows Avançados

Última alteração a 28/09/2021

(este artigo foi originalmente publicado no blog oficial OMNIA)

No início da semana partilhámos o nosso post introdutório sobre a nossa funcionalidade mais recente, Máquinas de Estado, onde detalhámos todas as  funcionalidades básicas e a user interface. Hoje iremos aprofundar detalhes desta nova funcionalidade, através de exemplos e configurações avançadas.

Neste post iremos abordar os tópicos:

  • Comportamentos In & Out:
  • Assignments;
  • Comentários;
  • Transições Automáticas;
  • Bloquear Atributos e Operações;
  • Data Sources Externos;

App "Partilha de Ideias" (exemplo)

Para efeitos de demonstração das funcionalidades mais avançadas, dentro do mesmo contexto, iremos usar um simples conceito de aplicação ao qual chamámos "Partilha de Ideias". O objetivo desta aplicação é simplesmente permitir aos seus utilizadores submeter ideias de melhoramento à equipa, para que possam ser validadas por um grupo específico e, posteriormente, aprovadas, ou rejeitadas, pelo CEO. O workflow chave no qual nos iremos focar é o da entidade "Ideia", que ira seguir este simples fluxo de estados:

Comportamentos In & Out

Os "In & Out Behaviours" são uma ferramenta muito útil para executar operações quando um estado é alcançado ou abandonado. Ao dar ao programadores a possibilidade de executar código, quando um estado é alcançado ou abandonado, todo o processo se torna muito mais simples e intuitivo.

Um exemplo da utilidade desta ferramenta é a medição do tempo que uma entidade passou num determinado estado. Vamos imaginar que gostaríamos de medir quanto tempo uma "Ideia" passou no estado "In Validation". Após a criação dos atributos "ValidationStart" e "ValidationEnd" (para registar os tempos iniciais e finais), precisaríamos apenas de adicionar uma simples expressão C# nos respetivos campos, da seguinte forma:

  • On State In

  • On State Out

Com estes atributos e expressões C#, temos agora a possibilidade de utilizar estes dados para executar todo o tipo de operações, como manter o registo do tempo que cada "Ideia" passou num determinado estado.

Assignments

Uma das funcionalidades mais comuns de uma máquina de estados é a atribuição (assignment) de uma entidade a um utilizador, ou grupo de utilizadores, baseado no estado em que se encontra.

Exemplo:

Um exemplo claro desta funcionalidade é a atribuição de uma "Ideia" ao "Validation Group", quando esta atinge o "In Validation" state. Desta forma fazemos com que quando uma ideia for submetida, estará apenas visível para o "Validation Group", que irá posteriormente decidir se a ideia avança para o estado "In Aproval", ou não.

Para concretizar este exemplo precisamos apenas de adicionar uma linha de código ao campo "Assign to", no estado "In Validation":

Comentários

Quando lidamos com workflows de aprovação mais comuns, percebemos que um componente muito importante para a tomada de uma decisão, ou execução de uma transição, é a capacidade de incluir um comentário por parte do decisor. Com isto em mente, desenvolvemos uma pequena funcionalidade diretamente na Máquina de Estados, que permite ao programador configurar a adição de uma caixa de comentário.

Há três opções possíveis para lidar com esta funcionalidade:

  • Não incluir caixa de comentários;
  • Incluir caixa de comentários de preenchimento opcional;
  • Incluir caixa de comentários de preenchimento obrigatório;

Exemplo: 

Voltando ao exemplo da app "Partilha de Ideias", percebemos que esta feature seria especialmente útil no estado "Awaiting Validation", onde incluiríamos um campo de comentário de forma a obrigar o grupo de validação (Validation Group) a adicionar um comentário, fornecendo assim uma justificação oficial para à decisão.

Transições Automáticas

Uma transição é tipicamente executada após uma ação do utilizador. Seja a submissão de uma despesa, ou de um pedido de férias, tradicionalmente a transição de um estado para outro está dependente de input do utilizador.

A transição automática é a funcionalidade que permite automatizar transições de estado, baseado em input de dados, sem a necessidade de ação direta de um utilizador.

Exemplo:

Vamos utilizar o exemplo da nossa aplicação "Partilha de Ideias" e simular o workflow em que o CEO da empresa submete uma ideia. Porque ele é o único responsável pela aprovação/rejeição de ideias validadas, o estado "In Approval" torna-se irrelevante. De forma a automatizar esta transição  precisamos apenas de colocar o seguinte código no estado "In Approval", para que a transição para o estado "Approved" seja imediata sempre que seja submetida pelo CEO:

Save

Bloquear Atributos e Operações

Ao lidar com workflows de aprovação, uma necessidade recorrente é a abilidade de facilmente bloquear todos (ou alguns) (d)os atributos de uma entidade, de forma a que seja possível controlar as interações do próximo utilizador. Estas opções são especialmente úteis em workflows de aprovação, onde os responsáveis pela aprovação não devem poder editar o conteúdo submetido, apenas proceder à sua validação.

A nossa funcionalidade "Blocked Attributes & Operations" foi desenvolvida para acelerar exatamente este tipo de desenvolvimentos, permitindo ao programador bloquear todos os campos de uma entidade com apenas um clique, podendo adicionar as excepções desejadas manualmente.

Exemplo:

No seguimento do nosso exemplo da aplicação "Partilha de Ideias", vamos dar enfoque  aos estados "Approved" e "Rejected". Ambos os estados se encontram no final dos workflow e representam o final do processo da nossa entidade "Ideia". De forma a facilmente representar o final do processo, tiramos partido das funcionalidade "Disable all attributes" e "Disable All Operations", efetivamente impedindo a sua edição e transformando os seus atributos read-only. Eis as configurações necessárias para este exemplo:

Data Sources Externos

Uma das particularidades mais fortes da funcionalidade da Máquina de Estados é a sua compatibilidade com Data Sources Externos. Tal, para programadores da plataforma, significa que todos os elementos mencionados previamente neste artigo podem ser aplicados a entidades que se encontrem em Data Sources Externos, facilitando a integração da funcionalidade em projetos com vários Data Sources a atuar em conjunto.

Adicionar aos favoritos ou partilhar este artigo
Esta página foi útil?
Obrigado pelo seu voto.

login para deixar a sua opinião.

Obrigado pelo seu feedback. Iremos analisá-lo para continuarmos a melhorar!
Artigos Relacionados
Primeiros Passos com OMNIA Debugging com o Visual Studio Nova funcionalidade: Máquina de Estados Nova Funcionalidade: Histórico de Entidades Notificações de email