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 ...

Protheus :: ADVPL :: Ponto de Entrada PNMTABC01 (edição do array aTabCalend)

E, pra matar a saudade, … , uma palhinha no SIGAPON.

Exemplo de implementação do Ponto de Entrada PNMTABC01 para a edição do array aTabCalend.

   1: #include "protheus.ch"
   2: #include "poncalen.ch"
   3:  
   4: /*/
   5:     Funcao:  U_PNMTABC01
   6:     Data:    28/12/2011
   7:     Autor:   Marinaldo de Jesus
   8:     Uso:     Ponto de Entrada para edicao do array aTabCalend
   9: */
  10: User Function PNMTABC01()
  11:  
  12:     Local aAfasta      := {}
  13:     Local aTabCalend   := ParamIxb[1]
  14:  
  15:     Local lCriaCalOk  := ParamIxb[2]
  16:     Local lAfastper   := .F.
  17:  
  18:     Local cTipAfas
  19:  
  20:     Local dData:= ( dPerIni - 1 )
  21:     Local dIniAfas
  22:     Local dFimAfas
  23:     
  24:     Local nPosTabIni
  25:     Local nPosTabFim
  26:     
  27:     Local uRet
  28:  
  29:     BEGIN SEQUENCE
  30:  
  31:         IF !( StacksApon() )
  32:             BREAK
  33:         EndIF
  34:  
  35:         IF !( lCriaCalOk )
  36:             BREAK
  37:         EndIF
  38:  
  39:         lAfastper        := SRA->(fAfastaPer(@aAfasta,dPerIni,dPerFim,RA_FILIAL,RA_MAT))
  40:         IF !( lAfastper )
  41:             BREAK
  42:         EndIF
  43:  
  44:         IF !( Type( "aTabPadrao" ) == "A" )
  45:             Private aTabPadrao := {}
  46:         EndIF
  47:  
  48:         While ( ( ++dData ) <= dPerFim )
  49:  
  50:             dIniAfas    := Ctod("//")
  51:             dFimAfas    := Ctod("//")
  52:             lAfast        := SRA->(fAfasta(RA_FILIAL,RA_MAT,dData,@dIniAfas,@dFimAfas,@cTipAfas,aAfasta))
  53:  
  54:             IF (;
  55:                     !( lAfast );
  56:                     .or.;
  57:                     !( cTipAfas == "Y" );
  58:                 )    
  59:                 Loop
  60:             EndIF
  61:  
  62:             uRet    := GetInfoPosTab(;
  63:                         CALEND_POS_TIPO_DIA ,;//01:Posicao em aTabCalend para Obtencao da Informacao
  64:                         "1E"                ,;//02:Flag da Marcacao "1E,1S,..."
  65:                         dData               ,;//03:Data em aTabCalend
  66:                         aTabCalend          ,;//04:Calendario de Marcacoes
  67:                         aTabPadrao          ,;//05:Tabela de Horario Padrao
  68:                         dPerIni             ,;//06:Periodo Inicial de Apontamento
  69:                         dPerFim             ,;//07:Periodo Final de Apontamento    
  70:                         .T.                 ,;//08:Informacao Referente a Funcionario
  71:                         SRA->RA_TNOTRAB     ,;//09:Turno de Trabalho
  72:                         SRA->RA_SEQTURN     ,;//10:Sequencia
  73:                         SRA->RA_FILIAL      ,;//11:Filial
  74:                         .T.                 ,;//12:Carrega Excecoes 
  75:                         NIL                 ,;//13:Bloco para Pesquisa em aTabCalend
  76:                         @nPosTabIni          ;//14:Retorno da Posicao do aTabCalend     
  77:                     )    
  78:  
  79:             IF !( uRet == "N" )
  80:                 Loop
  81:             EndIF
  82:  
  83:             uRet    := GetInfoPosTab(;
  84:                         CALEND_POS_TIPO_DIA ,;//01:Posicao em aTabCalend para Obtencao da Informacao
  85:                         "__LASTMARC__"      ,;//02:Flag da Marcacao "1E,1S,..."
  86:                         dData               ,;//03:Data em aTabCalend
  87:                         aTabCalend          ,;//04:Calendario de Marcacoes
  88:                         aTabPadrao          ,;//05:Tabela de Horario Padrao
  89:                         dPerIni             ,;//06:Periodo Inicial de Apontamento
  90:                         dPerFim             ,;//07:Periodo Final de Apontamento    
  91:                         .T.                 ,;//08:Informacao Referente a Funcionario
  92:                         SRA->RA_TNOTRAB     ,;//09:Turno de Trabalho
  93:                         SRA->RA_SEQTURN     ,;//10:Sequencia
  94:                         SRA->RA_FILIAL      ,;//11:Filial
  95:                         .T.                 ,;//12:Carrega Excecoes 
  96:                         NIL                 ,;//13:Bloco para Pesquisa em aTabCalend
  97:                         @nPosTabFim          ;//14:Retorno da Posicao do aTabCalend     
  98:                     )    
  99:  
 100:             nPosTabIni -= 1
 101:             While ( ( ++nPosTabIni ) <= nPosTabFim )
 102:                 aTabCalend[ nPosTabIni ][ CALEND_POS_TIPO_DIA ] := "S"
 103:                 aTabCalend[ nPosTabIni ][ CALEND_POS_AFAST    ] := .F.
 104:             End While    
 105:  
 106:         End While
 107:  
 108:     END SEQUENCE
 109:  
 110: Return( aTabCalend )
 111:  
 112: /*/
 113:     Funcao: StacksApon
 114:     Data:   28/12/2011
 115:     Autor:  Marinaldo de Jesus
 116:     Uso:    Verifica se esta nas Rotinas de Apontamento de Marcacoes
 117: */
 118: Static Function StacksApon()
 119:  
 120:     Local aStacks    := {}
 121:     
 122:     Local lStack    := .F.
 123:     
 124:     Local nStack
 125:     Local nStacks
 126:  
 127:     aAdd( aStacks , { "PONA040" , .F. } )
 128:     aAdd( aStacks , { "PONA280" , .F. } )
 129:     aAdd( aStacks , { "PONA230" , .F. } )
 130:     aAdd( aStacks , { "PONM010" , .F. } )
 131:  
 132:     nStacks := Len( aStacks )
 133:     For nStack := 1 To nStacks
 134:         lStack                    := IsInCallStack( aStacks[ nStack ][ 1 ] )
 135:         aStacks[ nStack ][ 2 ]    := lStack
 136:         IF ( lStack )
 137:             Exit
 138:         EndIF
 139:     Next nStack
 140:  
 141: Return( lStack )

[]s
иαldσ dj

Comentários

Postagens mais visitadas