Histórico da Página
...
Linha de Produto: | Microsiga Protheus® |
---|---|
Segmento: | Backoffice |
Módulo: | Financeiro |
Idiomas: | Português |
Função: | Portal do Cliente |
02. DESCRIÇÃO
...
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 foi liberado através do pacote de expedição acumulado 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.
...
Propriedade | Obrigatoriedade | Descrição |
---|---|---|
tituloMenu | Obrigatório | Titulo Título apresentado no menu. |
iconeMenu | Opcional | Ícone para o menu. Lista de ícones PO UI que podem ser usados nesta propriedade. https://po-ui.io/guides/icons |
tituloPagina | Obrigatório | Titulo Título apresentado na paginapágina. |
funcaoQuery | Obrigatório | Nome da user function User Function que vai retornar a query para buscar os dados. |
orderQuery | Opcional | Campo no qual a ordenação da tabela vai se basear. |
tabela | Obrigatório | Alias da tabela utilizada para tratamento interno. |
colunas | Obrigató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. |
fields | Opcional | Array de json com os campos do browse. Cada campo deve ter as propriedades property, type e label (PoTableColumn):
|
legendas | Opcional | Configuração das legendas. Array de json com as propriedades value, color e label. (labels do PoTableColumnLabel) |
campoLegendas | Opcional | Campo utilizado para legenda. |
tituloLegendas | Opcional | Titulo Título da legenda. |
detalhes | Opcional | Json com as propriedades para ser exibido na tela de detalhes do registro. Consulte o item 03.02 Configuração de detalhes. |
...
Propriedade | Obrigatoriedade | Descrição |
---|---|---|
campoBusca | Opcional | Campo para busca rápida. |
camposBuscaAvancada | Opcional | 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):
|
...
Propriedade | Obrigatoriedade | Descrição |
---|---|---|
tituloPagina | Obrigatório | Titulo Título apresentado na pagina página de detalhes. |
tituloAbaPrincipal | Obrigatório | Titulo Título apresentado na aba principal. |
camposDetalhes | Obrigatório | Lista de campos que serão apresentados, o sistema vai utilizar o titulo da SX3. Se informar fieldsDetalhes essa propriedade é ignorada. |
fieldsDetalhes | Opcional | Array de json com os campos do browse. Cada campo deve ter as propriedades property, type e label (PoTableColumn):
|
orderQueryItens | Opcional | Campo no qual a ordenação da tabela vai se basear. |
tituloAbaItens | Opcional | Titulo Título apresentado na aba itens. |
funcaoQueryItens | Obrigatório se informado tituloAbaItens | User funcion Funcion que vai retornar a query dos itens. |
tabelaItens | Obrigatório se informado tituloAbaItens | Alias dos itens. |
colunas | Obrigató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. |
fields | Obrigatório se informado tituloAbaItens | Array de json com os campos do browse. Cada campo deve ter as propriedades property, type e label (PoTableColumn):
|
...
PARAMIXB | Tipo | Descrição |
---|---|---|
1º Posição | Array | Conté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ção | Caracter | Usuário de login do Portal do cliente |
2º Posição | Json | json Json da linha selecionada no formato "{ Campo: Valor } " Ex.: "{ E1_FILIAL: '01', E1_NUM: '000001' }" |
...
Bloco de código | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
#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 cUser := PARAMIXB[1] as Character // Codigo do usuario logado no portal. Local aMenu := {} as Array aAddAAdd(aMenu, MENU1()) // exemplo utilizando colunas SX3 aAddAAdd(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' //campo que vai ser ordenado jMenu['orderQuery'] := 'C5_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'] := {} 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 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' jMenu['funcaoQuery'] := 'PCQRY01' jMenu['orderQuery'] := 'C5_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'] := {} aAddAAdd(jMenu['fields'], prepareField("c5_filial" , "string", "Filial do 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 pagamento")) aAddAAdd(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'] := {} aAddAAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_emissao", "date" , "Data")) aAddAAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_filial" , "string", "Filial")) aAddAAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_nota" , "string", "NF")) aAddAAdd(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 AAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_num' , 'string', 'Pedido' , 'Dados' )) aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_tipo' , 'string', 'Tipo do pedido' )) aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_nota' , 'string', 'Nota' )) aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_emissao', 'date' , 'Data' )) aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_vend1' , 'string', 'Vendedor' )) aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_tabela' , 'string', 'Tabela de preços' )) aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_cliente', 'string', 'Código', 'Comprador' )) aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_lojacli', 'string', 'Loja' )) aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_transp' , 'string', 'Código transportadora', 'Entrega')) aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_frete' , 'string', 'Valor do frete' )) aAddAAdd(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'] := {} aAddAAdd(jDetalhes['fields'], prepareField('c6_item' , 'string' , 'Item')) aAddAAdd(jDetalhes['fields'], prepareField('c6_produto', 'string' , 'Código')) aAddAAdd(jDetalhes['fields'], prepareField('c6_qtdven' , 'string' , 'Quantidade')) aAddAAdd(jDetalhes['fields'], prepareField('c6_prcven' , 'currency', 'Preço')) aAddAAdd(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 := 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 funcao auxiliar para preparar as propriedades da legenda @type function @param cValor, character, valor @param cCor, character, 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 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
#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 |