Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: JSON Schema Validation: A Comprehensive Guide

# JSON Schema Validation: A Comprehensive Guide ## Understanding JSONSchemaValidator Ensuring the integrity and compliance of JSON data is crucial for modern applications. **JSONSchemaValidator** is a powerful class designed to validate JSON data against a specified JSON Schema. It provides robust methods to check types, patterns, numerical constraints, required properties, and both internal and external schema references. This guide breaks down the key features and functionalities of JSONSchemaValidator, making it easier for developers to implement schema validation effectively. 🔗 **GitHub Repository:** [JSONSchemaValidator](https://github.com/naldodj/naldodj-hb-jsonschema-validator) --- ## Key Features ✅ **Schema-Based Validation** – Ensures JSON data conforms to a predefined schema. ✅ **Error Handling & Logging** – Captures validation errors for debugging. ✅ **Fast Mode Support** – Stops validation upon detecting the first error. ✅ **Internal & External Reference ...

BlackTDN :: ADVPL ~ Class TFTPClient : Combo III (O Destrinchar Parte 1)

destrinchando

… Continuação: BlackTDN :: ADVPL ~ Class TFTPClient : Combo II (Configurando o Servidor FTP)

Iniciamos, agora, o “Destrinchar” do exemplo proposto na série.

Comentaremos as partes mais significativas do programa deixando, para o leitor, a responsabilidade por desvendar as partes mais triviais.

Nos ateremos às funções; comandos; diretivas e macros do compilador; e aos métodos e propriedades da Classe TFTPClient.

A idéia base do exemplo é: Demonstrar que usando diretamente a Classe TFTPClient, em detrimento das funções FTP* teremos, através da análise do retorno do método GetLastResponse(), acesso a recursos de depuração que nos auxiliarão na resolução de possíveis problemas; além da possibilidade de usar diretamente os “sub-comandos” FTP para requisições ao invés dos métodos e/ou funções pré-definidos. Obviamente que é altamente recomendável a utilização desses dois últimos ao uso dos “sub-comandos” FTP. Mas é interessante saber de sua existência e a forma de uso uma vez que, dependendo dos recursos e “sub-comandos” existentes no servidor FTP, poderemos precisar executar alguma ação não implementada na Classe e/ou Funções.

include protheus.chPara a “Macro do Compilador” CRLF. CRLF é definida no arquivo de cabeçalho protheus.ch como: #define CRLF Chr(13)+Chr(10). Chamaremos CRLF de “Macro do Compilador” ao invés de “Constante Simbólica” pelo simples fato de Chr(13)+Chr(10) não serem constantes mas sim chamadas de função. O pré-processador do protheus substituirá, a cada ocorrência, CRLF por Chr(13)+Chr(10) que serão avaliadas no momento da execução. A “Macro do Compilador” CRLF poderia ser definida de várias formas a exemplo:

#define CRLF() (Chr(13)+Chr(10))

ou

#define PT_EOL() (Chr(13)+Chr(10))

Nos exemplos acima parametrizada como chamada a uma função. Vale lembrar que #define é sensível a letras maiúsculas e minúsculas. Se o pré-processador encontrar CrLf() ou PT_Eol() ele não fará a substituição e um erro, em tempo de execução, será disparado. Para evitar isso poderemos redefinir as “Macros do Compilador” usando as diretivas #translate ou #xtranslate.

#translate CRLF() => (Chr(13)+Chr(10))

ou

#xtranslate PT_EOL() => (Chr(13)+Chr(10))

e chamá-las como:

Local cCRLF := CRLF()

Local cPTEOL := PT_EOL()

ou

Local cCRLF := CrLf()

Local cPTEOL := pt_EOL()

que o pré-processador traduzirá, corretamente, para:

Local cCRLF := (Chr(13)+Chr(10))

Local cPTEOL := (Chr(13)+Chr(10))

ou

Local cCRLF := (Chr(13)+Chr(10))

Local cPTEOL := (Chr(13)+Chr(10))

include directry.ch Para as “Constantes Simbólicas” que definem os índices para os elementos do Array retornado pela função Directory().  Observe a definição das constantes em directry.ch:

// Subscripts for DIRECTORY() array
#define F_NAME 1
#define F_SIZE 2
#define F_DATE 3
#define F_TIME 4
#define F_ATTR 5
// Length of array
F_ATTR F_LEN 5

Elas facilitam a leitura do programa. Atente-se aos fragmentos de código abaixo.

include directry.ch : Exemplo

include directry.ch : Exemplo

 

… continua

[]s
иαldσ dj

Comentários

  1. Naldo, sabe como subir o serviço de ftp no Protheus em modo passivo, ou alguma outra maneira? estou tendo dificuldades de transferência de arquivos...

    ResponderExcluir
    Respostas
    1. Segundo o TDN: "A implementação atual do servidor de FTP não implementa o comando PASV (modo passivo)." (http://tdn.totvs.com.br/pages/viewpage.action?pageId=6064789)

      Que redundância "A implementação não implementa" (rs)

      Excluir
    2. Já tentou com FileZilla ( https://filezilla-project.org/)?

      Excluir
    3. Porque: "A implementação não implementa a implementabilidade que deveria ser implementada" (kk)

      Excluir

Postar um comentário

Postagens mais visitadas