Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Classe utilizada na montagem de Querys dinâmicas das API-REST's, considerando o padrão TotvsAPI (filtro simples, complexo (odata), ordenação, etc...).

Informações

Todos os métodos da classe são estáticos, portanto eles podem ser utilizados diretamente se sem a necessidade de instanciar a classe.

Métodos

Nome

Descrição

buildCompleteQuery ( cTable, hTempTable, oRequest, cQuery [, hMainTempTable , cExceptions , lMatches ] [,

cSearchParam

cSearchListParams, cSearchListFields ] )

Parâmetros:

  • cTable (CHARACTER): Tabela principal da Query;
  • hTempTable (HANDLE): Handle da TempTable da API, que é utilizado para enviar os dados para o HTML;
  • oRequest (JsonAPIRequestParser): Objeto JsonAPIRequestParser da Requisição;
  • cQuery (CHARACTER): QUERY já existente;
  • hMainTempTable (HANDLE): TempTable da tabela principal;
  • cExceptions (CHARACTER): Lista de campos que não devem ser considerados na montagem do query, a lista deve ser informada separando os campos por vírgula e deve ser usado o SERIALIZE-NAME, exemplo: "name,code";
  • lMatches (LOGICAL): Indica que deve usar MATCHES no lugar da igualdade para campos caracter;
cSearchParam
  • cSearchListParams (CHARACTER):
Nome do QueryParam utilizado para fazer pesquisa com Matches;cSearchListFields (CHARACTER): Lista dos Campos da Tabela utilizados
  • Lista de QueryParams que serão considerados para fazer a pesquisa com Matches.
Separar por virgula. Exemplo: cod_empresa, cdn_cliente.
  • Sendo que, será considerado apenas o primeiro que existir na requisição e possuir um valor válido. Por exemplo, se na mesma requisição existir os QueryParams "search" e "filter", onde ambos possuem um valor válido e, neste parâmetro foi informado "lookfor,filter,search", será considerado apenas o valor do QueryParam "filter" para fazer o Matches, já que ele é o primeiro da lista que existe na requisição e possui um valor válido;
  • cSearchListFields (CHARACTER): Lista dos Campos da Tabela utilizados para fazer a pesquisa com Matches. Separar por virgula. Exemplo: cod_empresa,cdn_cliente.

Retorno (CHARACTER): QUERY completa.

Retornar a QUERY completa com o WHERE e BY.

Informações

Caso seja necessário incluir algum filtro adicional, ele deverá ser feito antes da chamada do método, alimentando a variável cQuery.

Bloco de código
languagejs
titleExemplo
Exemplo1:
ASSIGN cQuery = JsonAPIQueryUtils:buildCompleteQuery("doc-fiscal":U,

Retorno (CHARACTER): QUERY completa.

Retornar a QUERY completa com o WHERE e BY.

Informações

Caso seja necessário incluir algum filtro adicional, ele deverá ser feito antes da chamada do método, alimentando a variável cQuery.

Bloco de código
languagejs
titleExemplo
Exemplo1: ASSIGN cQuery = JsonAPIQueryUtils:buildCompleteQuery("doc-fiscal":U, TEMP-TABLE ttDocument:HANDLE,
                  
oRequest,
                     TEMP-TABLE ttDocument:HANDLE,
                                      
cQuery). Exemplo2: ASSIGN
 
cQuery
 
=
 
JsonAPIQueryUtils:buildCompleteQuery("doc-fiscal":U,
                  oRequest,
                     
TEMP-TABLE
 
ttDocument:HANDLE,
                                      cQuery).

Exemplo2:
ASSIGN cQuery = JsonAPIQueryUtils:buildCompleteQuery("doc-fiscal":U,
                  
oRequest,
                     TEMP-TABLE ttDocument:HANDLE,
                                            
cQuery,
               oRequest,
                   
TEMP-TABLE
 
docFiscPersistent:HANDLE,
                                         
"xmlFile,documentStatus":U,
cQuery,
                                TEMP-TABLE docFiscPersistent:HANDLE,
                             
FALSE). Exemplo3: ASSIGN cQuery = JsonAPIQueryUtils:buildCompleteQuery("doc-fiscal
            "xmlFile,documentStatus":U,
                                          
TEMP-TABLE ttDocument:HANDLE,
                   FALSE).

Exemplo3:
ASSIGN cQuery = JsonAPIQueryUtils:buildCompleteQuery("doc-fiscal":U,
                                       
oRequest
TEMP-TABLE ttDocument:HANDLE,
                                                           
cQuery
oRequest,
                                 
TEMP-TABLE
 
docFiscPersistent:HANDLE,
                           cQuery,
              
"xmlFile,documentStatus":U,
                  TEMP-TABLE docFiscPersistent:HANDLE,
                                         
FALSE
"xmlFile,documentStatus":U,
                                                         
"search":U,
     FALSE,
                                                  "
des-nota

buildWhere ( cTable, hTempTable, oQueryParams, cQuery [, cExceptions , lMatches ] )

search,filter":U
).
,
                                                      "des-nota":U).

