Páginas filhas
  • GenericQuery

Descrição:

Retorna uma listagem do alias informado, podendo ser mais de um alias.

Essa API foi criada com base na classe FWAdapterBaseV2, logo ela permite filtros, seleção de campos, paginação e ordenação.

Utilização da API

É necessário ligar a segurança do socket do rest para a utilização dessa api (chave SECURITY=1)

Nova funcionalidade

A partir da LIB Label 20240115 a genericQuery suportará o formato padrão do lookup do SV, informações no final da documentação.

Parâmetros

NomeTipoDescriçãoObrigatórioValor padrão
TablesStringIndica o alias da tabela que terá seus dados listados, caso seja mais de uma tabela, os alias devem ser separados por vírgulaX
FilialFilterBooleanIndica se deve ser feito o filtro da filial ([ALIAS]_FILIAL) - Opcional, tendo seu valor como verdadeiro por padrão.
true
DeletedFilterBooleanIndica se deve ser feito o filtro de campos deletados de forma lógica (D_E_L_E_T_)
true
WhereStringIndica um filtro SQL que será incluso na query

FromQryStringPara querys mais complexas, que exigem um left join por exemplo, o FROM e JOIN podem ser informados aqui, sendo que por padrão, a tabela deve ter um alias conforme o SX2, exemplo: SED990 SED

Exemplos de uso

api/framework/v1/genericQuery?tables=SED,SE1&fields=ed_codigo,ed_descric,e1_prefixo,e1_num,e1_parcela,e1_tipo&where=SED.D_E_L_E_T_=' ' AND SE1.D_E_L_E_T_ = ' ' AND SE1.E1_NATUREZ = SED.ED_CODIGO AND SE1.E1_FILIAL = 'D MG 01' AND SED.ED_FILIAL = 'D MG 01'


api/framework/v1/genericQuery?FromQry=SEDT10 SED JOIN SE1T10 SE1 ON SE1.E1_NATUREZ = SED.ED_CODIGO&tables=SED,SE1&fields=ed_codigo,ed_descric,e1_prefixo,e1_num,e1_parcela,e1_tipo&where=SED.D_E_L_E_T_=' ' AND SE1.D_E_L_E_T_ = ' ' AND SE1.E1_FILIAL = 'D MG 01' AND SED.ED_FILIAL = 'D MG 01'&e1_parcela=''&e1_prefixo=''

Importante

Caso seja informado mais de um alias e não seja informado um FromQry, é necessário que os filtros enviados ou o Where faça a devida junção entre as tabelas, caso contrário podemos ter cenários de JOIN sem WHERE ou ON, gerando uma quantidade de registros muito gande além do processamento da mesma no banco de dados.

Todas as tabelas tem um alias, como citado no parâmetro FromQry, logo a tabela SED990 é utilizada como SED, isso evita problemas em filtros de campos de mesmo nome, como o D_E_L_E_T_.

O JSON retornado tem como chave o nome do campo na tabela, evitando assim problemas com localização.
Essa API efetua validações de privilégios, nível de campo e dados protegidos.

Dados protegidos

Caso o usuário que consuma a API não tenha acesso a algum campo, esses campos não são retornados e a propriedade protectedDataFields do JSON de retorno listará tais campos.

Nível de campos

Assim como nos dados protegidos, caso o usuário não tenha acesso a um campo, ele não será retornado, sendo listado na propriedade nivelFields do JSON de retorno.

Comportamento

Devido ao nome de algumas tabelas do Protheus terem três letras e serem palavras reservadas do SQL, algumas tabelas recebem o sufixo PFW para que a query funcione corretamente:

  • ADD
  • ALL
  • AND
  • ANY
  • ASC
  • AVG
  • DEC
  • END
  • FOR
  • INT
  • KEY
  • NOT
  • ROW
  • SET
  • SUM

Isso afeta apenas o alias (apelido) da tabela na query, exemplo: SELECT * FROM SETT10 SETPFW WHERE SETPFW.D_E_L_E_T_ = ' '

Essa mudança de comportamento está presente na lib 20241125 ou superior.

