Árvore de páginas

Versões comparadas

Chave

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

...

funcaoQuery recebe os parâmetros: 

PARAMIXB

Tipo

Descrição

1º PosiçãoArrayContém um Array com as chaves (FILIAL+CODIGO+LOJA) dos clientes selecionados no portal. 

Cada posição do Array contém um objeto Json com as propriedades: filial, codigo e loja.

2º PosiçãoCaracterUsuário de login do Portal do cliente

funcaoQueryItens recebe os parâmetros: 

PARAMIXB

Tipo

Descrição

1º PosiçãoArrayContém um Array com as chaves (FILIAL
+
, CODIGO
+
, LOJA) dos clientes selecionados no portal. 

Cada posição do Array contém um objeto Json com as propriedades: filial, codigo e loja.

2º PosiçãoCaracterUsuário de login do Portal do cliente
2º PosiçãoJson

json da linha selecionada no formato "{ Campo: Valor} " Ex.: "{E1_FILIAL: '01', E1_NUM: '000001'}"


Retorno do ponto de entrada:

A função deve retornar a query personalizada:

Deverá ser utilizado os Id's:

#QueryFields# Campos do SELECT, existe tratamento para o FIELDS no QueryParam
#QueryWhere# Condições do WHERE, existe tratamento para FILTER no QueryParam

...

Bloco de código
languagejava
themeMidnight
firstline1
titlePCBROWSE
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

user Function PCBROWSE()
	Local aMenu := {} as Array

	aAdd(aMenu, MENU1())
	aAdd(aMenu, MENU2())

Return aMenu


Static Function MENU1()
	Local jMenu     := JsonObject():new() as Json
	Local jDetalhes := JsonObject():new() as Json
	//titulo apresentado no menu
	jMenu['tituloMenu'] := 'Pedidos'
	//icone para o menu, lista de icones https://po-ui.io/guides/icons
	jMenu['iconeMenu']  := 'po-icon po-icon-manufacture'
	//titulo apresentado na pagina
	jMenu['tituloPagina'] := 'Meus Pedidos'
	//user funcion que vai retornar a query de busca
	jMenu['funcaoQuery'] := 'PCQRY01'
	//alias da tabela utilizada para tratamentos internos
	jMenu['tabela'] := 'SC5'
	//lista de campos do browse, o sistema vai utilizar o titulo da SX3. Se informar fields essa propriedade é ignorada
	jMenu['colunas'] := {'c5_filial', 'c5_condpag', 'c5_num', 'c5_vend1', 'c5_nota', 'c5_emissao'}
	//configuracao de legendas, array com value, color e label
	jMenu['legendas'] := {}
	aAdd(jMenu['legendas'], prepareStatus("N", "color-01", "Normal"))
	aAdd(jMenu['legendas'], prepareStatus("C", "color-02", "Compl.PrecIo/Cantidad"))
	aAdd(jMenu['legendas'], prepareStatus("I", "color-03", "Compl.ICMS"))
	aAdd(jMenu['legendas'], prepareStatus("P", "color-04", "Compl.IPI"))
	aAdd(jMenu['legendas'], prepareStatus("D", "color-05", "Dev.Compras"))
	aAdd(jMenu['legendas'], prepareStatus("B", "color-06", "Utiliza proveedor"))
	jMenu['campoLegendas'] := 'c5_tipo'
	jMenu['tituloLegendas'] := 'Tipo'
	//campo para busca rapida, Se informar fieldBusca essa propriedade é ignorada
	jMenu['campoBusca'] := 'c5_num'
	//lista de campos apra busca avancada, o sistema vai utilizar o titulo da SX3. Se informar fieldsBuscaAvancada essa propriedade é ignorada
	jMenu['camposBuscaAvancada'] := {'c5_filial', 'c5_vend1', 'c5_nota', 'c5_emissao', 'c5_transp'}
	
	//exemplo de configuracao de detalhes
	//titulo apresentado na pagina de detalhes
	jDetalhes['tituloPagina'] := 'Detalhes do pedido'
	//titulo apresentado na aba principal
	jDetalhes['tituloAbaPrincipal'] := 'Dados gerais'
	//lista de campos que serao apresentados, o sistema vai utilizar o titulo da SX3. Se informar fieldsDetalhes essa propriedade é ignorada 
	jDetalhes['camposDetalhes'] := {'c5_num','c5_tipo', 'c5_nota', 'c5_emissao', 'c5_vend1', 'c5_tabela', 'c5_cliente', 'c5_lojacli', 'c5_transp', 'c5_frete', 'c5_seguro',}

	//titulo apresentado na aba itens
	jDetalhes['tituloAbaItens'] := 'Produtos'
	//user funcion que vai retornar a query dos itens
	jDetalhes['funcaoQueryItens'] := 'PCITEM'
	//alias dos itens
	jDetalhes['tabelaItens'] := 'SC6'
	//lista de campos do browse, o sistema vai utilizar o titulo da SX3. Se informar fields essa propriedade é ignorada
	jDetalhes['colunas'] := {'c6_item', 'c6_produto', 'c6_descri', 'c6_qtdven', 'c6_prcven', 'c6_valor'}
	
	
	jMenu['detalhes'] := jDetalhes


