Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Índice
maxLevel3
exclude.*ndice


Falando de componente Atividade de serviço...Image Modified

...

O componente Atividade de serviço representa um ponto do processo onde será feita uma consulta aos dados de um serviço externo repassando esses dados para o processo.

...

Painel
borderColor#ebecf0

Estado
subtletrue
titleExemplo de uso

Em um processo de Aprovação de contrato, o solicitante preenche um formulário solicitando a criação do contrato com informações como o nome do fornecedor, o tipo e o número do contrato, a validade do contrato, dentre outras. Em seguida, o contrato passa por algumas etapas de aprovação e, depois de aprovado, precisa ser armazenado no recurso Documentos. É nesse ponto que pode ser incluído o componente atividade de serviço, para que uma pasta seja criada automaticamente para armazenar o contrato e os documentos relacionados.

Desta forma, quando a última etapa de aprovação for concluída, a solicitação seguirá para uma atividade de serviço que, utilizando as APIs da plataforma, criará a pasta no recurso Documentos com base nas informações fornecidas e nas permissões de acesso definidas no formulário, garantindo que a pasta será única para cada contrato.

Um exemplo de código que poderia ser utilizado como script na atividade de serviço é:

Nota
titleImportante!

Esse é um exemplo que fica disponível no repositório SAMPLES e, por isso, ele pode ser atualizado lá a qualquer momento. Para ver sua versão mais recente e sempre atualizada, acesso-o a partir do repositório clicando aqui.

Bloco de código
languagejs
function servicetask9(attempt, message) {
	
	//Variáveis globais com os dados do formulário
	var FOLDER_NAME = hAPI.getCardValue("txtFolderName");
	var PARENT_FOLDER_CODE = hAPI.getCardValue("txtFolderCode");
	var GROUP_CODE = hAPI.getCardValue("txtGroupCode");
	var INHERIT_SECURITY = hAPI.getCardValue("cbxInheritSecurity") == "true";
	
	//Tipo de documento pasta
	var DOCUMENT_TYPE_FOLDER = "1";
	
	//Usuário logado
	var USER_LOGGED = getValue("WKUser");
	
	//Número da solicitação para comentário uso na descrição da pasta criada
	var REQUEST_NUMBER = getValue("WKNumProces");
	
	// Descrição da pasta criada
	var ADDITIONAL_COMMENTS = "This folder was created automatically from fluig BPM - request ";
	
	//Atribuições de segurança
	var USER_ATTRIBUTION_TYPE = 1;
	var GROUP_ATTRIBUTION_TYPE = 2;
	var ALL_USER_ATTRIBUTION_TYPE = 3; 
	
	//Níveis de segurança
	var READING = 0;
	var RECORDING = 1;
	var MODIFICATION = 2;
	var ALL = 3;
	
    try {
    	
    	//Instancia um novo documento e define as propriedades básicas
    	var dto = docAPI.newDocumentDto();
        dto.setDocumentDescription(FOLDER_NAME);
        dto.setAdditionalComments(ADDITIONAL_COMMENTS + REQUEST_NUMBER);
        dto.setDocumentType(DOCUMENT_TYPE_FOLDER);
        dto.setParentDocumentId(parseInt(PARENT_FOLDER_CODE));
        dto.setInheritSecurity(INHERIT_SECURITY);
        
        /*
         Como é possível definir várias permissões, é necessário criar um array com todas as permissões
         que serão aplicadas. Cada item do array é uma permissão ou restrição
        */
        var dtosSecurity = new Array();
        
        //Definindo permissão total para grupo
        var dtoGroupSecurity = docAPI.newDocumentSecurityConfigDto();
        dtoGroupSecurity.setAttributionType(GROUP_ATTRIBUTION_TYPE);
        dtoGroupSecurity.setAttributionValue(GROUP_CODE);
        dtoGroupSecurity.setPermission(true);
        dtoGroupSecurity.setShowContent(true);
        dtoGroupSecurity.setSecurityLevel(ALL);

        //Definindo permissão total para usuário
        var dtoUserSecurity = docAPI.newDocumentSecurityConfigDto();
        dtoUserSecurity.setAttributionType(USER_ATTRIBUTION_TYPE);
        dtoUserSecurity.setAttributionValue(USER_LOGGED);
        dtoUserSecurity.setPermission(true);
        dtoUserSecurity.setShowContent(true);
        dtoUserSecurity.setSecurityLevel(ALL);
        
      //Definindo permissão de modificação para todos os usuários
        var dtoAllUsersSecurity = docAPI.newDocumentSecurityConfigDto();
        dtoAllUsersSecurity.setAttributionType(ALL_USER_ATTRIBUTION_TYPE);
        dtoAllUsersSecurity.setAttributionValue(""); //Para todos os usuários deve-se passar vazio 
        dtoAllUsersSecurity.setPermission(true);
        dtoAllUsersSecurity.setShowContent(true);
        dtoAllUsersSecurity.setSecurityLevel(MODIFICATION);

      //Definindo restrição para usuário
        var dtoGroupRestrictionSecurity = docAPI.newDocumentSecurityConfigDto();
        dtoGroupRestrictionSecurity.setAttributionType(GROUP_ATTRIBUTION_TYPE);
        dtoGroupRestrictionSecurity.setAttributionValue(GROUP_CODE);
        dtoGroupRestrictionSecurity.setPermission(false);
        dtoGroupRestrictionSecurity.setShowContent(true);
        dtoGroupRestrictionSecurity.setSecurityLevel(MODIFICATION);
        
        //Definindo restrição para todos os usuários
        var dtoAllUsersRestrictionSecurity = docAPI.newDocumentSecurityConfigDto();
        dtoAllUsersRestrictionSecurity.setAttributionType(ALL_USER_ATTRIBUTION_TYPE);
        dtoAllUsersRestrictionSecurity.setAttributionValue("");
        dtoAllUsersRestrictionSecurity.setPermission(true);
        dtoAllUsersRestrictionSecurity.setShowContent(true);
        dtoAllUsersRestrictionSecurity.setSecurityLevel(RECORDING);
        
        //Adicionando permissões no array de segurança
        dtosSecurity.push(dtoGroupSecurity);        
        dtosSecurity.push(dtoUserSecurity);
        dtosSecurity.push(dtoAllUsersSecurity);

        //Adicionando restrições no array de segurança
        dtosSecurity.push(dtoGroupRestrictionSecurity);
        dtosSecurity.push(dtoAllUsersRestrictionSecurity);
       
        var FOLDER = docAPI.createFolder(dto, dtosSecurity, null);
        log.info("Folder successfully createad: ID :" + FOLDER.getDocumentId());
        
    } catch (e) {
        log.error("Could not create folder: \n" + e);
    }	
}