Exemplo de retorno - SE5
{
	"items": [
		{
			"e5_tipo": "NF",
			"e5_vlmoed2": 4692.5,
			"e5_motbx": "NOR",
			"e5_tipodoc": "VL",
			"e5_dtdispo": "2015-3-3",
			"e5_numero": "000812",
			"e5_parcela": "",
			"e5_loja": "01",
			"e5_filorig": "M SP 01",
			"e5_naturez": "FIS0000031",
			"e5_filial": "M SP 01",
			"e5_histor": "Valor recebido s/ Titulo",
			"e5_valor": 4692.5
		}
	],
	"remainingRecords": 474,
	"protectedDataFields": [
		"E5_BANCO",
		"E5_BENEF"
	],
	"nivelFields": [
		"E5_MSFIL"
	],
	"hasNext": true
}


Formato padrão do Smart View

A partir da LIB Label 20240115 será possível utilizar a genericQuery no Smart View para as consultas do tipo Lookup.

Esse formato segue as mesmas regras documentadas acima, o que mudará será o formato de retorno da api.

Novos Parâmetros

NomeTipoDescriçãoObrigatórioValor padrão
FormatStringIndica se o formato de retorno é no padrão do Smart ViewX
KeyPropertyStringIndica o campo que deverá ser retornado da consulta, o mesmo deve estar contido nos campos da consultax

Além dos parâmetros padrões indicados no início da documentação, para utilizar o padrão esperado pro Smart View é necessário enviar os novos parâmetros Format e KeyProperty.

Exemplos de uso

api/framework/v1/genericQuery?tables=SED,SE1&fields=ed_codigo,ed_descric,e1_prefixo,e1_num,e1_parcela,e1_tipo&where=SED.D_E_L_E_T_=' ' AND SE1.D_E_L_E_T_ = ' ' AND SE1.E1_NATUREZ = SED.ED_CODIGO AND SE1.E1_FILIAL = 'D MG 01' AND SED.ED_FILIAL = 'D MG 01' AND SED.ED_CODIGO <> ''&Format=smartview&KeyProperty=ed_codigo


api/framework/v1/genericQuery?FromQry=SEDT10 SED JOIN SE1T10 SE1 ON SE1.E1_NATUREZ = SED.ED_CODIGO&tables=SED,SE1&fields=ed_codigo,ed_descric,e1_prefixo,e1_num,e1_parcela,e1_tipo&where=SED.D_E_L_E_T_=' ' AND SE1.D_E_L_E_T_ = ' ' AND SE1.E1_FILIAL = 'D MG 01' AND SED.ED_FILIAL = 'D MG 01 ' AND SED.ED_CODIGO <> ''&e1_parcela=''&e1_prefixo=''&Format=smartview&keyProperty=ed_codigo

Exemplo de retorno - SED|SE1
{
    "data": [
        {
            "ed_codigo": "0000000001",
            "ed_descric": "NATUREZA PROCESSE TMKA290",
            "e1_prefixo": "",
            "e1_num": "000000001",
            "e1_parcela": "",
            "e1_tipo": "NF"
        }
    ],
    "remainingRecords": 355,
    "protectedDataFields": [],
    "keyProperty": "ed_codigo",
    "nextPageUrl": "http://127.0.0.1:8050/rest/api/framework/v1/genericQuery?FromQry=SEDT10 SED JOIN SE1T10 SE1 ON SE1.E1_NATUREZ = SED.ED_CODIGO&tables=SED,SE1&fields=ed_codigo,ed_descric,e1_prefixo,e1_num,e1_parcela,e1_tipo&where=SED.D_E_L_E_T_=' ' AND SE1.D_E_L_E_T_ = ' ' AND SE1.E1_FILIAL = 'D MG 01' AND SED.ED_FILIAL = 'D MG 01 ' AND SED.ED_CODIGO <> ''&e1_parcela=''&e1_prefixo=''&Format=smartview&keyproperty=ed_codigo&page=2",
    "descriptor": {
        "ed_codigo": "Codigo",
        "ed_descric": "Descricao",
        "e1_prefixo": "Prefixo",
        "e1_num": "No. Titulo",
        "e1_parcela": "Parcela",
        "e1_tipo": "Tipo"
    }
}