return jMenu

Static Function MENU2()
	Local jMenu     := JsonObject():new() as Json //Json com as propriedades esperadas.
	Local jDetalhes := JsonObject():new() as Json

	jMenu['tituloMenu']   := 'Pedidos2'
	jMenu['iconeMenu']    := 'po-icon po-icon-manufacture'
	jMenu['tituloPagina'] := 'Meus Pedidos2'
	jMenu['funcaoQuery']  := 'PCQRY01'
	jMenu['tabela']       := 'SC5'
	//lista de campos do browse, utilizado quando nao quer pegar dados da SX3.
	//deve ser um array de json com as propriedades property, type e label
	jMenu['fields'] := {}
	aAdd(jMenu['fields'], prepareField("c5_filial", "string", "Filial do pedido"))
	aAdd(jMenu['fields'], prepareField("c5_num", "string", "Pedido"))
	aAdd(jMenu['fields'], prepareField("c5_vend1", "string", "Vendedor"))
	aAdd(jMenu['fields'], prepareField("c5_condpag", "string", "Forma de pagamento"))
	aAdd(jMenu['fields'], prepareField("c5_nota", "string", "NF"))

	//campo para busca rapida, utilizado quando nao quer pegar dados da SX3.
	//deve ser um array de json com as propriedades property, type e label
	jMenu['fieldBusca'] := prepareField("c5_num", "string", "Pesquisa por pedido")

	//lista de campos apra busca avancada, o sistema vai utilizar o titulo da SX3. Se informar fieldsBuscaAvancada essa propriedade é ignorada
	jMenu['fieldsBuscaAvancada'] := {}
	aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_emissao", "date", "Data"))
	aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_filial", "string", "Filial"))
	aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_nota", "string", "NF"))
	aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_num", "string", "Pedido"))

	//exemplo de configuracao de detalhes
	//titulo apresentado na pagina de detalhes
	jDetalhes['tituloPagina'] := 'Detalhes do pedido'
	//titulo apresentado na aba principal
	jDetalhes['tituloAbaPrincipal'] := 'Dados gerais'
	//Utiliza as propriedades PoDynamicViewField do po-dynamic-view poui. https://po-ui.io/documentation/po-dynamic-view
	jDetalhes['fieldsDetalhes'] := {}
	aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_num'    , 'string', 'Pedido'            , 'Dados'     ))
	aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_tipo'   , 'string', 'Tipo do pedido'                  ))
	aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_nota'   , 'string', 'Nota'                            ))
	aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_emissao', 'date'  , 'Data'                            ))
	aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_vend1'  , 'string', 'Vendedor'                        ))
	aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_tabela' , 'string', 'Tabela de preços'                ))
	aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_cliente', 'string', 'Código', 'Comprador'             ))
	aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_lojacli', 'string', 'Loja'                            ))
	aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_transp' , 'string', 'Código transportadora', 'Entrega'))
	aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_frete'  , 'string', 'Valor do frete'                  ))
	aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_seguro' , 'string', 'Valor do seguro'                 ))

	//titulo apresentado na aba itens
	jDetalhes['tituloAbaItens'] := 'Produtos'
	//user funcion que vai retornar a query dos itens
	jDetalhes['funcaoQueryItens'] := 'PCITEM'
	//alias dos itens
	jDetalhes['tabelaItens'] := 'SC6'
	//lista de campos do browse, deve ser um array de json com as propriedades property, type e label
	jDetalhes['fields'] := {}
	aAdd(jDetalhes['fields'], prepareField('c6_item'   , 'string'  , 'Item'))
	aAdd(jDetalhes['fields'], prepareField('c6_produto', 'string'  , 'Código'))
	aAdd(jDetalhes['fields'], prepareField('c6_qtdven' , 'string'  , 'Quantidade'))
	aAdd(jDetalhes['fields'], prepareField('c6_prcven' , 'currency', 'Preço'))
	aAdd(jDetalhes['fields'], prepareField('c6_valor'  , 'currency', 'Valor'))

	jMenu['detalhes'] := jDetalhes
return jMenu

Static Function prepareField(cCampo as Character, cTipo as Character, cTitulo as Character, cDivisor as Character)
	Local jField  := JsonObject():new() as Json
	jField["property"] := cCampo
	jField["type"]     := cTipo
	jField["label"]    := cTitulo
	if !Empty(cDivisor)
		jField["divider"] := cDivisor
	endIf
Return jField

