Árvore de páginas

Versões comparadas

Chave

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

...

Linha de Produto:Microsiga Protheus®
Segmento:Backoffice
Módulo:Financeiro
Idiomas:Português
Função: Portal do Cliente

02. DESCRIÇÃO

...

Aviso
titleAtenção

O ponto de entrada foi liberado através do pacote de expedição continua do módulo financeiro após Outubro.

O ponto de entrada PCBROWSE permite incluir opções de menu para listagem de itens customizados ao Portal do Cliente - SIGAFIN.

O ponto de entrada deve retornar um array com o json de configuração de cada menu que deseja adicionar.

03. CONFIGURAÇÃO

Parâmetros disponibilizados no ponto de entrada:

PARAMIXB

Tipo

Descrição

1º PosiçãoCharacterUsuário de login do Portal do cliente.


Configuração necessário para que seja carregada a opção de menu no portal do cliente. Caso alguma informação obrigatória, função de usuário informada não compilada ou erro de execução ocorra o menu não será carregado.

Image Added

PropriedadeObrigatoriedadeDescrição
tituloMenuObrigatório

Titulo Título 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 Título apresentado na paginapágina.

funcaoQueryObrigatório

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

tabelaorderQueryOpcional

Campo no qual a ordenação da tabela vai se basear.

tabelaObrigatório

Alias da tabela

Obrigatório

Alias da tabela utilizada para tratamento interno.

colunasObrigatório se não enviar fields

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

fieldsOpcional

Array de json com os campos do browse. Cada campo deve ter as propriedades property, type e label (PoTableColumn):

  • property: string contendo o nome do campo.
  • type: string contendo o tipo do campo (Tipos aceitos: currency, date, number, string).
  • label: string que contém o título do campo.
legendasOpcional

Configuração das legendas. Array de json com as propriedades  value, color e label. (labels do PoTableColumnLabel)

campoLegendasOpcional

Campo utilizado para legenda.

tituloLegendasOpcional

Titulo Título da legenda.

detalhesOpcional

Json com as propriedades para ser exibido na tela de detalhes do registro. Consulte o item 03.02 Configuração de detalhes.

...

...


03.01. CONFIGURAÇÃO DE PESQUISA

...

PropriedadeObrigatoriedadeDescrição
campoBuscaOpcional

Campo para busca rápida.

camposBuscaAvancadaOpcional

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

fieldsBuscaAvancada Opcional

Array de json com os campos do para utilizar na busca avançada. Cada campo deve ter as propriedades property, type e label (PoDynamicFormField):

  • property: string contendo o nome do campo.
  • type: string contendo o tipo do campo (Tipos aceitos: currency, date, number, string).
  • label: string que contém o título do campo.

...

Caso seja configurado os detalhes, será apresentado no item a opção "visualizar" para exibição de informaçõese listagem de itens.

Image AddedImage Added

PropriedadeObrigatoriedadeDescrição
tituloPaginaObrigatórioTitulo Título apresentado na pagina página de detalhes.
tituloAbaPrincipalObrigatórioTitulo Título apresentado na aba principal.
camposDetalhesObrigatórioLista de campos que serão apresentados, o sistema vai utilizar o titulo da SX3. Se informar fieldsDetalhes essa propriedade é ignorada.
fieldsDetalhesOpcionalArray de json com os campos do browse. Cada campo deve ter as propriedades property, type e label (PoTableColumn):
  • property: string contendo o nome do campo.
  • type: string contendo o tipo do campo (Tipos aceitos: date, number, string).
  • label: string que contém o título do campo.
tituloAbaItensObrigatórioTitulo apresentado na aba itens.
  • divider: string contendo o título para definição da seção (Os campos adicionados após este farão parte desta divisão/seção).
