Aplicativo Activiti Kickstart e Activiti Rest Webapp

Aplicativo Activiti Kickstart e Activiti Rest Webapp

1. Visão geral

Em nossos artigos anteriores (com base na API Activiti comJavaeSpring), vimos como gerenciar processos de forma programática. Se queremos configurar uma demonstração, juntamente com a interface do usuário do Activiti, temos dois aplicativos da web que nos permitirão fazer isso em apenas alguns minutos.

activiti-app offers a user interface through which a user can perform any identity management and task management related operations, crie usuários e grupos.

Da mesma forma,activiti-rest is a webapp that provides the REST API for performing any operation on a process, task, process, etc.

Neste artigo, veremos como usar esses aplicativos da Web e quais funcionalidades eles fornecem.

2. Transferências

Podemos baixar os arquivoswar para ambos os webapps do próprioActiviti Website.

Para a v6.0.0, podemos apenas baixar oactiviti-6.0.0.zip, extraí-lo e os arquivoswar podem ser encontrados no diretórioactiviti-6.0.0/wars.

3. Aplicativo Activiti Kickstart

Precisaremos de uma instalaçãoJava runtime eApache Tomcat funcionando para implantar o aplicativo. Qualquer contêiner da web funcionaria, mas o Activiti é testado principalmente no Tomcat.

Agora, precisamos apenas implantar a guerra no Tomcat e acessá-lo usandohttp://localhost:8080/activiti-app.

A página inicial deve ficar assim:

image

 

 

 

 

===

 

===

3.1. Base de dados

Por padrão, ele usa o banco de dados H2 na memória. Se quisermos mudar a configuração do banco de dados, podemos verificar ocodee modificar o arquivoactiviti-app.properties.

Depois de fazer isso, precisamos gerar novamente o arquivo war, o que pode ser feito executando o scriptstart.sh. Isso irá construir oactiviti-app junto com as dependências necessárias.

3.2. Kickstart App

Quando clicamos no aplicativo Kickstart, obtemos as opções para trabalhar com umProcess.. Podemos criar / importar processos e executá-los aqui.

Vamos criar um pequeno processo que possui um únicoUser Task, que recebe uma mensagem de um usuário. Uma vez no aplicativo Kickstart, para criar um processo, selecione a guiaProcesses e clique emCreate Process:

image

O editor de processos será aberto, onde podemos arrastar e soltar vários símbolos para eventos de início, vários tipos de tarefas e eventos de fim para definir umProcess.

Como estamos adicionando umUser Task ao nosso processo, precisamos atribuí-lo a alguém. Podemos fazer isso clicando nas atribuições das opções para esta tarefa e selecionando umAssignee.

Para simplificar, vamos atribuir a tarefa ao iniciador do processo:

image

Também queremos que esteUser Task receba uma mensagem de entrada do usuário. Para conseguir isso, precisamos associar umForm, a um único campo de texto, com esta tarefa.

SelecioneUser Taske selecioneReferenced Form. Atualmente, não háForm associado à tarefa, então clique emNew Form e adicione os detalhes necessários:

image

Depois disso, nos levará para a seçãoForms onde podemos arrastar e soltar vários campos que queremos em nosso formulário e também definir rótulos para eles:

image

Observe que marcamosRequired,, o que significa que a tarefaUser não pode ser concluída sem inserir oMessage.

Quando terminar, vamos salvá-lo e ir para a guiaApps. Para poder executar o processo que criamos, precisamos criar um Aplicativo de Processo.

No aplicativo de processo, podemos adicionar um ou maisProcess Definitions. Depois de fazer isso, precisamos publicar este App, para que osProcesses sejam disponibilizados para outros usuários:

image

3.3. App de tarefas

No aplicativo de tarefas, há duas guias:Tasks - para tarefas em execução no momento, eProcesses - para a execução deProcesses.

Assim que clicarmos emStart Process na guiaProcesses, obteremos a lista de processos disponíveis que podemos executar. Nessa lista, selecionaremos nosso processo e clicaremos no botãostart:

image

Nosso processo contém apenas uma única tarefa e é umUser Task. Portanto, o processo está aguardando um usuário concluir esta tarefa. Quando clicamos na tarefa em que o processo está aguardando, podemos ver o formulário que criamos:

image

Se clicarmos emShow Diagram, não só nos mostrará o diagramaProcess, mas também destacará as tarefas que foram concluídas e as que estão pendentes. No nosso caso, oUser Task ainda está pendente, o que está destacado:

image

Para completar esta tarefa, podemos clicar no botãoCompleten.. Conforme mencionado anteriormente, precisaremos inserirMessage,, pois o mantemos obrigatório. Portanto, após inserirMessage,, podemosComplete a tarefa.