Static Function prepareStatus(cValor as Character, cCor as Character, cTitulo as Character)
	Local jStatus  := JsonObject():new() as Json
	jStatus["value"] := cValor
	jStatus["color"] := cCor
	jStatus["label"] := cTitulo
Return jStatus


user function PCITEM()
    local aSA1    := Paramixb[1] // Clientes
    local cUser   := Paramixb[2] // Login do portal
    local jFilter := Paramixb[3] // Linha selecionada para os detalhes
    local cAlias := "SC6"


    cQuery := " SELECT #QueryFields#  "
    cQuery += " FROM " + RetSqlName(cAlias) + " " + cAlias
    cQuery += " WHERE  " + cAlias + ".D_E_L_E_T_ = ' ' AND "
    cQuery += " C6_FILIAL = '" + jFilter['C5_FILIAL'] + "' AND "
    cQuery += " C6_NUM = '" + jFilter['C5_NUM'] + "'"
    cQuery += " #QueryWhere# "
return cQuery


User function PCQRY01()
	local aSA1   := Paramixb[1] //{{"D MG    ", "000002", "02"}, {"D RJ    ", "000002", "12"}}
	local cLogin := Paramixb[2] // Login do portal
	local cQuery := ""
	local cAlias := "SC5"
	local nCli  := 1
	local cOr := ""

	cQuery := " SELECT #QueryFields#  "
	cQuery += " FROM " + RetSqlName(cAlias) + " SC5 "
	cQuery += " WHERE SC5.D_E_L_E_T_ = ' ' AND "
	cQuery += "("

	for nCli := 1 to len(aSA1)
		if (nCli > 1)
			cOr := " OR "
		endIf
		cQuery +=  cOr + "(SC5.C5_CLIENTE = '" + aSA1[nCli][2] + "' AND SC5.C5_LOJACLI = '" + aSA1[nCli][3]+"')" 
	next
	cQuery += ")"
	cQuery += " #QueryWhere# "
Return cQuery


Bloco de código
languagecpp
themeMidnight
firstline1
titleFUNCTION QUERY
linenumberstrue
collapsetrue
#Include 'Protheus.ch'  

*/{Protheus.doc} PCQRY01
	Query para listar os itens do PE PCBROWSE
	@type function
	@return character, query
/*/
User function PCQRY01()
	local aSA1   := Paramixb[1] // Array de clientes {{"D MG    ", "000002", "02"}, {"D RJ    ", "000002", "12"}}
	local cLogin := Paramixb[2] // Login do portal 
	local cQuery := ""
	local cAlias := "SC5"
	local nCli  := 1
	local cOr := ""

	cQuery := " SELECT #QueryFields#  "
	cQuery += " FROM " + RetSqlName(cAlias) + " SC5 "
	cQuery += " WHERE SC5.D_E_L_E_T_ = ' ' AND "
	cQuery += "("

	// lógica para filtro utilizando os código de clientes
	for nCli := 1 to len(aSA1)
		if (nCli > 1)
			cOr := " OR "
		endIf
		cQuery +=  cOr + "(SC5.C5_CLIENTE = '" + aSA1[nCli][2] + "' AND SC5.C5_LOJACLI = '" + aSA1[nCli][3]+"')" 
	next
	cQuery += ")"
	cQuery += " #QueryWhere# "

Return cQuery

/*/{Protheus.doc} PCITEM
	Query para listar os detalhes do item do PE PCBROWSE
	@type function
	@return character, query
/*/
user function PCITEM()
    local aSA1    := Paramixb[1] // Clientes
    local cUser   := Paramixb[2] // Login do portal
    local jFilter := Paramixb[3] // Linha selecionada para os detalhes
    local cAlias := "SC6"

    cQuery := " SELECT #QueryFields#  "
    cQuery += " FROM " + RetSqlName(cAlias) + " " + cAlias
    cQuery += " WHERE  " + cAlias + ".D_E_L_E_T_ = ' ' AND "
    cQuery += " C6_FILIAL = '" + jFilter['C5_FILIAL'] + "' AND "
    cQuery += " C6_NUM = '" + jFilter['C5_NUM'] + "'"
    cQuery += " #QueryWhere# "
return cQuery    user function PCITEM()
    local aSA1    := Paramixb[1] // Clientes
    local cUser   := Paramixb[2] // Login do portal
    local jFilter := Paramixb[3] // Linha selecionada para os detalhes
    local cAlias := "SC6"


    cQuery := " SELECT #QueryFields#  "
    cQuery += " FROM " + RetSqlName(cAlias) + " " + cAlias
    cQuery += " WHERE  " + cAlias + ".D_E_L_E_T_ = ' ' AND "
    cQuery += " C6_FILIAL = '" + jFilter['C5_FILIAL'] + "' AND "
    cQuery += " C6_NUM = '" + jFilter['C5_NUM'] + "'"
    cQuery += " #QueryWhere# "
return cQuery