orderQueryItensOpcionalCampo no qual a ordenação da tabela vai se basear.
tituloAbaItensOpcionalTítulo apresentado na aba itens.
funcaoQueryItensObrigatório se informado tituloAbaItensUser Funcion funcaoQueryItensObrigatórioUser funcion que vai retornar a query dos itens.
tabelaItensObrigatório se informado tituloAbaItensAlias dos itens.
colunasObrigatório se informado tituloAbaItens

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

fieldsObrigatório se informado tituloAbaItens

Array de json com os campos do browse. Cada campo deve ter as propriedades property, type e label (PoTableColumn):

  • property: string contendo o nome do campo.
  • type: string contendo o tipo do campo (Tipos aceitos: date, number, string).
  • label: string que contém o título do campo.

...

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 Json da linha selecionada no formato "{ Campo: Valor } " Ex.: "{ E1_FILIAL: '01', E1_NUM: '000001' }"


...

Bloco de código
languagejava
themeMidnight
firstline1
titlePCBROWSE
linenumberstrue
collapsetrue
#Include 'Protheus.ch'
 
/*/{Protheus.doc} PCBROWSE
	    Ponto de entrada para adicionar opcoes de menu no OortalPortal do cliente
	    @type function
	    @return array, array de configuracao
/*/
userUser Function PCBROWSE()
	Local aMenu    Local cUser := {}PARAMIXB[1] as Array
	aAddCharacter // Codigo do usuario logado no portal.
    Local aMenu := {} as Array

    AAdd(aMenu, MENU1()) // exemplo utilizando colunas SX3
	aAdd    AAdd(aMenu, MENU2()) // exemplo configurando fields
Return aMenu
 
/*/{Protheus.doc} MENU1
	    Configuracao do menu
	    @type function
	    @return json, configuracao do browse
/*/
Static Function MENU1()
	    Local jMenu     := JsonObject():new() as Json
	    Local jDetalhes := JsonObject():new() as Json

	    //titulo apresentado no menu
	    jMenu['tituloMenu'] := 'Pedidos1'
	
    //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 Pedidos1'
	
    //user funcion que vai retornar a query de busca
	    jMenu['funcaoQuery'] := 'PCQRY01'
	
    //alias da tabela utilizada para tratamentos internos
	campo que vai ser ordenado
    jMenu['tabelaorderQuery']  := 'SC5C5_EMISSAO DESC'
	//
    //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
    AAdd(jMenu['legendas'], prepareStatus("N", "color-01", "Normal"))
	aAdd    AAdd(jMenu['legendas'], prepareStatus("C", "color-02", "Compl.PrecIo/Cantidad"))
	aAdd    AAdd(jMenu['legendas'], prepareStatus("I", "color-03", "Compl.ICMS"))
	aAdd    AAdd(jMenu['legendas'], prepareStatus("P", "color-04", "Compl.IPI"))
	aAdd    AAdd(jMenu['legendas'], prepareStatus("D", "color-05", "Dev.Compras"))
	aAdd    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'
	

    //campo que vai ser ordenado
    jDetalhes['orderQueryItens'] := 'c6_item desc'

    //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
 
returnReturn jMenu
 