buildWhere ( cTable, hTempTable, oQueryParams, cQuery [, cExceptions , lMatches ] )

Parâmetros:

  • cTable (CHARACTER): Tabela principal da Query;
  • hTempTable (HANDLE): Handle da TempTable da API, que é utilizado para enviar os dados para o HTML;
  • oQueryParams (JsonObject): JsonObject com os QUERY PARAMS que foram informados na URL;
  • cQuery (CHARACTER): QUERY já existente;
  • cExceptions (CHARACTER): Lista de campos que não devem ser considerados na montagem do query, a lista deve ser informada separando os campos por vírgula e deve ser usado o SERIALIZE-NAME, exemplo: "name,code";
  • lMatches (LOGICAL): Indica que deve usar MATCHES no lugar da igualdade para campos caracter.

Retorno (CHARACTER): O comando WHERE.

Retorna o comando WHERE para ser usado na QUERY.

Bloco de código
languagejs
titleExemplo
Exemplo1:
ASSIGN cQuery = JsonAPIQueryUtils:buildWhere("cliente":U, 
                            TEMP-TABLE ttCustomer:HANDLE, 
                               oRequest:getQueryParams(),
                                                 cQuery).

Exemplo2:
ASSIGN cQuery = JsonAPIQueryUtils:buildWhere("cliente":U, 
                            TEMP-TABLE ttCustomer:HANDLE, 
                               oRequest:getQueryParams(),
                                                  cQuery,
                                        "status,address",
                                                   TRUE).

buildBy ( hTempTable, oOrder [, hMainTempTable] )

Parâmetros:

  • hTempTable (HANDLE): Handle da TempTable da API, que é utilizado para enviar os dados para o HTML;
  • oOrder (JsonArray): O JsonArray contendo o QUERY PARAM order;
  • hMainTempTable (HANDLE): TempTable da tabela principal. Se for informado, irá considerar no BY somente os campos existentes nesta TempTable.

Retorno (CHARACTER): O comando BY.

Retorna o comando BY para ser usado na QUERY.

Bloco de código
languagejs
titleExemplo
Exemplo1:
ASSIGN cQuery = cQuery 
              + JsonAPIQueryUtils:buildBy(TEMP-TABLE ttCustomer:HANDLE, 
                                                  oRequest:getOrder()).

Exemplo2:
ASSIGN cQuery = cQuery 
              + JsonAPIQueryUtils:buildBy(TEMP-TABLE ttCustomer:HANDLE, 
                                                   oRequest:getOrder(),
                                   TEMP-TABLE clientPersistent:HANDLE).
xxxx

getFieldName (

xxx, xxx [ , xxxx] 

pTempTable, pSerializeName )

Parâmetros:

xxx
  • pTempTable (
xxx
  • HANDLE):
xxxx
  • HANDLE da TempTable;
xxx
  • pSerializeName (
xxx
  • CHARACTER):
xxxx;
  • SERIALIZE-NAME do campo.

Retorno (CHARACTER): Nome do Campo.

