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

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

Métodos

Nome

Descrição

buildCompleteQuery ( cTable, hTempTable, oRequest, cQuery [, hMainTempTable , cExceptions , lMatches ] [, cSearchParam, 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 (CHARACTER): Nome do QueryParam utilizado para fazer pesquisa com Matches;
  • 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.

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

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":U,
                                                      "des-nota":U).

buildWhere ( cTable, hTempTable, oRequest, 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 (JsonAPIRequestParser): Objeto JsonAPIRequestParser da Requisição;
  • 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.

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 ( xxx, xxx [ , xxxx] )

Parâmetros:

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

Retorno (xxx): xxxxxx.

xxxx.

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