...
Línea de | Produtoproducto: | Microsiga Protheus® |
Segmento: | Backoffice | |
Módulo: | Financeiro Financiero | |
Idiomas: | PortuguêsPortugués, Español | |
Función: | Portal do Clientedel cliente |
...
| Aviso | ||
|---|---|---|
| ||
O ponto de entrada PCBROWSE está em fase de desenvolvimento em breve entrará em testes com clientes piloto, portanto ainda não está liberada em nenhum release do Protheus! Será liberado através de pacote de expedição acumulado do módulo financeiro após Outubro. |
...
| |
El punto de entrada se liberó por medio del paquete de expedición continua del módulo Financiero después del mes de octubre. |
El punto de entrada PCBROWSE permite incluir
...
opciones de
...
menú para
...
el listado de ítems personalizados en el Portal del cliente - SIGAFIN.
...
El punto de entrada
...
debe devolver un array con el json de
...
configuración de cada
...
menú que
...
desea agregar.
...
PARAMIXB | Tipo | DescriçãoDescripción | |||
1º | PosiçãoPosición | Character | Usuário Usuario de login | do del Portal | do del cliente. |
Configuração necessário Configuración necesaria 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á carregadose cargue la opción de menú en el portal del cliente. Si alguna información obligatoria, función de usuario informada no compilada o error de ejecución ocurriera, no se cargará el menú.
Propiedad | ObrigatoriedadeObligatoriedad | DescriçãoDescripción | ||
tituloMenu | Obrigatório | Obligatorio | Título mostrado en el menúTitulo apresentado no menu. | |
iconeMenu | Opcional | Ícone Ícono para o menuel menú. Lista de íconesíconos PO UI que podem ser usados nesta propriedadepueden utilizarse en esta propiedad. https://po-ui.io/guides/icons | ||
tituloPagina | Obrigatório Obligatorio | Titulo apresentado na paginamostrado en la página. | ||
funcaoQuery | Obrigatório | Obligatorio | Nombre de la User Function que devolverá la Nome da user function que vai retornar a query para buscar os dadoslos datos. | |
orderQuery | Opcional | Campo no qual a ordenação da tabela vai se basear. | ||
| tabela | Obrigatório | Alias da tabela utilizada para tratamento interno. | ||
en el cual se basará el orden de la tabla. | ||||
tabla | Obligatorio | Alias de la tabla utilizada para tratamiento interno. | ||
columnas | Es obligatorio si no se envían | colunas | Obrigatório se não enviar fields | Array de campos do del browse, o sistema vai utilizar o titulo da SX3. Se informar fields essa propriedade é ignoradael sistema utilizará el título de la SX3. Si se informan fields, se ignorará esta propiedad. |
fields | Opcional | Array de json com os con los campos do del browse. Cada campo deve ter as propriedades debe tener las propiedades property, type e y label (PoTableColumn):
| ||
| legendas leyeendas | Opcional | Configuração das legendas Configuración de las leyendas. Array de json com as propriedadescon las propiedades value, color ey label. (labels dodel PoTableColumnLabel) | ||
campoLegendas | Opcional | Campo utilizado para legendaleyenda. | ||
tituloLegendas | Opcional | Titulo da legendaTítulo de la leyenda. | ||
| detalhes detalles | Opcional | Json com as propriedades para ser exibido na tela de detalhes do con las propiedades para que se muestre en la pantalla de detalles del registro. Consulte o item el ítem 03.02 Configuração Configuración de detalhesdetalles. |
...
...
É possível configurar a pesquisa simples e avançada através da configuração:
Es posible configurar la búsqueda simple y avanzada por medio de la configuración:
Propiedad | Obligatoriedad | Descripción | Propriedade | Obrigatoriedade | Descrição|
|---|---|---|---|---|---|
campoBusca | Opcional | Campo para busca búsqueda rápida. | |||
camposBuscaAvancada | Opcional | Lista de campos para busca avançadabúsqueda avanzada, o sistema vai utilizar o titulo da SX3. Se informar fieldsBuscaAvancada essa propriedade é ignoradael sistema utilizará el título de la SX3. Si se informa fieldsBuscaAvancada , se ignorará esta propiedad. | |||
fieldsBuscaAvancada | Opcional | Array de json com os con los campos do para utilizar na busca avançadaen la búsqueda avanzada. Cada campo deve ter as propriedades debe tener las propiedades property, type e y label (PoDynamicFormField):
|
...
...
Si se configuran los detalles, se muestra en el ítem la opción "visualizar" para
...
la exhibición de las informacionesy el listado de ítems.
Propiedad | ObrigatoriedadeObligatoriedad | DescriçãoDescripción | |
tituloPagina | Obrigatório | Obligatorio | Título que se muestra en la página de detalles Titulo apresentado na pagina de detalhes. |
tituloAbaPrincipal | Obrigatório | Obligatorio | Título que se muestra en la solapa Titulo apresentado na abaprincipal. |
camposDetalhes | Obrigatório Obligatorio | Lista de campos que serão apresentadosse mostrarán, o sistema vai utilizar o titulo da SX3. Se informar fieldsDetalhes essa propriedade é ignoradael sistema utilizará el título de la SX3. Si se informa fieldsDetalhes , se ignorará esta propiedad. | |
fieldsDetalhes | Opcional | Array de json com oscon los campos dodel browse. Cada campo deve ter as propriedadesdebe tener las propiedades property, type ey label (PoTableColumn):
| |
orderQueryItens | Opcional | Campo no qual a ordenação da tabela vai se basearen el cual se basará el orden de la tabla. | |
tituloAbaItens | Opcional Titulo | apresentado na aba itens Título que se muestra en la solapa Ítems. | |
funcaoQueryItens | Obrigatório Es obligatorio si se informadoinforma tituloAbaItens | User funcion que vai retornar a query dos itensFuncion que devolverá la query de los ítems. | |
tabelaItens | Obrigatório Es obligatorio si se informadoinforma tituloAbaItens | Alias dos itens. | |
| colunas columnas | Obrigatório Es obligatorio si se informadoinforma tituloAbaItens | Lista de campos do del browse, o sistema vai utilizar o titulo da SX3. Se informar fields essa propriedade é ignoradael sistema utilizará el título de la SX3. Si se informa fields , se ignorará esta propiedad. | |
fields | Obrigatório Es obligatorio si se informadoinforma tituloAbaItens | Array de json com os con los campos do del browse. Cada campo deve ter as propriedades debe tener las propiedades property, type e y label (PoTableColumn):
|
...
La función pasada en la propiedad 'funcaoQuery'
...
y 'funcaoQueryItens'
...
se llamará por el Portal del cliente para que devuelva la query personalizada que se utilizará en la búsqueda de los ítems.
...
PARAMIXB | Tipo | DescriçãoDescripción | |||
1º | PosiçãoPosición | Array | Contém um Array com as chaves (FILIAL+CODIGO+LOJA) dos clientes selecionados no Contiene un Array con las claves (SUCURSAL+CÓDIGO+TIENDA) de los clientes seleccionados en el portal. Cada | posição do Array contém um objeto Json com as propriedades: filial, codigo e lojaposición del Array contiene un objeto Json con las propiedades: sucursal, código y tienda. | |
2º | PosiçãoPosición | CaracterCarácter | Usuário Usuario de login | do del Portal | do del cliente |
...
PARAMIXB | Tipo | DescriçãoDescripción | |||
1º | PosiçãoPosición | Array | Contém um Array com as chaves (FILIAL, CODIGO, LOJA) dos clientes selecionados no Contiene un Array con las claves (SUCURSAL, CÓDIGO, TIENDA) de los clientes seleccionados en el portal. Cada | posição do Array contém um objeto Json com as propriedades: filial, codigo e lojaposición del Array contiene un objeto Json con las propiedades: sucursal, código y tienda. | |
2º | PosiçãoPosición | CaracterCarácter | Usuário Usuario de login | do del Portal | do del cliente |
2º | PosiçãoPosición | Json | json da linha selecionada no Json de la línea seleccionada en el formato "{ Campo: Valor} " | ExEj.: "{E1_FILIAL: '01', E1_NUM: '000001'}" |
...
A função deve retornar a La función debe devolver la query personalizada:
Deverão ser utilizados os Id'sDeben utilizarse los Id:
#QueryFields# Campos
...
del SELECT, existe
...
tratamiento para
...
el FIELDS
...
en el QueryParam
#QueryWhere#
...
Condiciones del WHERE, existe
...
tratamiento para FILTER
...
en el QueryParam
Tipo | ObrigatoriedadeObligatoriedad | DescriçãoDescripción |
| Caractere Carácter | Obrigatório Obligatorio | Query personalizada para listagem dos registros do menu customizadolistado de los registros del menú personalizado. |
...
...
| Bloco de código | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
#Include 'Protheus.ch'
/*/{Protheus.doc} PCBROWSE
PontoPunto de entrada para adicionarincluir opcoesopciones de menú menuen noel OortalPortal dodel cliente
@type function
@return array, array de configuracaoconfiguración
/*/
userUser Function PCBROWSE()
Local cUser := PARAMIXB[1] as Character // Codigo dodel usuario logadoconectado noal portal.
Local aMenu := {} as Array
aAddAAdd(aMenu, MENU1()) // exemploejemplo utilizando colunascolumnas SX3
aAddAAdd(aMenu, MENU2()) // exemploejemplo configurando fields
Return aMenu
/*/{Protheus.doc} MENU1
ConfiguracaoConfiguración dodel menumenú
@type function
@return json, configuracaoconfiguración dodel browse
/*/
Static Function MENU1()
Local jMenu := JsonObject():new() as Json
Local jDetalhes := JsonObject():new() as Json
//titulotítulo presentado apresentadoen noel menumenú
jMenu['tituloMenu'] := 'Pedidos1'
//iconeícono para oel menumenú, lista de icones https://po-ui.io/guides/icons
jMenu['iconeMenu'] := 'po-icon po-icon-manufacture'
//titulotítulo presentado apresentadoen nala paginapágina
jMenu['tituloPagina'] := 'MeusMis Pedidos1'
//user funcion que vai retornardevolverá ala query de buscabúsqueda
jMenu['funcaoQuery'] := 'PCQRY01'
//campo que vaise ser ordenadoordenará
jMenu['orderQuery'] := 'C5_EMISSAO DESC'
//alias dade la tabelatabla utilizada para tratamentostratamientos internos
jMenu['tabela'] := 'SC5'
//lista de campos dodel browse, oel sistema vaiutilizará utilizarel otítulo titulode dala SX3. Si Sese informarinforman fields, essase propriedadeignorará éesta ignoradapropiedad
jMenu['colunas'] := {'c5_filial', 'c5_condpag', 'c5_num', 'c5_vend1', 'c5_nota', 'c5_emissao'}
//configuracaoconfiguración de legendasleyeendas, array comcon value, color ey label
jMenu['legendas'] := {}
aAddAAdd(jMenu['legendas'], prepareStatus("N", "color-01", "Normal"))
aAddAAdd(jMenu['legendas'], prepareStatus("C", "color-02", "Compl.PrecIo/Cantidad"))
aAddAAdd(jMenu['legendas'], prepareStatus("I", "color-03", "Compl.ICMS"))
aAddAAdd(jMenu['legendas'], prepareStatus("P", "color-04", "Compl.IPI"))
aAddAAdd(jMenu['legendas'], prepareStatus("D", "color-05", "Dev.Compras"))
aAddAAdd(jMenu['legendas'], prepareStatus("B", "color-06", "Utiliza proveedor"))
jMenu['campoLegendas'] := 'c5_tipo'
jMenu['tituloLegendas'] := 'Tipo'
//campo para buscabúsqueda rapidarápida, Sesi se informarinforma fieldBusca essase propriedadeignorará éesta ignoradapropiedad
jMenu['campoBusca'] := 'c5_num'
//lista de campos aprapara buscabúsqueda avancadaavanzada, oel sistema vaiutilizará utilizarel otítulo titulode dala SX3. Si Sese informarinforma fieldsBuscaAvancada essase propriedadeignorará éesta ignoradapropiedad
jMenu['camposBuscaAvancada'] := {'c5_filial', 'c5_vend1', 'c5_nota', 'c5_emissao', 'c5_transp'}
//exemploejemplo de configuracaoconfiguración de detalhesdetalles
//titulotítulo presentado apresentadoen nala paginapágina de detalhesdetalles
jDetalhes['tituloPagina'] := 'DetalhesDetalles dodel pedido'
//titulotítulo presentado apresentadoen nala abasolapa principal
jDetalhes['tituloAbaPrincipal'] := 'DadosDatos geraisgenerales'
//lista de campos que seraose apresentadospresentarán, oel sistema vaiutilizará utilizarel otítulo titulode dala SX3. Si Sese informarinforma fieldsDetalhes essase propriedadeignorará éesta ignoradapropiedad
jDetalhes['camposDetalhes'] := {'c5_num','c5_tipo', 'c5_nota', 'c5_emissao', 'c5_vend1', 'c5_tabela', 'c5_cliente', 'c5_lojacli', 'c5_transp', 'c5_frete', 'c5_seguro',}
//titulotítulo presentado apresentadoen nala abasolapa itensítem
jDetalhes['tituloAbaItens'] := 'ProdutosProductos'
//user funcion que vaidevolverá retornarla aquery queryde doslos itensítems
jDetalhes['funcaoQueryItens'] := 'PCITEM'
//campo que vaise ser ordenadoordenará
jDetalhes['orderQueryItens'] := 'c6_item desc'
//alias dosde los itensítems
jDetalhes['tabelaItens'] := 'SC6'
//lista de campos dodel browse, oel sistema vaiutilizará utilizarel otítulo titulode dala SX3. Si Sese informarinforma fields essase propriedadeignorará éesta ignoradapropiedad
jDetalhes['colunas'] := {'c6_item', 'c6_produto', 'c6_descri', 'c6_qtdven', 'c6_prcven', 'c6_valor'}
jMenu['detalhes'] := jDetalhes
returnReturn jMenu
/*/{Protheus.doc} MENU2
ConfiguracaoConfiguración dodel menumenú utilizando aslas propriedadespropiedades fields
@type function
@return json, configuracaoconfiguración do browse
/*/
Static Function MENU2()
Local jMenu := JsonObject():new() as Json //Json comcon aslas propriedadespropiedades esperadas.
Local jDetalhes := JsonObject():new() as Json
jMenu['tituloMenu'] := 'Pedidos2'
jMenu['iconeMenu'] := 'po-icon po-icon-manufacture'
jMenu['tituloPagina'] := 'MeusMis Pedidos2'
jMenu['funcaoQuery'] := 'PCQRY01'
jMenu['orderQuery'] := 'C5_DATA1 ASC'
jMenu['tabela'] := 'SC5'
//lista de campos dodel browse, utilizado cuando quandono se naoquiere querusar pegardatos dadosde dala SX3.
//devedebe ser umun array de json comcon aslas propriedadespropiedades property, type ey label
jMenu['fields'] := {}
aAddAAdd(jMenu['fields'], prepareField("c5_filial" , "string", "FilialSucursal dodel pedido"))
aAddAAdd(jMenu['fields'], prepareField("c5_num" , "string", "Pedido"))
aAddAAdd(jMenu['fields'], prepareField("c5_vend1" , "string", "Vendedor"))
aAddAAdd(jMenu['fields'], prepareField("c5_condpag", "string", "Forma de pagamentopago"))
aAddAAdd(jMenu['fields'], prepareField("c5_nota" , "string", "NFFact"))
//campo para buscabúsqueda rapidarápida, utilizado cuando no quandose naoquiere querusar pegardatos dadosde dala SX3.
//devedebe ser umun array de json comcon aslas propriedadespropiedades property, type ey label
jMenu['fieldBusca'] := prepareField("c5_num", "string", "PesquisaBúsqueda por pedido")
//lista de campos aprapara buscabúsqueda avancadaavanzada, oel sistema vaiutilizará utilizarel otítulo titulode dala SX3. SeSi se informarinforma fieldsBuscaAvancada essase propriedadeignorará éesta ignoradapropiedad
jMenu['fieldsBuscaAvancada'] := {}
aAddAAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_emissao", "date" , "DataFecha"))
aAddAAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_filial" , "string", "FilialSucursal"))
aAddAAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_nota" , "string", "NFFact"))
aAddAAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_num" , "string", "Pedido"))
//exemploejemplo de configuracaoconfiguración de detalhesdetalles
//titulotítulo presentado apresentadoen nala paginapágina de detalhesdetalles
jDetalhes['tituloPagina'] := 'DetalhesDetalles dodel pedido'
//titulotítulo presentado apresentadoen nala abasolapa principal
jDetalhes['tituloAbaPrincipal'] := 'DadosDatos geraisgenerales'
//Utiliza aslas propriedadespropiedades PoDynamicViewField do po-dynamic-view poui. https://po-ui.io/documentation/po-dynamic-view
jDetalhes['fieldsDetalhes'] := {}
aAdd
AAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_num' , 'string', 'Pedido' , 'DadosDatos' ))
aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_tipo' , 'string', 'Tipo dode pedido' ))
aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_nota' , 'string', 'NotaFactura' ))
aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_emissao', 'date' , 'DataFecha' ))
aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_vend1' , 'string', 'Vendedor' ))
aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_tabela' , 'string', 'TabelaLista de preçosprecios' ))
aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_cliente', 'string', 'Código', 'Comprador' ))
aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_lojacli', 'string', 'LojaTienda' ))
aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_transp' , 'string', 'CódigoCód Emp transportadoraTransportes', 'Entrega' ))
aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_frete' , 'string', 'Valor dode freteflete' ))
aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_seguro' , 'string', 'Valor dode seguro' ))
//titulotítulo presentado apresentadoen nala abasolapa itensítems
jDetalhes['tituloAbaItens'] := 'ProdutosProductos'
//user funcion que vaidevolverá retornarla aquery queryde doslos itensítems
jDetalhes['funcaoQueryItens'] := 'PCITEM'
//alias dosde los itensítems
jDetalhes['tabelaItens'] := 'SC6'
//lista de campos dodel browse, devedebe ser umun array de json comcon aslas propriedadespropiedades property, type ey label
jDetalhes['fields'] := {}
aAddAAdd(jDetalhes['fields'], prepareField('c6_item' , 'string' , 'Item'))
aAddAAdd(jDetalhes['fields'], prepareField('c6_produto', 'string' , 'Código'))
aAddAAdd(jDetalhes['fields'], prepareField('c6_qtdven' , 'string' , 'QuantidadeCantidad'))
aAddAAdd(jDetalhes['fields'], prepareField('c6_prcven' , 'currency', 'PreçoPrecio'))
aAddAAdd(jDetalhes['fields'], prepareField('c6_valor' , 'currency', 'Valor'))
jMenu['detalhes'] := jDetalhes
returnReturn jMenu
/*/{Protheus.doc} prepareField
funcaofunción auxiliar para preparar aslas propriedadespropiedades dodel field
@type function
@param cCampo, character, campo
@param cTipo, character, tipo (string, date, number)
@param cTitulo, character, titulotítulo
@param cDivisor, character, titulotítulo dodel divisor (utilizado nosen los detalhes)
@return json, json de field
/*/
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
ifIf !Empty(cDivisor)
jField["divider"] := cDivisor
endIfEndIf
Return jField
/*/{Protheus.doc} prepareStatus
funcaofunción auxiliar para preparar las aspropiedades propriedadesde dala legendaleyenda
@type function
@param cValor, character, valor
@param cCor, character, cor
@param cTitulo, character, label
@return variant, rconfiguracao de legendaleyenda
/*/
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 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
#Include 'Protheus.ch'
/*/{Protheus.doc} PCQRY01
Query para listar oslos itensítems dodel 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 dodel 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 oslos 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 oslos detalhesdetalles dodel itemítem dodel PE PCBROWSE
@type function
@return character, query
/*/
userUser functionFunction PCITEM()
localLocal aSA1 := Paramixb[1] // Clientes
localLocal cUser := Paramixb[2] // Login dodel portal
localLocal jFilter := Paramixb[3] // LinhaLínea selecionadaseleccionada para oslos detalhesdetalles
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
|