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 :: Tips and Tricks ~ Populando RA_CIC com CPFs Válidos via BTDN Shell

As vezes, para que os testes reflitam os problemas e/ou soluções reais, precisamos criar um ambiente o mais fiel possível.

cpf

Por exemplo: O Cadastro de Funcionários SRA com CPFs válidos.

Para isso poderemos usar a ferramenta u_cpf4sra.prg.

A idéia é achar tantos CPFs válidos quanto o número de registro da(s) tabelas SRAs que desejamos “popular”.

u_cpf4sra.prg depende da NDJLIB024 e NDJLIB001.

O código:

#include "ndj.ch"
/*
    Função:      U_CPF4SRA
    Autor:       Marinaldo de Jesus
    Data:        08/03/2012
    Descrição:   Funcao para Popular o SRA com CPFs Validos baseado no meu original U_SRACPF de 14/11/2009
    Sintaxe:     <Vide Parametros Formais>
    Parametros:  <Vide Parametros Formais>
    Uso:         Popular o SRA com CPFs Validos
*/
User Function CPF4SRA(ldbPack,lAllTables,cRDD)

    DEFAULT ldbPack     := .F.
    DEFAULT lAllTables  := .T.
    DEFAULT cRDD        := "TOPCONN"

    Private lAbortPrint := .F.

    SYMBOL_UNUSED( __cCRLF )

Return( Processa( { |lEnd| CPF4SRA(@ldbPack,@lAllTables,@cRDD) } , "Aguarde..." , "Carregando CPFs" , .T. ) )

/*
    Função:     CPF4SRA
    Autor:      Marinaldo de Jesus
    Data:       08/03/2012
    Descrição:  Funcao para Popular o SRA com CPFs Validos
    Sintaxe:    <Vide Parametros Formais>
    Parametros: <Vide Parametros Formais>
    Uso:        Popular o SRA com CPFs Validos
*/
Static Function CPF4SRA(ldbPack,lAllTables,cRDD)

    Local bGetCPF        := { || StaticCall( NDJLIB024 , NextCPF , cCPF , nCPFStart , nCPFFinish ) }

    Local cMsg
    Local cCPF           := "10656875917"
    Local cAlias
    Local cTable
    Local nLoop
    Local nLoops         := 990
    Local nRecCount      := 0
    Local nCPFStart      := 106568759
    Local nCPFFinish
    Local oError
    IF !( lAllTables )
        nLoops := 1
    EndIF

    TRYEXCEPTION

        ProcRegua( nLoops )
        For nLoop := 0 To nLoops STEP 10

            cTable  := "SRA" + StrZero( nLoop , 3 )
            cMsg    := ( cTable + " :: " + "Verificando Registros... " +  AllTrim( Str( Int( nLoop / nLoops * 100 ) ) ) + "%" )
            ChkAbort( .T. , cMsg )
            IF !( MsFile( cTable , NIL , cRDD ) )
                Loop
            EndIF
            cAlias  := GetNextAlias()
            IF !( MsOpenDbf(.T.,cRDD,cTable,cAlias,.F.,.F.,.T.,.F.) )
                Loop
            EndIF

            IF ( ldbPack )
                MyPack( @cAlias , @cTable )
            EndIF   

            nRecCount += (cAlias)->( RecCount() )

            (cAlias)->( dbCloseArea() )
        Next nLoop
        nCPFFinish    := ( nCPFStart + nRecCount )
        MsgRun( "Obtendo CPFS" , "Aguarde..." , bGetCPF )

        ProcRegua( nLoops )
        For nLoop := 0 To nLoops STEP 10

            cTable  := "SRA" + StrZero( nLoop , 3 )
            cMsg    := ( cTable + " :: " + "Atualizando CPF... " +  AllTrim( Str( Int( nLoop / nLoops * 100 ) ) ) + "%" )
            ChkAbort( .T. , cMsg )
            IF !( MsFile( cTable , NIL , cRDD ) )
                Loop
            EndIF
            cAlias    := GetNextAlias()
            IF !( MsOpenDbf(.T.,cRDD,cTable,cAlias,.F.,.F.,.T.,.F.) )
                Loop
            EndIF

            (cAlias)->( dbGoTop())

            While (cAlias)->( !Eof() )

                ChkAbort( .F. , cMsg )

                cCPF := Eval( bGetCPF )
                (cAlias)->RA_CIC := cCPF
                (cAlias)->( dbSkip())
            End While
            IF ( nLoop < nLoops )
                (cAlias)->( dbCloseArea() )
            EndIF   
        Next nLoop

    CATCHEXCEPTION USING oError
        Final( oError:Description )
    ENDEXCEPTION
Return( NIL )

/*
    Função:      ChkAbort
    Autor:       Marinaldo de Jesus
    Data:        08/03/2012
    Descrição:   Verifica se Deve Abortar o Processo
    Sintaxe:     <Vide Parametros Formais>
    Parametros:  <Vide Parametros Formais>
    Uso:         Popular o SRA com CPFs Validos
*/
Static Function ChkAbort( lProcessMessage , cMsgProc )

    DEFAULT lProcessMessage := .T.

    IF ( lProcessMessage )
        ProcessMessage()
    EndIF   

    IF ( lAbortPrint )
        lAbortPrint := MsgNoYes( OemToAnsi( "Deseja Abortar a Operação" ) , OemToAnsi( "Atenção" ) )
        IF ( lAbortPrint )
            UserException( cCancel )
        EndIF
    Else
        IncProc( cMsgProc )
    EndIF

Return( NIL )

/*
    Função:      MyPack
    Autor:       Marinaldo de Jesus
    Data:        08/03/2012
    Descrição:   Eliminar Registros Deletados
*/
Static Function MyPack( cAlias , cRetSqlName )
Return( StaticCall( NDJLIB001 , __dbDelete , @cAlias , .T. , @cRetSqlName ) )

Vou usar “BlackTDN Shell (*)” para executar o exemplo.

image

image

E, agora, consultando o resultado:

image

teremos:

image

(*) “BlackTDN Shell” na realidade é um trocadilho ( + para uma caixinha de surpresas ) é uma ferramenta útil criada por esse que vos escreve para “contornar” as limitações impostas pela TOTVS na execução de Fórmulas. Publicarei seu código no próximo post. Mas, adiantando. O que “BlackTDN Shell” pode nos oferecer?

Como no exemplo acima, a execução de “Query” sem a necessidade de acessar o SDU. A abertura de uma Tabela do sistema conforme abaixo:

image

image

Mostrar a senha de um usuário específico:

image

image

ou

image

Informações sobre determinado programa:

image

image

ou

image

Informações sobre as Variáveis em memória

image

image

Dentre outras.

Coming Soon: “BlackTDN Shell”

[]s

иαldσ dj

Comentários

Postar um comentário

Postagens mais visitadas