Unofficial Content

Este é um exemplo para lhe mostrar como usar o GXflow na IDE do GeneXus X Evolution. Ele representa um processo simples de reserva de passagens aéreas, que consiste na entrada dos dados da reserva no sistema e os dados do cliente (caso o cliente exista no sistema). Se não existir, será feito o seu cadastro e se o cliente existir, o controle irá simplesmente verificar a disponibilidade. Se a reserva estiver disponível o processo termina e se não estiver disponível, o fluxo irá retornar para que seja atualizado os dados da reserva.

Passo 1: Criando os objetos que serão parte do processo 

Duas transações serão necessárias: Reservas (Reservation) e Clientes (Customer).

Transação de reservas 

trn Reservation

Notas: Para facilitar o entendimento, nós sugerimos definir a atributo ReservationAvailable como um checkbox com os valores 1 e 0 para os estados de 'selecionado' e 'não selecionado', respectivamente. Veja também que o atributo CustomerId está definido para permitir nulos (allow nulls), que é necessário para que o exemplo funcione.

Regras

Regras para fazer com que o atributo ReservationAvailable e seu texto (Textblock) fiquem invisíveis. Neste exemplo, somente poderá ser informada a disponibilidade em um segundo passo, após o cadastro.


ReservationAvailable.Visible = False If Insert;

TextBlockReservationAvailable.Visible = False If Insert;

Transação de clientes 

trn Customer

Procedure AssignToCustomer

Criaremos a seguinte procedure: Quando a reserva e o cliente estiverem cadastrados, este grava o cliente na reserva.

Regras

Parm(in:&ReservationId, in:&CustomerId);

Variáveis

ReservationId (Baseado no atributo ReservationId)

CustomerId (Baseado no atributo CustomerId)

Código


For each

     Where ReservationId = &ReservationId

             CustomerId = &CustomerId

Endfor

Passo 2: Criando o diagrama de atividades que modela o processo

Para adicionar um 'diagrama de atividades', tudo o que precisamos fazer é adicionar um objeto GeneXus de ActivityDiagram, da mesma forma que fazemos com os demais objetos.  

Creating Ticket Reservation Business Process Diagram

Passo 3: Associando os objetos ao diagrama

O primeiro objeto a ser associado será a transação de reservas (Reservation). Para associa-la, arraste da lista de objetos (Folder View) para a linha que conecta o Início (Start) e o fim (End) no diagrama.

basic_guide_wkf_ev_1

Dados relevantes (Relevant data) com o mesmo nome e tipo de dados da(s) chave(s) primária(s) serão criados. Os dados relevantes estarão disponíveis em todo o processo.

O segundo passo consiste em adicionar a condição que verifica se o cliente está gravado na reserva. Arraste da barra de ferramentas (toolbar) o simbolo condicional ao diagrama (por padrão, este está localizado a direita da interface, ao lado da barra de rolagem na altura do início do texto), como mostrado na figura abaixo.

basic_guide_wkf_ev_2

Uma vez  que a condicional tenha sido inserida, nós precisaremos dedinir o que fará com que o fluxo seja normal ou o que fará com que o fluxo tome uma rota alternativa para inserir o cliente. Primeiro precisaremos adicionar a transação de clientes (Customer) no diagrama e conexta-la na com a rota alternativa, como mostrado abaixo:

basic_guide_wkf_ev_3

Nota: Para conectar a condicional na tarefa de 'Cliente' (Customer), clique na borda direita da condicional e arraste-a, criando a seta para o lado esquedo da tarefa. O tipo é definido nas propriedades da rota.

Para completar, será necessário definir a condição que irá fazer com que o fluxo siga uma rota ou outra. Para esta finalidade, a IDE disponibiliza o editor de condições que permite que você determine as condições baseadas nos atributos e dados relevantes. Faça um duplo-clique na seta que liga a condicional ao cliente e entre com a seguinte expressão:

Condition_Editor_wkf

Definindo esta condição, reservas sem clientes preenchidos (customerId = 0) serão desviados. 

Faça um duplo-clique no símbolo condicional e este mostrará as condições, como mostrado na figura abaixo:

 

Conditions_Summary

 

