Á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,
                                       TEMP-TABLE ttDocument:HANDLE,

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,
                                                            cQuery).

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

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

buildWhere ( cTable, hTempTable,

oRequest

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;
oRequest
  • oQueryParams (
JsonAPIRequestParser
  • JsonObject):
Objeto JsonAPIRequestParser da Requisição
  • 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).
xxxx

buildBy (

xxx

hTempTable,

xxx

oOrder [,

xxxx

hMainTempTable]

 

)

Parâmetros:

xxx
  • hTempTable (
xxx
  • HANDLE):
xxxx
  • Handle da TempTable da API, que é utilizado para enviar os dados para o HTML;
xxx
  • oOrder (
xxx): xxxx;
  • 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
  • xxx (xxx): xxxx;
  • xxx (xxx): xxxx;
  • xxx (xxx): xxxx
    • .

    Retorno (

    xxx

    CHARACTER):

    xxxxxx

    O comando BY.

    xxxx

    Retorna o comando BY para ser usado na QUERY.

    Bloco de código
    languagejs
    titleExemplo
    xxxxx.

        /*----------------------------------------------------------------------------------------------
            Propósito:
                -     
            Parâmetros:
                1) cTable       - Tabela principal da Query
                2) hTempTable   - Handle da TempTable que é utilizado para enviar os dados para o HTML 
                3) oQueryParams - JsonObject com os QUERY PARAMS que foram informados na URL
                4) cQuery       - QUERY já existente
            Retorno:
                - O comando WHERE que deve ser usado na QUERY
        ----------------------------------------------------------------------------------------------*/
        METHOD PUBLIC STATIC CHARACTER buildWhere (INPUT cTable       AS CHARACTER,
                                                   INPUT hTempTable   AS HANDLE,
                                                   INPUT oQueryParams AS JsonObject,
                                                   INPUT cQuery       AS CHARACTER):
                                                   
            RETURN buildWhere (cTable, hTempTable, oQueryParams, cQuery, "", TRUE).

        END METHOD.

        /*----------------------------------------------------------------------------------------------
            Propósito:
                - Retorna o comando WHERE que deve ser usado na QUERY    
            Parâmetros:
                1) cTable       - Tabela principal da Query
                2) hTempTable   - Handle da TempTable que é utilizado para enviar os dados para o HTML 
                3) oQueryParams - JsonObject com os QUERY PARAMS que foram informados na URL
                4) cQuery       - QUERY já existente
                5) cExceptions  - Lista de campos que não devem ser considerados na moontagem do comando,
                                  a lista deve ser informada separando os campos por vírgula e deve ser
                                  usado o SERIALIZE-NAME, exemplo: "name,code"
                6) lMatches     - Indica que deve usar MATCHES no lugar da igualdade para campos caracter
            Retorno:
                - O comando WHERE que deve ser usado na QUERY
        ----------------------------------------------------------------------------------------------*/
        METHOD PUBLIC STATIC CHARACTER buildWhere (INPUT cTable       AS CHAR,
                                                   INPUT hTempTable   AS HANDLE,
                                                   INPUT oQueryParams AS JsonObject,
                                                   INPUT cQuery       AS CHARACTER,
                                                   INPUT cExceptions  AS CHARACTER,
                                                   INPUT lMatches     AS LOGICAL):

            xxxxxxx

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

            RETURN buildBy(hTempTable, oOrder, ?).

        END METHOD.

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

    ...

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

    getFieldName ( pTempTable, pSerializeName )

    Parâmetros:

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

    Retorno (CHARACTER): Nome do Campo.

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

    Bloco de código
    languagejs
    titleExemplo
    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()).

    ...