Publicamos um novo eBook, com foco em AdvPL e TLPP.
Já faz um certo tempo, que estávamos montando os conteúdos para um eBook focado exclusivamente em AdvPL e TLPP.
Recentemente tivemos a oportunidade de escrever esse conteúdo, contendo referências à vários conteúdos.
O eBook está disponível gratuitamente para quem é assinante do Kindle Unlimited ou para quem quiser adquirir pelo valor sugerido de R$ 19,99.
Segue o link para o eBook – clique aqui.
Tentamos condensar o conteúdo, e trazer desde o básico até exemplos e explicações mais elaboradas. A contagem no Word deu 250 páginas com 50.147 palavras:
Quanto aos capítulos, são mais de 180, segue abaixo a listagem:
- História da linguagem AdvPL
 - Introdução
 - Surgimento da linguagem TLPP
 - Como funciona a compilação
 - Instalando e configurando o VSCode
 - Instalando o VSCode
- Instalando a extensão TDS (TOTVS Developer Studio)
 - Configurando uma Workspace
 - Baixando includes (extensão .ch)
 - Configurando o AppServer no VSCode
 - Configurando a depuração de códigos no VSCode (debug)
 
 - Pré-Requisitos para testar as customizações
 - Estrutura de um programa
- Bibliotecas e Constantes
 - Documentação da Função
 - Abertura de um Programa
 - Corpo do Programa
 - Encerramento
 
 - Como funciona a Linguagem
 - Documentação e Comentários
- Utilizando ProtheusDOC para documentar um fonte
 - Tipos de Comentário
 
 - Tipos de Funções
- User Function
 - Static Function
 
 - Escopo de Variáveis
- Variáveis Local
 - Variáveis Private
 - Variáveis Static
 - Variáveis Public
 - Constantes
 
 - Tipagem de Dados
- Caractere
 - Numérico
 - Lógico
 - Data
 - Indefinido
 - Objeto
 - Bloco de Código
 - Array
 - Array Multidimensional
 - JSON
 - Declaração de Valores com AS
 - Notação Húngara
 - Máscaras
 
 - Operadores
- Operador :=
 - Operador ;
 - Operador @
 - Operador $
 - Operador &
 - Operador :
 - Operador ==
 - Operador ** ou ^
 - Operador * e *=
 - Operador – e -=
 - Operador + e +=
 - Operador / e /=
 - Operador %
 - Operador =
 - Operador < e <=
 - Operador > e >=
 - Operador <> ou # ou != ou ! com ==
 - Operador ! ou .NOT.
 - Operador .AND.
 - Operador .OR.
 - Operador Default
 
 - Array
- Inserindo elemento no Array
 - Ordenando um Array
 - Procurando elemento no Array
 - Removendo elemento do Array
 
 - Estruturas de Condição
- If … EndIf
 - Else
 - ElseIf
 - Do Case … EndCase
 - Iif
 
 - Laços de Repetição
- For … Next
 - While … EndDo
 - Comandos Loop e Exit
 
 - Orientação a Objetos
- Classe
 - Métodos
 - Atributos ou Propriedades
 - Qual a diferença entre as classes começadas com MS*, com T* e com FW* ?
 - Analisando os Métodos ou Propriedades disponíveis no TDN e na depuração de código
 - Como funciona os objetos dentro de uma dialog
 - Exemplo criando painéis e objetos
 
 - MVC
- Conhecendo o MenuDef
 - Conhecendo o ModelDef
 - Conhecendo o ViewDef
 - Precauções ao criar uma função em MVC
 - Diferenças de cadastros Modelo no Protheus (Modelo 1, Modelo 2, Modelo 3 e Modelo X)
 - Exemplo de criação de cadastro em MVC
 - Descobrindo se uma tela é em MVC
 
 - Banco de Dados
- Principais Comandos e Funções
 - Ordenando uma tabela
 - Realizando uma pesquisa e posicionamento
 - Executando queries
 - Percorrendo informações de um Alias
 - Trabalhando com Tabelas Temporárias
 - Inicializador de campos
 - Gatilhos
 - Modo de Edição
 - Funções de Validações
 - Parâmetros e Perguntas
 - Travando registros e gravando conteúdos
 
 - Relatórios
- Conhecendo a classe de relatórios gráficos FWMSPrinter
 - Entendendo como funciona o dimensionamento dos componentes
 - Imprimindo texto com SayAlign
 - Imprimindo texto na vertical com Say
 - Imprimindo imagens com SayBitmap
 - Imprimindo QRCode
 - Imprimindo linhas e quadros com os métodos Line e Box
 - Utilizando cores nos textos
 - Pintando uma cor de fundo com FillRect
 - Criando a lógica do cabeçalho, do rodapé e quebra de páginas
 - Gerando a informação zebrada entre as linhas
 - Gerando um relatório com a FWPrintSetup
 
 - WebService REST
- Conceitos e Configuração
 - Trabalhando com Bearer Token (camada de segurança)
 - Criando uma consulta de informações
 - Criando uma atualização de informações
 - Consumindo uma API de terceiros
 
 - Integração com Arquivos
- Gravando arquivos com FWFileWriter
 - Lendo arquivos com FWFileReader
 
 - Pontos de Entrada
- O que é PARAMIXB
 - Cuidados ao des posicionar tabelas (usar sempre FWGetArea e FWRestArea)
 - Principais lugares para um ponto de entrada
 - Ponto de Entrada em MVC
 
 - Integração com eMails
- Configurações
 - Realizando disparo de eMail
 
 - Execuções Automáticas (ExecAuto)
- Como Funciona
 - Conhecendo os principais tipos e as variáveis reservadas
 - O que significam as letras usadas na MsExecAuto
 - Executando uma inclusão simples através da MsExecAuto
 - Executando uma inclusão de uma tela com cabeçalho usando MsExecAuto
 - Descobrindo se uma função tem execução automática da MsExecAuto
 - Construindo a execução automática em MVC com FWMVCRotAuto ou com FWLoadModel (e SetValue)
 - Utilização de AvKey, FWVetByDic, AUTDELETA e LINPOS
 
 - TLPP
- Principais diferenças
 - Extraindo as includes através de tlpp.environment.getIncludesTLPP
 - Nomes Longos
 - Namespace
 - Try … Catch
 - Parâmetros nomeados
 - Reflection e Annotation
 - Recursos TGetData e TGetMethods
 - Expressão Regular (RegEx)
 - Padronização na Linguagem TLPP
 
 - Principais Erros
- Alias already in use
 - Alias does not exist
 - Argument error
 - Array out of bounds
 - DBSetOrder – Index not found
 - Duplicated function
 - Enddo does not match while / EndIf does not match if
 - File not found ch
 - Incorrect syntax near
 - InterFunctionCall: cannot find function in AppMap
 - Invalid field name in Alias
 - Invalid property
 - Invalid typecast
 - It wasn’t possible to obtain exclusive access to the objects repository
 - Local variable never used
 - Local declaration follows executable statement
 - More parameters used in function call than expected
 - Stack depth overflow in function
 - Statement unbalanced function
 - Statement unterminate at end of line/unbalanced parentesis/brackets
 - Static Function never called
 - String size overflow
 - Syntax Error
 - Too few parameters calling
 - Type Mismatch on
 - Unsupported assign to function call
 - Variable does not exist
 - Variable redefined
 
 - Links úteis
 - Considerações Finais
 - Sobre o Autor
 
Bom pessoal, por hoje é só.
Abraços e até a próxima.