/*/{Protheus.doc} MENU2
	    Configuracao do menu utilizando as propriedades fields
	    @type function
	    @return json, configuracao do browse
/*/
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'
	 Pedidos2'
    jMenu['funcaoQuery']  := 'PCQRY01'
    jMenu['funcaoQueryorderQuery']   := 'PCQRY01C5_DATA1 ASC'
	    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

    AAdd(jMenu['fields'], prepareField("c5_filial" , "string", "Filial do pedido"))
	aAdd    AAdd(jMenu['fields'], prepareField("c5_num"    , "string", "Pedido"))
	aAdd    AAdd(jMenu['fields'], prepareField("c5_vend1"  , "string", "Vendedor"))
	aAdd    AAdd(jMenu['fields'], prepareField("c5_condpag", "string", "Forma de pagamento"))
	aAdd    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
    AAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_emissao", "date"  , "Data"))
	aAdd    AAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_filial" , "string", "Filial"))
	aAdd    AAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_nota"   , "string", "NF"))
	aAdd    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'] := {}     

	aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_num'    , 'string', 'Pedido'            , 'Dados'     ))
	aAdd    AAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_tipo'   , 'string', 'Tipo do pedido'                  ))
	aAdd    AAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_nota'   , 'string', 'Nota'                            ))
	aAdd    AAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_emissao', 'date'  , 'Data'                            ))
	aAdd    AAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_vend1'  , 'string', 'Vendedor'                        ))
	aAdd    AAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_tabela' , 'string', 'Tabela de preços'                ))
	aAdd    AAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_cliente', 'string', 'Código', 'Comprador'             ))
	aAdd    AAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_lojacli', 'string', 'Loja'                            ))
	aAdd    AAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_transp' , 'string', 'Código transportadora', 'Entrega'))
	aAdd    AAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_frete'  , 'string', 'Valor do frete'                  ))
	aAdd    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

    AAdd(jDetalhes['fields'], prepareField('c6_item'   , 'string'  , 'Item'))
	aAdd    AAdd(jDetalhes['fields'], prepareField('c6_produto', 'string'  , 'Código'))
	aAdd    AAdd(jDetalhes['fields'], prepareField('c6_qtdven' , 'string'  , 'Quantidade'))
	aAdd    AAdd(jDetalhes['fields'], prepareField('c6_prcven' , 'currency', 'Preço'))
	aAdd    AAdd(jDetalhes['fields'], prepareField('c6_valor'  , 'currency', 'Valor'))
 
	    jMenu['detalhes'] := jDetalhes
returnReturn jMenu
 
/*/{Protheus.doc} prepareField
	    funcao auxiliar para preparar as propriedades do field
	    @type function
	    @param cCampo, character, campo
	    @param cTipo, character, tipo (string, date, number)
	    @param cTitulo, character, titulo
	    @param cDivisor, character, titulo do divisor (utilizado nos detalhes)
	    @return json, json de field
/*/
Static Function prepareField(cCampo as Character, cTipo as Character, cTitulo as Character, cDivisor as Character)
	Local jField cDivisor as Character)
    Local jField       := JsonObject():new() as Json
	
    jField["property"] := cCampo
	    jField["type"]     := cTipo
	    jField["label"]    := cTitulo
	if

    If !Empty(cDivisor)
		        jField["divider"] := cDivisor
	endIf
    EndIf

Return jField
 
/*/{Protheus.doc} prepareStatus
	    funcao auxiliar para preparar as propriedades da legenda
	    @type function
	    @param cValor, character, valor
	    @param cCor, character, cor
	 cor
    @param cTitulo, character, label
	    @return variant, rconfiguracao de legenda
/*/
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 
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 functionFunction PCQRY01()
	localLocal aSA1   := Paramixb[1] // Array de clientes {{"D MG    ", "000002", "02"}, {"D RJ    ", "000002", "12"}}
	localLocal cLogin := Paramixb[2] // Login do portal 
	localLocal cQuery := ""
	localLocal cAlias := "SC5"
	localLocal nCli   := 1
	localLocal 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
	forFor nCli := 1 to len(aSA1)

		ifIf (nCli > 1)
			cOr := " OR "
		endIfEndIf

		cQuery +=  cOr + "(SC5.C5_CLIENTE = '" + aSA1[nCli][2] + "' AND SC5.C5_LOJACLI = '" + aSA1[nCli][3]+"')" 
	nextNext

	cQuery += ")"
	cQuery += " #QueryWhere# "

Return cQuery

/*/{Protheus.doc} PCITEM
	Query para listar os detalhes do item do PE PCBROWSE
	@type function
	@return character, query
/*/
userUser functionFunction PCITEM()
    localLocal aSA1    := Paramixb[1] // Clientes
    localLocal cUser   := Paramixb[2] // Login do portal
    localLocal jFilter := Paramixb[3] // Linha selecionada para os detalhes
    localLocal 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# "
returnReturn cQuery