Esta página descreve um compilado de informações e considerações, no formato de semáforo (🟢verde = resolvido, 🟠amarelo/laranja = atenção e 🔴vermelho = limitação/restrição), com o objetivo de facilitar o entendimento acerca de detalhes do Estudo e Análise de Viabilidade da adoção de TOTVS iPaaS no contexto de APIs Padrões do produto TOTVS Agro Bioenergia, por meio do TOTVS Agro API Hub.
Autenticação com JWT (segurança)
Como implementar uma pipeline/fluxo de requisições para autenticação por meio de JWT, para obter um token JWT, antes de realizar as requisições HTTP para obtenção/manipulação de dados (guia padrão de APIs TOTVS)
Devolutiva: Orientada utilizada de configuração de uma autenticação personalizada
Paginação de Dados e Loop de Pipelines (Fluxos)
Como implementar uma pipeline/fluxo de iteração (loop) para navegação paginada de dados, enquanto houver "próxima página" - atributo "hasNext" (guia padrão de APIs TOTVS)
Exemplo: Uma requisição obtém resposta de 100 registros e verifica que "hasNext" está "true", informando que há outras páginas de dados e, num ciclo/loop, é preciso recuperar estas próximas páginas de dados, por meio de "page" e "pageSize"
Devolutiva: Uso de API intermediária (PUT) para gravar página e last_timestamp. Ao atingir a página final, reseta para página 1. Não é possível paginação / não é possível gravar variáveis. Uso de um webhook ao final do fluxo para criar um "pseudo-loop"
Atualização de Variáveis Globais (iPaaS)
Como atualizar variáveis de maneira programática, por meio do próprio pipeline/fluxo
Exemplo: Atualizar uma variável do iPaaS com a data/hora atual como sendo um "lastUpdate" da última requisição (para, em outro momento, realizar uma nova requisição utilizando este valor)
Devolutiva: Não é possível atualizar variáveis, apenas recuperar
Recuperação de HTTP Status Code (iPaaS)
Como obter o HTTP Status Code uma requisição/resposta, por exemplo, 401, 404, 200, 201 e outros, para utilizar esta informação em uma pipeline/fluxo
Exemplo: Utilizar o HTTP Status Code para criar condições/desvios nas pipelines/fluxos de requisições
Devolutiva: A opção estudada foi o componente Global Error, porém mesmo "corrigindo" o fluxo acusa como não processado
Componente JavaScript (Desenvolvimento iPaaS)
Como desenvolver/implementar regras de negócio e outras validações por meio de um componente baseado em scripts, por exemplo, "javascript" ou outro mecanismo
Devolutiva: Recurso em desenvolvimento (meta H2/24), porém somente para conta Enterprise
"Empacotar" e Expedir Pipelines (Fluxos)
Como "empacotar" (exportar/habilitar para outros clientes de iPaaS), uma vez desenvolvido um pipeline/fluxo de integrações
Exemplo: Como time de Produto/Engenharia Agro, como entregar um conjunto padrão de pipelines/fluxos de integrações com iPaaS
Devolutiva: Não é possível exportar / importar, porém o time de iPaaS pode contribuir com o reuso (copiar/colar) de fluxo de um ambiente (instância) para outro
Publicação de Atualizações em Pipelines (Fluxos)
Como publicar atualizações (manutenções/melhorias) num conjunto padrão de pipelines/fluxos de "Integrações Bioenergia & iPaaS" para nossos clientes
Exemplo: Como time de Produto/Engenharia Agro, como realizar atualizações em um conjunto padrão de pipelines/fluxos de integrações com iPaaS
Devolutiva: Não é possível exportar / importar, porém o time de iPaaS pode contribuir com o reuso (copiar/colar) de fluxo de um ambiente (instância) para outro. Quando há alguma atualização, precisa entrar cliente em cliente e atualizar
Criação de "Conector Nativo"
Como criar um "conector nativo" TOTVS Agro Bioenergia, uma vez validado/homologado um conjunto padrão de integrações e APIs
Exemplo: Disponibilizar um conector nativo "TOTVS Agro Bioenergia", ao invés de ter que criar conectores customizados
Devolutiva: Precisa ser desenhado, homologado, salvo como projeto e depois habilitado/importado (time iPaaS)
"De-Para" de Entidades e Objetos (Produtos Distintos)
Como realizar de-para de objetos/entidades de produtos distintos (com ou sem regras de negócio).
Exemplo: Trabalhar com FlatBuffer/Proto Buffer e suas conversões em outros tipos de dados
Devolutiva: Uso de API intermediária para uma "ponta" entre, e.g., Protheus e CRM para resolve de-para de dados (por exemplo, IDs)
Reprocessamento de Requisições/Eventos (iPaaS)
Há algum recurso ou funcionalidade de reprocessamento de requisições/pipelines (manualmente ou de forma programática)?
Exemplo: Em outras soluções de integrações da TOTVS, por meio de um monitor de integrações, é possível reenviar uma requisição/integração para ser reprocessada. Há esta opção via iPaaS, caso alguma falha aconteça?
Devolutiva: Uso de monitor com botão "reprocessar". Reexecução do diagrama e não de um evento/mensagem específica
iPaaS e License Server / Telemetria
Faz sentido alguma relação de iPaaS com Licenser Server (Telemetria ou Métricas Adicionais) e licenciamento via Add-On Web Services para integrações com soluções não-TOTVS ou parceiros?
Exemplo: Oportunidade de gerar billing a partir de LS e/ou Add-On Web Services
Devolutiva: Não há relação de LS (consumo/abono de licenças) nem validação via Licença I (Add-On Web Services). Poderia, também, ser utilizada API Intermediária Agro
iPaaS e Mensagens Padronizadas TOTVS
Como ocorre o processo de integração entre o iPaaS e a Mensagens Padronizadas da TOTVS utilizando Web Services SOAP?
Devolutiva: O processamento de integração no padrão de mensagem única pode ser realizado utilizando o componente SOAP. Já existem outras integrações que utilizam esse modelo. Um ponto de atenção é o controle do Internal ID dos ERPs, que deverá ser gerenciado por meio de uma API intermediária
Integrações e Fluxos com Mensagens Síncronas (Rollback)
Como é tratado o processo de integração de mensagens síncronas?
Exemplo: Por exemplo, em uma integração de movimentação de estoque, caso ocorra um erro, é necessário realizar um rollback para garantir a consistência dos dados.
Devolutiva: Para processamento síncrono, é possível utilizar o componente WebHook Síncrono. No entanto, caso seja enviado um bloco com múltiplas instruções, o fluxo não será controlado adequadamente. Isso ocorre porque, ao considerar vários itens, o primeiro já terá sido processado enquanto os demais ainda estarão seguindo o fluxo
Integrações e Fluxos com Múltiplos Produtos (iPaaS)
Como é realizado o controle de mensagens em integrações envolvendo mais de um produto?
Exemplo: Por exemplo, considerando o ERP Protheus como responsável pelo cadastro de materiais, como garantir que esses dados sejam enviados corretamente para o Agro e o Datasul ?
Devolutiva: Para essa necessidade, recomenda-se a utilização de diagramas separados. É possível incluir dois componentes, sendo Aplicação A e Aplicação B. No entanto, pode haver situações relacionadas a logs que precisam ser consideradas
Função "Replace" (substituição para "vazio" ou nulo)
Ao criar uma função, selecionando o tipo "Replace" é possível substituir por vazio? Foi tentado colocar "" porém o iPaaS colocou o cacacter literal com barra de escape \"\" e sem nada o mesmo não deixa, pois diz que é obrigatório
Devolutiva: Não há como no momento
Função "Substring" (delimitador/index de "fim" como opcional)
Ao criar uma função, selecionando o tipo "Substring" é possível não utilizar o fim (opcional)? O fim não foi preenchido e ocorreu um erro de log acusando da falta do fim, porém na mensagem da tela diz que é opcional.
Devolutiva: Foi repassado para equipe do iPaaS e foi dectado como erro, segue às issues: https://jiraproducao.totvs.com.br/browse/FINT-6687 e https://jiraproducao.totvs.com.br/browse/FINT-6688
Falha ao "Salvar Conta"
Falha ao salvar conta de acordo com o diagrama, a conta é devidamente selecionada e após isso é clicado em salvar, porém se abrir novamente o preenchimento da conta estará vazio.
Devolutiva: Foi repassado para equipe do iPaaS e foi dectado como erro, segue à issue: https://jiraproducao.totvs.com.br/browse/FINT-6700
Dúvidas | TOTVS Agro
1) Existe a possibilidade de utilizar o content-type do body que seja diferente de "application/json"? Sim, é só passar o content-type no cabeçalho, neste exemplo foi passado a variável "var.project.ta_api_hub_content_type" no cabeçalho (inHeader) contendo "x-www-form-urlencoded", ou seja, será convertido de JSON para este formato internamente.
Observação
Selecione "application/json" no body, cole o corpo desejado no formato JSON e passe o tipo do body "content-type" no (inHeader) ao configurar o recurso/requisição no diagrama.
Limitações | TOTVS Agro
1) Atualmente, o sistema não permite a definição de variáveis globais ou de projeto de forma dinâmica. Para resolver essa limitação, o time do iPaaS está desenvolvendo um componente que permitirá a atualização automática dessas variáveis, com previsão de lançamento para 2025. Por enquanto, uma solução alternativa seria utilizar variáveis para gerenciar esses diagramas manualmente. Um exemplo prático é o armazenamento do lastUpdate mais recente do respectivo dia em uma variável do iPaaS, que precisaria ser atualizado manualmente conforme a necessidade. Embora essa funcionalidade ainda não esteja disponível nativamente, alguns clientes optam por implementar soluções externas para suprir essa necessidade.
Para exemplificar o controle manual utilizando variáveis do iPaaS, temos, na primeira imagem, o uso do parâmetro lastUpdate vazio para selecionar todos os itens que sofreram alguma alteração. Já na segunda imagem, fornecemos a última data de modificação do respectivo dia, permitindo filtrar a busca e identificar apenas os itens alterados posteriormente a essa data. Nesse caso, o valor utilizado como filtro deve ser armazenado manualmente em uma variável do iPaaS, que deve ser atualizada conforme necessário. A ideia é que, no final de cada dia, seja capturada a maior data de atualização do respectivo dia de maneira manual. Após isso, é necessário atualizar a variável do iPaaS manualmente com essa data coletada. Assim, quando o diagrama for executado novamente podendo ser no final do expediente, por exemplo, serão capturados apenas os registros posteriores à data definida. Cada caso é um caso, neste cenário, essa abordagem foi adotada para contornar uma limitação que em breve será corrigida.
Foi identificado, através das requisições realizadas pelo navegador, uma possível forma de alterar variáveis no TOTVS iPaaS sem utilizar a interface gráfica. Esse processo envolve enviar um cabeçalho de autorização contendo o token da sessão (válido por 2 dias), além de incluir no corpo da requisição as informações necessárias, como o ID do projeto, a chave da variável e o novo valor da variável (destacado em vermelho).
Seria viável criar um recurso que se conectasse a esse endpoint, permitindo a atualização automática da variável diretamente no diagrama, conforme os critérios definidos. No entanto, há um obstáculo: o token de autenticação expira após 2 dias e precisa ser renovado manualmente. Caso seja possível automatizar o envio dos dados para a autenticação e receber o novo token, seria possível automatizar completamente esse processo, tornando essa solução totalmente válida, como observado nas imagens abaixo:
--------------------------------------------------------------------------------------------------------------------------------------
2) Atualmente, não é possível armazenar partes de uma resposta (body e header) de um recurso ou requisição em uma variável dinâmica que permita seu uso de forma automatizada em outras requisições. Segundo a equipe do iPaaS, o desenvolvimento de um componente para atender a essa necessidade está previsto para ser entregue em 2025.
--------------------------------------------------------------------------------------------------------------------------------------
3) O componente JavaScript foi criado recentemente, porém, não pode ser utilizado em qualquer tipo de conta.
--------------------------------------------------------------------------------------------------------------------------------------
4) Há limitações na importação de aplicativos, serviços e recursos. Não é possível importar aplicativos, ambientes e serviços entre contas diferentes. No caso de serviços, é necessário cadastrá-los manualmente ou utilizar uma implementação de OpenAPI como Swagger.
--------------------------------------------------------------------------------------------------------------------------------------
5) Função size não aceita corpo vazio, logo se for passado o inBody {} ela não consegue mensurar que o array está com 0 itens, é necessário apontar um array em específico, como por exemplo inBody.items.