Execução automatizada

...

A execução automatizada determina que a execução do script será feita de forma assíncrona e sem a necessidade de uma interação manual de uma pessoa. Nesse tipo de execução, é possível definir o número de tentativas de execução e uma mensagem de sucesso que será exibida quando a execução for concluída sem inconsistências.

...

O fluxo de contingência é criado anexando um evento intermediário de captura de erro à atividade de serviço (o evento deve ser colocado em cima da atividade). Esse fluxo de saída será utilizando quando todas as tentativas de integração falharem.


Execução imediata

...

A execução imediata determina que a execução do script será feita de forma síncrona, logo depois do evento afterStateEntry do processo em questão, ou seja, será executado no momento em que a solicitação chegar na atividade de serviço.

...

Informações
titleNota:

Atualmente, o tipo de execução imediata não é muito recomendado por ter seu desempenho reduzidos.


Headers 
Âncora
headers
headers

...

No contexto do componente Atividade de serviço, os headers (cabeçalhos) representam informações adicionais ou metadados que são enviados junto com a requisição de um serviço. Eles são usados para fornecer contexto ou parâmetros extras que o serviço ou a operação que está sendo chamada pode precisar para processar a requisição.

...

  • Autenticação e autorização: pode ser um token de autenticação, uma chave de API ou credenciais de um usuário.

    Painel
    borderColor#ebecf0
    Estado
    subtletrue
    titleExemplo

    Chave: Authorization

    Valor: Bearer token_de_acesso

  • Informações de rastreio: dados sobre a requisição que podem ser usados para monitoramento ou rastreamento da chamada do serviço.

    Painel
    borderColor#ebecf0

    Estado
    subtletrue
    titleExemplo

    Chave: X-Request-ID

    Valor: 12345

  • Informações de contexto: dados que definem o contexto da requisição, tais como o idioma, a localidade ou a versão da API.

    Painel
    borderColor#ebecf0

    Estado
    subtletrue
    titleExemplo

    Chave: Accept-Language

    Valor: pt-BR

  • Formato dos dados: definição sobre como os dados devem ser interpretados ou enviados, como o tipo de conteúdo (Content-Type) ou a versão da API.

    Painel
    borderColor#ebecf0

    Estado
    subtletrue
    titleExemplo

    Chave: Content-Type

    Valor: application/json


