Árvore de páginas

Classe utilizada na 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 sem a necessidade de instanciar a classe.

Métodos

Nome

Descrição

buildCompleteQuery ( cTable, hTempTable, oRequest, cQuery [, hMainTempTable , cExceptions , lMatches ] [, 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;
  • cSearchListParams (CHARACTER): Lista de QueryParams que serão considerados para fazer a pesquisa com Matches. 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.

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

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

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

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

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

Exemplo
ASSIGN cDataType = 
        JsonAPIQueryUtils:getFieldDataType(ITEMP-TABLE ttCustomer:HANDLE, 
                                                                 "code").
Exemplo 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()).