Árvore de páginas

Versões comparadas

Chave

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

...

PropriedadeObrigatoriedadeDescrição
tituloMenuObrigatório

Titulo apresentado no menu.

iconeMenuOpcional

Ícone para o menu. Lista de ícones PO UI que podem ser usados nesta propriedade. https://po-ui.io/guides/icons

tituloPaginaObrigatório

Titulo apresentado na pagina.

funcaoQueryObrigatório

Nome da user function que vai retornar a query para buscar os dados.

tabelaObrigatório

Alias da tabela utilizada para tratamento interno.

colunasObrigatório

Lista de campos do browse, o sistema vai utilizar o titulo da SX3. Se informar fields essa propriedade é ignorada.

legendasOpcional

Configuração das legendas. Array com value, color e label.

campoLegendasOpcional

Campo utilizado para legenda.

tituloLegendasOpcional

Titulo da legenda.

campoBuscaOpcional

Campo para busca rápida.

camposBuscaAvancadaOpcional

Lista de campos apra para busca avançada, o sistema vai utilizar o titulo da SX3. Se informar fields essa propriedade é ignorada.

detalhesObrigatório

Json com as propriedades para ser exibido na tela de detalhes do registro. "jDetalhes"

...

PropriedadeObrigatoriedadeDescrição
tituloPaginaObrigatórioTitulo apresentado na pagina de detalhes.
tituloAbaPrincipalObrigatórioTitulo apresentado na aba principal.
camposDetalhesObrigatórioLista de campos que serão apresentados, o sistema vai utilizar o titulo da SX3. Se informar fields Detalhes essa propriedade é ignorada.
tituloAbaItensObrigatórioTitulo apresentado na aba itens.
funcaoQueryItensObrigatórioUser funcion que vai retornar a query dos itens.
tabelaItensObrigatórioAlias dos itens.
colunasObrigatório

Lista de campos do browse, o sistema vai utilizar o titulo da SX3. Se informar fields essa propriedade é ignorada.

03. DESCRIÇÃO 'funcaoQuery - PCQRY01'

A função passada na propriedade 'funcaoQuery' será chamada pelo portal do cliente e aguarda a query que sera será executada para buscar os dados do menu customizado.

...

Parâmetros disponibilizados no ponto de entrada:

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


Retorno do ponto de entrada:

A função deve retornar a query personalizada:


TipoObrigatoriedadeDescrição
CaractereObrigatório

Query personalizada para listagem dos registros do menu customizado.

Aviso
titleAtenção
  • A seção SELECT da query deve contar a sintaxe #QueryFields# para uso interno em sua execução.
  • A seção WHARE da query deve contar a sintaxe #QueryWhere# para uso interno em sua execução.



04. DESCRIÇÃO 'funcaoQueryItens - PCITEM'

A função passada na propriedade 'funcaoQueryItens' será chamada pelo portal do cliente e aguarda a query que será executada para buscar os dados detalhados.


Parâmetros disponibilizados no ponto de entrada:

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
3º PosiçãoJsonJson contendo os dados detalhados da linha selecionada.


Retorno do ponto de entrada:

A função deve retornar a query personalizada:


TipoObrigatoriedadeDescrição
CaractereObrigatório

Query personalizada para listagem dos registros do menu customizado.

Aviso
titleAtenção
  • A seção SELECT da query deve contar a sintaxe #QueryFields# para uso interno em sua execução.
  • A seção WHARE da query deve contar a sintaxe #QueryWhere# para uso interno em sua execução.


05. EXEMPLO DE UTILIZAÇÃO

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