Parâmetros
Âncora
parametros
parametros

...

No contexto do componente Atividade de serviço, os parâmetros são valores ou variáveis que o método/operação precisa receber para funcionar corretamente. Cada método/operação de um serviço geralmente tem uma lista de parâmetros que precisam ser fornecidos para que a execução da ação seja bem sucedida. Sendo assim, o objetivo de configurar esses parâmetros é fornecer as informações necessárias para que o método/operação seja executado.

...

Por isso, a configuração dos parâmetros do método/operação é essencial para a correta execução da ação e comunicação entre os sistemas envolvidos.


Retorno
Âncora
retorno
retorno

...

No contexto do componente Atividade de serviço, o retorno são os dados que a operação retorna depois de ser executada. Ao chamar um método/operação dentro de uma atividade de serviço, em muitos casos, a operação não só executa uma ação, mas também retorna um ou mais valores que podem ser usados em outras partes do processo. Esse retorno pode ser uma resposta simples – como um código de status ou uma mensagem – ou dados mais complexos – como um objeto JSON, uma lista ou um valor calculado.

Quando o método/operação é chamado, ele processa os dados de entrada, que são os parâmetros. Durante sua execução, o método/operação pode realizar cálculos, consultas a um banco de dados ou algum outro processamento de dados. Depois de processar os parâmetros e realizar suas funções internas, o serviço gera um retorno. Esse retorno pode ser algo simples – como um código de sucesso – ou pode ser um conjunto de dados mais complexo – como o resultado de uma busca ou a confirmação de que uma ação foi realizada.

...

Dessa forma, o retorno de uma operação é essencial para capturar os resultados de um serviço e usá-los de maneira eficaz dentro do fluxo do processo. Ele pode ser utilizado para tomar decisões, realizar ações subsequentes ou simplesmente para fornecer informações úteis para a continuação do processo.


Configurar componente Atividade de serviço – Rest

...

01. No diagrama do processo, clique no componente Atividade de serviço que deseja configurar com um serviço do tipo Rest.

...

Painel
borderColor#f2f2f2
bgColor#f2f2f2

Os headers ou cabeçalhos são informações adicionais ou metadados que são enviados juntos com a requisição do serviço para que a integração funcione corretamente. Mais detalhes e exemplos podem ser obtidos em Headers.

06. Informe os dados necessários para cada header.

Painel
borderColor#f2f2f2
bgColor#f2f2f2

Chave
Chave de identificação do parâmetro.

Valor
Valor que deve ser atribuído ao parâmetro.

Painel
borderColor#ebecf0

Estado
subtletrue
titleExemplo

Chave: Content-Type

Valor: application/json

Veja mais exemplos em Headers.

07. Clique na aba Parâmetros para configurar os parâmetros do método/operação do serviço.

Painel
borderColor#f2f2f2
bgColor#f2f2f2

Os parâmetros exibidos são os que pertencem ao método/operação que foi selecionado em Selecione a ação (operação) na aba Geral.

Esses parâmetros são os dados que o método/operação precisa receber para ser executado. Mais detalhes e exemplos podem ser obtidos em Parâmetros.

08. Na coluna Origem do valor de cada parâmetro, selecione de onde será obtido o valor que será passado para esse parâmetro do método/operação.

...

Painel
borderColor#f2f2f2
bgColor#f2f2f2

