Neste quarto e último artigo da série “BPMN: Modelando processos de negócio com elementos avançados”, abordaremos de forma especial o subprocesso de eventos, levando em conta as definições de notação.
Subprocesso Eventual (Event-Subprocess)
O subprocesso eventual é parte opcional do processo e é utilizado para tratar com eventos excepcionais que ocorrem no processo pai.
Subprocessos eventuais são acionados pela ocorrência de um evento previsto durante a execução do processo principal. Assemelham-se a outros tipos de subprocessos contidos dentro de um processo pai (e não são reutilizáveis), mas dintinguem-se de outros subprocessos, pois não são ligados ao fluxo de sequência do processo principal, uma vez que só serão iniciados quando a trigger do evento de início for acionada.
O Subprocesso eventual é representado graficamente por um retângulo com bordas arredondadas e linha tracejada. Na forma contraída, apresenta um símbolo [+] na base inferior implicando no entendimento que esta atividade contém um conjunto de tarefas. Também pode ser representado na forma expandida, demostrando assim seu fluxo no processo pai.
Um subprocesso de eventos pode ter somente um evento de início e este evento deverá ser necessariamente disparado por algum fato específico que gere seu início (catch). Em outra palavras, o subprocesso eventual não pode ser representado pelo evento de início “none”.
Este fato específico (que gera o início do subprocesso de evento) pode significar as mais diferentes informações. Vejamos as mais comuns:
- Um fato temporal: uma data (Ex. 01 de março) – Simbolizado por um relógio.
- Por uma mensagem: Com a chegada de uma informação (Ex. Um documento, um e-mail, um telefonema) – Simbolizado pelo envelope branco.
- Uma condição: Ex. Estoque menor que 10 unidades – Simbolizado por formulário.
- Um sinal: Quando algo estiver errado (Ex. Sistema do cumprimento do pedido não respondido) – Simbolizado por um triângulo vazado.
Para mais informações sobre eventos confira os artigos Um guia para iniciar estudos em BPMN (III): Eventos de Início e Fim e Um guia para iniciar estudos em BPMN (IV): Eventos Intermediários.
Event-Subprocess Interrupting e Event-Subprocess Non-Interrupting
Falando um pouco mais sobre o evento de início de um subprocesso eventual, apontamos dois tipos que definem qual o impacto que o subprocesso causará no processo pai. São eles:
Event-Subprocess Interrupting – Evento que interrompe o fluxo do processo principal (pai). Representado por um círculo com linha contínua.
Event-Subprocess Non-Interrupting – Evento que não interrompe o fluxo do processo pai. O processo ocorre em paralelo. Representado por um círculo com linha tracejada.
O exemplo a seguir demonstra o uso de subprocessos eventuais, em um processo muito comum de “Pedido de Reservas”, envolvendo reservas de voo e hotel.
Durante a execução deste processo, podem ocorrer o disparo de qualquer um dos dois subprocessos eventuais:
1 – Pode ocorrer o cancelamento do processo de reservas, interrompendo o processo de negócio e com isso finalizando a solicitação de reservas. Veja que o evento que inicializa o subprocesso eventual de cancelamento é representado graficamente com uma borda de linha contínua (Event-Subprocess Interrupting). Isso significa que ele interromperá a execução do processo principal, e executará este subprocesso.
2- Caso o processo não seja cancelado, o cliente pode enviar um pedido de “Status”, retornando a informação da situação do pedido das reservas. Como o evento que inicializa este subprocesso é representado com uma borda com linha tracejada (Event-Subprocess Non-Interrupting), o processo principal não é interrompido, com isso subprocesso eventual é executado em paralelo ao processo principal, fazendo com que o pedido de status seja atendido paralelamente às atividades do processo pai.
Importante:
– O subprocesso eventual non-interrupting pode ser executado várias vezes durante a execução de um processo, e pode ter várias instâncias em execução em paralelo.
– Uma vez que o processo principal tenha sido concluído, mesmo que o fato gerador do evento ocorra, o subprocesso eventual não será acionado, pois seu ciclo de vida depende do processo principal. Por exemplo, o cliente solicita o pedido de status do pedido porém o processo principal já foi finalizado, este pedido não será processado.
Confira todos os artigos deste guia de BPMN: Modelando processos de negócio com elementos avançados:
- BPMN: Modelando processos de negócio com elementos avançados (Parte I): Marcadores de Atividades
- BPMN: Modelando processos de negócio com elementos avançados (Parte II): Continuação Marcadores de Atividades
- BPMN: Modelando processos de negócio com elementos avançados (Parte III): Gateways
- BPMN: Modelando processos de negócio com elementos avançados (Parte IV): Subprocesso eventual (você está aqui)
14 Responses
Muito bom! Tive muitas dúvidas esclarecidas, no entanto, gostaria de saber como ficaria a modelagem caso o subprocesso tenha limitações para ser executado, por exemplo, somente pudesse ser executado a partir de uma certa atividade e antes da finalização do processo. No caso do cancelamento, como seria modelado o subprocesso caso ele só pudesse ocorrer depois da atividade “verificar ordem”. Muito obrigado!
Olá, Túlio,
Antes de mais nada, desculpe pela demora para responder, gostaria também de agradecer por sua participação em nosso blog.
Respondendo sua pergunta, em termos de notação não há restrições, não temos como dizer que um Event-Subprocess seria executado apenas após uma determinada atividade, mas levando em conta que falamos de um processo automatizado, existe sim mecanismos disponíveis em um BPMS que possam restringir a execução deste subprocesso da forma que colocaste.
A forma mais simples de resolver o seu problema, representado pela notação, seria adicionarmos após a atividade “Verificar ordem”, um gateway exclusivo passando uma condição exclusiva no fluxo. De acordo com a condição testada poderia levar para a tarefa de “cancelamento”, encerrando o processo, ou poderia seguir o fluxo normal do processo.
Olá, Kelly.
Muito bom o artigo.
Uma dúvida: em subprocessos eventuais, posso, na sua expansão, considerar mais do que uma lane? Por exemplo: “cancelamento das reservas”. Se o evento de “solicitar o cancelamento” gerasse 03 atividades que passam por 03 papéis distintos?
Agradecido.
Sempre tive dúvidas ao utilizar o evento de sinal e seu artigo me causou ainda mais dúvidas. De acordo com a descrição da paleta do Bizagi, o uso do evento de Sinal é diferente do que você propõe. Lá, se diz que o evento de sinal se diferencia de um evento de erro, pois o sinal definie uma condição mais geral, e não um erro para interromper atividade. Nesse contexto, gostaria de saber sua opinião mais detalhada sobre o uso desse evento. Muito obrigada.
Tenho uma dúvida: no caso do subprocesso de evento interruptivo, ele interrompe o processo principal, é executado e, ao ser finalizado, finaliza o processo como um todo ou volta ao “ponto paralizado” do processo principal?
Aguardo retorno. Muito obrigada.
Oi Sophia, o subprocesso de evento interruptivo interrompe o processo principal, e ele não terá mais seguimento. O fluxo que segue do evento interruptivo, quando finalizado, finaliza todo o processo.
Na figura 10.100 (pág 278) e figura 10.101 (pág 279) do documento BPMN 2.0.PDF (https://www.omg.org/spec/BPMN/2.0/PDF/) nos exemplos foram inseridos um evento intermediário Throw Compensate Event chamado Booking, porém tanto na primeira figura quanto na segunda figura o evento receptor é interrupt, ou seja, ele DEVERIA INTERROMPER todo fluxo pai, mas pelo exemplo dá a entender que não interrompe pois logo após o evento Throw Compensate Event existe um fluxo de sequencia ligando o mesmo a um gateway exclusivo. Enfim, gostaria saber o porquê do fluxo principal não ser interrompido logo após o evento Throw Compensate Event da Figura 1. Além disso, gostaria de saber se os eventos intermediários anexos a sub-processos podem ser chamados a partir do fluxo principal ou isso acontece exclusivamente para eventos anexos de Catch Compensate Event anexos a subprocessos.
Olá André.
Nos diagramas mencionados, o throw compensate event “Booking” (acionado em caso de erro na tarefa Charge Credit Card) é um evento intermediário de fluxo. Eventos intermediários de fluxo não têm classificação de interrupting/non-interrupting. Eles são acionados e dão seguimento ao fluxo. Seu único propósito é garantir que havendo a falha na cobrança do cartão, a reserva da viagem seja desfeita, o que se dá através do acionamento das atividades mapeadas a partir da(s) ocorrência(s) de catch deste mesmo evento (no primeiro caso, tratado via event subprocess que propaga os eventos de compensação de hotel e passagem; no segundo caso, através do evento de borda).
Kelly,
Não tenho dúvida quanto ao funcionamento de eventos intermediários, a questão é que o evento de início Catch Compensate Event do event subprocess “handle compensation” é interrupt ou seja ele para todo o processo pai. Estou correto?
Olá André, o event subprocess que captura o evento de compensação Booking está dentro do subprocesso. Assim, é o subprocesso Booking que está condicionado ao gatilho daquele event-subprocess, logo apenas ele seria interrompido (caso ainda estivesse ativo e o evento fosse acionado). No fluxo deste event-subprocess não há nada que eleve a tratativa do problema para o processo pai (como um evento de erro ou escalação), logo toda a compensação se resolve ali. Se este event-subprocess estivesse fora do subprocesso, então sim, o processo pai seria cancelado. O evento de compensation é o único gatilho que pode ser capturado em borda ou event-subprocess de atividade/processo que já foi finalizado.
Obrigado Kelly !
Olá Kelly, bom dia!
Gostaria de saber se existe alguma forma do event subprocess ser reutilizável e eu colocar lanes nele, com vários atores.
Desde já agradeço!
Oi Polyane! Infelizmente não. De acordo com a especificação BPMN, um subprocesso eventual (event subprocess) por natureza é um subprocesso incorporado (embedded), e portanto não tem como ter pools e lanes modeladas a partir dele.