Retorna o nome campo da TempTable com base no SERIALIZE-NAME informado

  • xxx (xxx): xxxx;
  • xxx (xxx): xxxx;
  • xxx (xxx): xxxx.
  • Retorno (xxx): xxxxxx.

    xxxx

    .

    Bloco de código
    languagejs
    titleExemplo
    xxxxx.

        /*---------------------------------------------------------------------------------------------
               Propósito:
                - Retorna o comando BY que deve ser usado na QUERY somente com campos da temp-table principal
            Parametros:
                1) hTempTable     - Handle da TempTable que é utilizado para enviar os dados para o HTML 
                2) oOrder         - O JsonArray contendo o QUERY PARAM order
                3) hMainTempTable - TempTable da tabela principal
            Retorno:
                - O comando BY que deve ser usado na QUERY
        ----------------------------------------------------------------------------------------------*/    
        METHOD PUBLIC STATIC CHARACTER buildBy (INPUT hTempTable     AS HANDLE,
                                                INPUT oOrder         AS JsonArray,
                                                INPUT hMainTempTable AS HANDLE):

            xxxxx
            
        END METHOD.

        /*----------------------------------------------------------------------------------------------
            Proposito:
                - Retorna o nome do campo da TEMP-TABLE com base no SERIALIZE-NAME informado
            Parametros:
                1) pTempTable     - HANDLE da TEMP-TABLE
                2) pSerializeName - SERIALIZE-NAME do campo
            Retorno:
                - Nome do campo na TEMP-TABLE
        ----------------------------------------------------------------------------------------------*/
        METHOD PUBLIC STATIC CHARACTER getFieldName (INPUT pTempTable     AS HANDLE,
                                                     INPUT pSerializeName AS CHARACTER):

            RETURN getFieldProperty("NAME", pTempTable, pSerializeName).

        END METHOD.
        
        /*----------------------------------------------------------------------------------------------
            Proposito:
                - Retorna o tipo de dado do campo da TEMP-TABLE com base no SERIALIZE-NAME informado
            Parametros:
                1) pTempTable     - HANDLE da TEMP-TABLE
                2) pSerializeName - SERIALIZE-NAME do campo
            Retorno:
                - Tipo de dado do campo em forma de string, exemplo: CHARACTER, INTEGER, LOGICAL
        ----------------------------------------------------------------------------------------------*/
        METHOD PUBLIC STATIC CHARACTER getFieldDataType (INPUT pTempTable     AS HANDLE,
                                                         INPUT pSerializeName AS CHARACTER):

            RETURN getFieldProperty("DATA-TYPE", pTempTable, pSerializeName).

        END METHOD.    
        
        /*----------------------------------------------------------------------------------------------
            Proposito:
                - Retorna o valor de uma propriedade do campo da TEMP-TABLE com base no SERIALIZE-NAME informado
            Parametros:
                1) pProperty      - Propriedade
                2) pTempTable     - HANDLE da TEMP-TABLE
                3) pSerializeName - SERIALIZE-NAME do campo
            Retorno:
                - Nome do campo na TEMP-TABLE
        ----------------------------------------------------------------------------------------------*/
        METHOD PUBLIC STATIC CHARACTER getFieldProperty (INPUT pProperty      AS CHARACTER,
                                                         INPUT pTempTable     AS HANDLE,
                                                         INPUT pSerializeName AS CHARACTER):

            xxxxxxxxxxxxxxxx

        END METHOD. 

    END CLASS.

    ...

    ASSIGN cFieldName = 
            JsonAPIQueryUtils:getFieldName(ITEMP-TABLE ttCustomer:HANDLE, 
                                                                 "code").

    getFieldDataType ( pTempTable, pSerializeName )

    Parâmetros:

    • pTempTable (HANDLE): HANDLE da TempTable;
    • pSerializeName (CHARACTER): SERIALIZE-NAME do campo.

    Retorno (CHARACTER): Tipo de dado do Campo. Exemplo: CHARACTER, INTEGER, LOGICAL.

    Retorna o tipo de dado do campo da TempTable com base no SERIALIZE-NAME informado.

    Bloco de código
    languagejs
    titleExemplo
    ASSIGN cDataType = 
            JsonAPIQueryUtils:getFieldDataType(ITEMP-TABLE ttCustomer:HANDLE, 
                                                                     "code").
    Bloco de código
    titleExemplo de uso
    Exemplo1:
    DEFINE VARIABLE cQuery   AS CHARACTER            NO-UNDO.
    DEFINE VARIABLE oRequest AS JsonAPIRequestParser NO-UNDO.
    
    ASSIGN oRequest = NEW JsonAPIRequestParser(oInput).
    
    ASSIGN cQuery = JsonAPIQueryUtils:buildCompleteQuery("doc-fiscal":U,
                                                         TEMP-TABLE ttDocument:HANDLE,
                                                         oRequest,
                                                         cQuery,
                                                         TEMP-TABLE docFiscPersistent:HANDLE,
                                                         "xmlFile,documentStatus":U,
                                                         FALSE,
                                                         "search":U,
                                                         "des-nota":U).
    
    -------------------------------------------------------------------------------------------
    
    Exemplo2:
    DEFINE VARIABLE cQuery   AS CHARACTER            NO-UNDO.
    DEFINE VARIABLE oRequest AS JsonAPIRequestParser NO-UNDO.
    
    ASSIGN oRequest = NEW JsonAPIRequestParser(oInput).
    
    ASSIGN cQuery = JsonAPIQueryUtils:buildWhere("cliente":U, 
                                                 TEMP-TABLE ttCustomer:HANDLE, 
                                                 oRequest:getQueryParams(),
                                                 cQuery).
    
    ASSIGN cQuery = cQuery 
                  + IF INDEX(cQuery, "WHERE":U) > 0 THEN ' AND ':U ELSE ' WHERE ':U 
                  + ' log_bloqueado = no '.
    
    ASSIGN cQuery = cQuery 
                  + JsonAPIQueryUtils:buildBy(TEMP-TABLE ttCustomer:HANDLE, 
                                              oRequest:getOrder()).

    ...