Os dados de retorno exibidos são os que pertencem ao método/operação que foi selecionado em Selecione a ação (operação) na aba Geral.

Eles são os dados que a operação retorna depois de ser executada. Mais detalhes e exemplos podem ser obtidos em Retorno.

22. Na coluna Atribuição de cada retorno, selecione para onde o dado retornado pelo método/operação deve ser enviado ou armazenado para ser usado no processo.

...

28. Na mensagem exibida, clique em Ok, entendi.


** Configurar integração

...

01. No diagrama do processo, clique no componente Atividade de serviço para o qual deseja configurar a execução automatizada.

...

09. Na mensagem exibida, clique em Ok, entendi.



** Editar integração

...

01. No diagrama do processo, clique no componente Exclusivo  do qual deseja editar uma condição simples.

...

10. Na mensagem exibida, clique em Ok, entendi.


Dúvidas frequentes

...

Confira aqui algumas dúvidas frequentes sobre o componente Atividade de serviço.

...

Section
Painel
borderColor#ebecf0

Toggle Cloak
id@saiba-mais-1
Quando se deve usar uma atividade de serviço?

Cloak
id@saiba-mais-1

A atividade de serviço é indicada quando o processo depende de dados externos oriundos de uma ação automatizada que pode ser executada sem a necessidade de interação direta de uma pessoa, tais como uma consulta a um banco de dados, uma chamada a uma API externa ou um cálculo automatizado.

Painel
borderColor#ebecf0

Toggle Cloak
id@saiba-mais-2
Qual é a diferença da atividade de serviço e o evento de mensagem?

Cloak
id@saiba-mais-2

A principal diferença entre esses dois componentes é o papel de cada um. Enquanto a atividade de serviço executa uma ação específica – como uma consulta a um sistema externos – o evento de mensagem envia ou recebe uma mensagem durante o andamento do processo, o que pode desencadear uma ação em outro processo ou sistema.

Sendo assim, pode-se dizer que o evento de mensagem é mais voltado para a comunicação entre processos ou sistemas e a atividade de serviço tem como objetivo automatizar uma ação dentro do processo.

Painel
borderColor#ebecf0

Toggle Cloak
id@saiba-mais-3
 O que acontece se uma atividade de serviço falhar ou gerar um erro?

Cloak
id@saiba-mais-3

Se a atividade de serviço foi configurada com a execução automatizada, é obrigatório que ela contenha um evento intermediário de captura de erro e um fluxo alternativo para onde a solicitação será direcionada em caso de falhas. Desta forma, quando a execução da atividade de serviço falhar, a solicitação será direcionada para o evento de captura de erro e, posteriormente, para o fluxo alternativo que direciona para uma etapa de tratamento da falha. Depois que a falha for solucionada, a solicitação volta para a atividade de serviço de origem e, assim que ela for executada com sucesso, segue o fluxo principal de saída.

Se a atividade de serviço foi configurada com a execução imediata, quando o script for executado com sucesso, a solicitação é enviada imediatamente da atividade de serviço para a próxima etapa, dando continuidade ao fluxo de saída padrão. Porém, se ocorrer alguma inconsistência, ela apenas retornará a inconsistência encontrada, mantendo a solicitação parada até que uma pessoa interaja na solicitação para averiguar e corrigir as inconsistências que ocorreram.

Painel
borderColor#ebecf0

Toggle Cloak
id@saiba-mais-4
Xxxxxxxxxxxx?

Cloak
id@saiba-mais-4

Xxxxxxxxxxxx

Painel
borderColor#ebecf0

Toggle Cloak
id@saiba-mais-5
 Xxxxxxxxxxxx?

Cloak
id@saiba-mais-5

Xxxxxxxxxxxxxx

Painel
borderColor#ebecf0

Toggle Cloak
id@saiba-mais-6
 Xxxxxxxxxxxxx?

Cloak
id@saiba-mais-6

Xxxxxxxxxxxxxxx

Painel
borderColor#ebecf0

Toggle Cloak
id@saiba-mais-7
Xxxxxxxxxxxx?

Cloak
id@saiba-mais-7

Xxxxxxxxxxxxx

...