Protheus OpenAPI
Projeto autoral para aprender TL++ construindo uma ferramenta real de documentação para diferentes gerações de APIs REST Protheus.
Projeto autoral para aprender TL++ construindo uma ferramenta real de documentação para diferentes gerações de APIs REST Protheus.
No Hello World REST em TL++ , publicamos uma operação pequena e verificamos seus metadados no YAML produzido pelo REST-DOC. A etapa seguinte foi implementar uma resposta equivalente em AdvPL, usando WSRESTFUL, e repetir a exportação. Os dois endpoints responderam corretamente às requisições autenticadas. Na documentação gerada, porém, o resultado foi diferente: a operação TL++ apareceu; a operação AdvPL não foi encontrada. Essa comparação ajuda a delimitar o problema que o Protheus OpenAPI pretende investigar. Publicar um serviço e descobrir seus metadados são capacidades que precisam ser verificadas separadamente. ...
Uma validação começa com poucas condições. Depois recebe uma mensagem na tela, uma consulta de parâmetro, uma atualização de registro e uma exceção para determinado processo. Quando alguém precisa mudar a regra, já é difícil saber quais outros comportamentos serão afetados. No artigo AdvPL não precisa ser código legado , discuti como decisões de organização influenciam o custo de manutenção. Aqui, vamos trabalhar uma dessas decisões: separar responsabilidades dentro de uma rotina sem transformar uma alteração pequena em uma reescrita. ...
Versão de referência: este artigo foi revisado com base no commit 3dfe986 , que registra a automação e a validação local da terceira parte do Protheus Docker Lab. Um ambiente reproduzível não deveria depender de uma lista de comandos lembrada apenas por quem o criou. Depois de organizar os serviços e arquivos do Protheus Docker Lab , a etapa seguinte foi transformar o procedimento documentado em um fluxo operacional pequeno, previsível e seguro para os arquivos locais. ...
Documentar uma API parece simples enquanto código e documentação nascem juntos. O problema aparece depois. Uma rota muda, um parâmetro é acrescentado, uma resposta ganha outro formato e a especificação continua descrevendo a versão anterior. Aos poucos, o contrato que deveria ajudar consumidores, testes e integrações deixa de representar o serviço publicado. No Protheus, existe ainda uma dificuldade adicional: APIs REST desenvolvidas em momentos diferentes podem usar modelos diferentes. De um lado estão endpoints TL++ baseados em annotations. De outro, serviços AdvPL construídos com WSRESTFUL, WSMETHOD e estruturas relacionadas. ...
Versão de referência: este artigo foi revisado com base no commit 77562cd , que registra o estado validado da segunda parte do Protheus Docker Lab. No primeiro artigo da série, Construindo um laboratório Protheus com Docker , montei um ambiente de desenvolvimento composto por PostgreSQL, DBAccess, License Server e AppServer. Colocar os serviços em execução foi a primeira etapa. A seguinte foi transformar um arquivo Compose funcional em um projeto que eu pudesse entender, validar, recriar e evoluir. ...
AdvPL é frequentemente associado a código legado. A associação não surgiu por acaso. Existem customizações Protheus desenvolvidas há muitos anos, funções extensas, dependência de estado compartilhado, regras de negócio misturadas com interface, acesso direto a tabelas e poucos testes automatizados. Também existem projetos sem documentação, sem estratégia clara de versionamento e com alterações realizadas diretamente em código antigo, porque ninguém conhece completamente os efeitos de uma mudança. Mas existe uma distinção importante: ...
Uma dúvida comum entre desenvolvedores e analistas de dados é: Qual a diferença entre EXISTS, IN e JOIN? Essas três abordagens podem retornar o mesmo resultado, mas possuem diferenças importantes de comportamento e performance, especialmente em bases grandes. Para quem trabalha com ERP como o Protheus, onde as tabelas crescem rapidamente, entender essas diferenças ajuda a evitar consultas lentas e escolhas ruins de modelagem SQL. Neste artigo, vamos analisar: como cada abordagem funciona quando usar cada uma diferenças práticas de performance exemplos com tabelas comuns do Protheus Exemplo prático Imagine duas tabelas comuns em um cenário de ERP: ...
Durante o desenvolvimento de rotinas no TOTVS Protheus, é comum trabalhar com múltiplos índices em uma tabela. Normalmente utilizamos DBSetOrder() informando apenas o número do índice, mas existe uma alternativa mais segura e legível: DBOrderNickname(). Surpreendentemente, muitos desenvolvedores não sabem que esse recurso existe. Neste post vou mostrar como utilizar essa função e por que ela pode tornar seu código mais robusto. O problema do DBSetOrder() O uso tradicional funciona assim: ...