Agora, seguindo o fluxo normal, a transação de reservas será adicionada novamente. Como na primeira utilização desta transação neste fluxo não foi possível informar a disponibilidade (por causa das regras), esta tarefa permite informar se a reserva está disponível para ser utilizada clicando no Checkbox. Iremos mudar o nome da tarefa pressionando F2.

reservation_availability_wkf_ev

Após determinar se a existe a disponibilidade, outra condição precisa ser adicionada para definir o fluxo a ser seguido:

conditional_wkf_ev

Se a reserva estiver disponível, o processo é terminado. Se não estiver disponível, o fluxo então volta a tarefa inicial para que os dados da ordem sejam alterados.

Para completar o fluxo, nós precisamos definir um curso alternativo para ser seguido quando o cliente não for informado na reserva. Então, após cadastrar o cliente, nós teremos que gravar seus dados na reserva automaticamente e seguir para informar a disponibilidade. Para fazer isso, nós devemos adicionar ao fluxo a procedure previamente criada (AssignToCustomer) e a condição como a seguir:

ticket_reservation_diagram

Uma vez que a procedure tenha sido adicionada ao diagrama, os parâmetros (Regra Parm) serão automaticamente avaliados.Se os atributos ou variáveis com o mesmo nome e tipo sejam encontrados como dados relevantes, estes serão iniciados com seus valores correspondentes. Neste caso, as variáveis ?&ReservationId? e ?&CustomerId? terão seus valores setados dos dados relevantes (relevant data).

Passo 4: Executando o processo

Agora então vamos executar o processo e testa-lo.  Antes de executar o processo pela primeira vez, faça um Build All (No menu Build). Este processo só é necessário por uma limitação temporária do Beta 2. Clique com o botão direito no diagrama na lista de objetos (Folder View) e clique em 'RUN' button (Ctrl+F5 ).

Run Diagram

Então, o GeneXus irá fazer todas as ações necessárias para executar este diagrama e mostrará as mudanças que serão necessárias para a execução. Os passos são:

  • Atualizar os objetos do workflow 
  • Especificar os objetos 
  • Gerar os objetos 
  • Compilar os objetos do workflow
  • Impactar o diagrama na base de dados

Pode ser que nem todos os passos sejam executados, pois irá depender das mudanças que foram feitas. Em outras palavras, o GeneXus irá avaliar as alterações e fará somente o que for necessário para a atualização do processo.

Um browser será aberto automaticamente com sua aplicação, como é mostrado na imagem abaixo:

workflow_client_1_ev

Quando o protótipo é executado, uma nova instância do processo a ser testado é gerada. Isso permite que desenvolvedor execute todos os passos sem que sejam definidos os papeis (Grupo de usuários) e que mesmo definido no diagrama, não existe a necessidade de adicionar os papeis ao desenvolvedor. Desta forma, o desenvolvedor executará todos os passos do processo.

Abaixo veremos os casos possíveis deste fluxo: O primeiro caso corresponde ao cliente que não existe e o segundo corresponde ao cliente que já existe no sistema.

Caso 1: Quando o cliente precisa ser cadastrado 

Os detalhes da reserva são digitados e o atributo CustomerId é deixado em branco (O cliente não existe no sistema ainda).

Reservation

A seguir, precisaremos cadastrar o cliente.

Customer_Inbox

Customer_Registration

Quando o cliente e a reserva estejam cadastradas, a procedure irá gravar o cliente na reserva automaticamente pela procedure que criamos.

Para encerrar o processo, devemos somente informar se a reserva estará disponível ou não.

Reservation_Aviability_Inbox

Reservation_Aviability_Exec

Caso 2: Quando o cliente já está cadastrado

Nós criaremos uma nova tarefa como mostrada na figura abaixo e digitaremos os dados da reserva, incluindo o cliente, que neste caso existe cadastrado no sistema.

New_Task_Inbox

Então, a reserva será marcada como 'não disponível' ('not available') e o fluxo retornará para o início, onde os dados da reserva pode ser alterados.

Related links: Structure Editor

 

Last update: February 2024 | © GeneXus. All rights reserved. GeneXus Powered by Globant