3.4. App de gerenciamento de identidade

Além de gerenciar um processo, temos um aplicativo de gerenciamento de identidade, que nos permite adicionar usuários e grupos. Também podemos definir funções para os usuários.

4. Activiti REST

Activiti provides a REST API for the Activiti Engine que pode ser instalado implantando o arquivoactiviti-rest.war em um contêiner de servlet como o Apache Tomcat.

Por padrão, o Activiti Engine se conectará a um banco de dados H2 na memória. Assim como vimos emactiviti-app, aqui podemos alterar as configurações do banco de dados no arquivodb.properties na pastaWEB-INF/classes e recriar o arquivo war.

Com o aplicativo em funcionamento, podemos usar este URL base para todas as solicitações:

http://localhost:8080/activiti-rest/service/

Por padrão, todos os recursos REST exigem que um usuário válido do Activiti seja autenticado. A autenticação básica de acesso HTTP deve ser usada para todas as chamadas REST.

4.1. Criação e execução de um processo

Para criar um processo, primeiro, precisamos do arquivo BPMN para o nosso processo. Podemos criar o arquivo conforme descrito em nossos artigos anteriores com base emActiviti with Java, ou ele pode ser baixado da seção Processo do aplicativo Kickstart.

Precisamos fazer uma solicitação POST, junto com ocontentType: multipart/form-data, onde faremos o upload do arquivo BPMN para nosso novo processo:

POST repository/deployments

Quando fazemos essa chamada passando o arquivo BPMN para o processo que criamos, ele fornecerá a seguinte saída:

{
    "id": "40",
    "name": "user_msg.bpmn20.xml",
    "deploymentTime": "2017-10-04T17:28:07.963+05:30",
    "category": null,
    "url": "http://localhost:8080/activiti-rest/service/repository/deployments/40",
    "tenantId": ""
}

Agora, podemos ver nossa definição de processo listada, se obtivermos todas as definições de processo:

GET repository/process-definitions

Em seguida, podemos executar esse processo usando oprocessKey que mencionamos no arquivo BPMN:

POST /runtime/process-instances

Com este corpo de solicitação:

{
    "processDefinitionKey":"user_msg"
}

A resposta será:

{
    "id": "44",
    "url": "http://localhost:8080/activiti-rest/service/runtime/process-instances/44",
    "businessKey": null,
    "suspended": false,
    "ended": false,
    "processDefinitionId": "user_msg:1:43",
    "processDefinitionUrl": "http://localhost:8080/activiti-rest/service/repository/process-definitions/user_msg:1:43",
    "processDefinitionKey": "user_msg",
    //other details...
}

Podemos ver o diagrama do nosso processo em execução usandoid da instância do processo retornada com a resposta anterior:

GET runtime/process-instances/44/diagram

Como mencionado anteriormente, o processo está aguardando a conclusão da tarefa do usuário e, portanto, é destacada no diagrama:

image

4.2. Completando uma Tarefa

Vamos agora dar uma olhada em nossa tarefa pendente usando:

GET runtime/tasks

A resposta terá uma lista de tarefas pendentes. Atualmente, há apenas uma tarefa - nossoUser Task:

{
    "data": [
        {
            "id": "49",
            "url": "http://localhost:8080/activiti-rest/service/runtime/tasks/49",
            "owner": null,
            "assignee": "$INITIATOR",
            "delegationState": null,
            "name": "User Input Message",
            "description": "User Task to take user input",
            "createTime": "2017-10-04T17:33:07.205+05:30",
            "dueDate": null,
            // other details...
        }
}

Por fim, vamos completar esta tarefa usando a tarefaid 49:

POST runtime/tasks/49

Esta é uma solicitação POST, e precisamos enviar o campoaction indicando o que queremos fazer com a tarefa. Podemos "resolver", "concluir" ou "excluir" uma tarefa. Além disso, podemos passar uma matriz de variáveis, exigida pela tarefa para ser concluída.

No nosso caso, temos que passar um campo “mensagem”, que é o campo de texto Mensagem do usuário. Portanto, nosso corpo de solicitação é:

{
    "action": "complete",
     "variables": [{
         "name": "message",
         "value": "This is a User Input Message"
     }]
}

5. Conclusão

Neste artigo, discutimos como poderíamos usar o aplicativo Activiti Kickstart e a API REST fornecida.

Mais informações sobreactiviti-rest podem ser encontradas nos detalhes dehttps://www.activiti.org/userguide/#rest_api[User Guide], and _activiti-app podem ser encontrados emdocumentation by Alfresco.