Esta página tem como objetivo exemplificar o funcionamento de um robô simples para realizar a inclusão de arquivos em um campo documento, disponibilizado no marketplace. Para isso, utilizaremos a biblioteca RotasOpenAPI, disponibilizada pelo time de Operações da Lecom.
Arquivo de Configurações (application.properties
)
Na pasta resources
, encontra-se o arquivo application.properties
. Nele, devem ser configurados os seguintes dados:
Domínio da plataforma,
API Key do usuário
Informações do processo a ser aprovado.
Nome da etapa a ser considerada na busca.
Nome do campo documento.
Código do template utilizado no campo.
Exemplo de configuração:
DOMAIN=<DOMINIO DA PLATAFORMA> API_KEY=<CHAVE OPEN API DO USUAIRO> CODIGO_PROCESSO=<CODIGO DO PROCESSO> VERSAO_PROCESSO=<VERSAO DO PROCESSO> NOME_ATIVIDADE=<NOME DA ATIVIDADE PARA CONSULTA> CAMPO_DOCUMENTO=<NOME DO CAMPO TIPO DOCUMENTO> CODIGO_TEMPLATE=<CODIGO DO TEMPLATE UTILIZADO NO CAMPO DOCUMENTO>
RotasOpenAPIConfig
A classe RotasOpenAPIConfig
deve ser configurada com os valores definidos no arquivo application.properties
. Isso permite a autenticação com o OpenAPI em todas as requisições realizadas.
Exemplo:
RotasOpenAPIConfig.setDomain(config.getDomain()); RotasOpenAPIConfig.setCredentials(config.getApiKey());
RotasOpenAPI
Primeiramente recuperamos uma lista de ProcessosPendentesUser
atravéz do RotasOpenApi
, realizando um filtro pelo nos da etapa atual do processo.
ResponseOpenApi<List<ProcessosPendentesUser>> processosPendentes = RotasOpenApi .processo() .buscarProcessosPendentes() .porCodigoProcesso(Integer.valueOf(config.getCodigoProcesso())) .porVersaoProcesso(Integer.valueOf(config.getVersaoProcesso())) .porNomeAtividade(config.getNomeAtividade()) .executar();
Por fim, iteramos sobre a lista retornada, utilizando o RotasOpenApi
para atualizar a inclusão do documento no campo indicado. Para exemplificar o fluxo, neste template realizamos a criação de um arquivo temporário para inclusão, a origem deste arquivo fica a critério da implementação definitiva.
for(ProcessosPendentesUser processo : processosPendentes.getContent()){ Path tempFilePath = null; try { // Cria e preenche arquivo temporario para exemplo tempFilePath = Files.createTempFile("temp-documento", ".docx"); String conteudo = "Texto para exemplo"; Files.write(tempFilePath, conteudo.getBytes(), StandardOpenOption.WRITE); ResponseOpenApi<RetornoInclusaoSubstituicaoDocumento> response = RotasOpenApi .processo() .incluirDocumento() .setAcao(TipoAcaoDocumento.IMPORTAR) .setCodigoInstancia(processo.getProcessInstanceId()) .setCodigoAtividade(processo.getActivityInstanceId()) .setCodigoCiclo(processo.getCycle()) .setNomeCampo(config.getCampoDocumento()) .setIdTemplate(Integer.valueOf(config.getCodigoTemplate())) .setFile(tempFilePath.toFile()) .executar(true); if (response.getStatus() < 200 || response.getStatus() >= 300) { LOGGER.error("Erro executar UPPER_CAMEL. Erros: {}", response.getErros()); return; } LOGGER.debug("Documento incluido com sucesso. ID da instância: {}", processo.getProcessInstanceId()); } catch (IOException e) { LOGGER.error("Erro ao criar ou manipular arquivo temporário", e); } finally { if (tempFilePath != null) { try { Files.deleteIfExists(tempFilePath); } catch (IOException e) { LOGGER.error("Falha ao deletar arquivo temporário", e); } } } }
Conclusão
Este exemplo demonstrou o funcionamento do template disponibilizado pelo Marketplace para a inclusão de documentos em campos. É importante ressaltar que este é um modelo básico. Após a inclusão deste template na sua plataforma, ele pode ser ajustado conforme as necessidades do seu cenário específico.
0 Comentários