Línea de producto: | Microsiga Protheus® |
Segmento: | Backoffice |
Módulo: | Financiero |
Idiomas: | Portugués |
Función: | Portal del cliente |
El punto de entrada PCBROWSE está en etapa de desarrollo y muy pronto entrará en prueba con clientes piloto, por lo tanto, aún no está liberado en ningún release del Protheus. Se liberará por medio de un paquete de expedición acumulado 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 elPortal 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 | Descripción |
1º Posición | Character | Usuario de login del Portal del cliente. |
Configuración necesaria para que se 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 | Obligatoriedad | Descripción |
tituloMenu | Obligatorio | Título mostrado en el menú. |
iconeMenu | Opcional | Ícono para el menú. Lista de íconos PO UI que pueden utilizarse en esta propiedad. https://po-ui.io/guides/icons |
tituloPagina | Obligatorio | Titulo mostrado en la página. |
funcaoQuery | Obligatorio | Nombre de la user function que devolverá la query para buscar los datos. |
orderQuery | Opcional | Campo 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 fields | Array de campos del browse, el sistema utilizará el título de la SX3. Si se informan fields, se ignorará esta propiedad. |
fields | Opcional | Array de json con los campos del browse. Cada campo debe tener las propiedades property, type y label (PoTableColumn):
|
leyeendas | Opcional | Configuración de las leyendas. Array de json con las propiedades value, color y label. (labels del PoTableColumnLabel) |
campoLegendas | Opcional | Campo utilizado para leyenda. |
tituloLegendas | Opcional | Título de la leyenda. |
detalles | Opcional | Json con las propiedades para que se muestre en la pantalla de detalles del registro. Consulte el ítem 03.02 Configuración de detalles. |
Es posible configurar la búsqueda simple y avanzada por medio de la configuración:
Propiedad | Obligatoriedad | Descripción |
campoBusca | Opcional | Campo para búsqueda rápida. |
camposBuscaAvancada | Opcional | Lista de campos para búsqueda avanzada, el sistema utilizará el título de la SX3. Si se informa fieldsBuscaAvancada , se ignorará esta propiedad. |
fieldsBuscaAvancada | Opcional | Array de json con los campos para utilizar en la búsqueda avanzada. Cada campo debe tener las propiedades property, type y label (PoDynamicFormField):
|
Si se configuran los detalles, se muestra en el ítem la opción "visualizar" para la exhibición de las informaciones y el listado de ítems.
Propiedad | Obligatoriedad | Descripción |
tituloPagina | Obligatorio | Título que se muestra en la página de detalles. |
tituloAbaPrincipal | Obligatorio | Título que se muestra en la solapa principal. |
camposDetalhes | Obligatorio | Lista de campos que se mostrarán, el sistema utilizará el título de la SX3. Si se informa fieldsDetalhes , se ignorará esta propiedad. |
fieldsDetalhes | Opcional | Array de json con los campos del browse. Cada campo debe tener las propiedades property, type y label (PoTableColumn):
|
orderQueryItens | Opcional | Campo en el cual se basará el orden de la tabla. |
tituloAbaItens | Opcional | Título que se muestra en la solapa Ítems. |
funcaoQueryItens | Es obligatorio si se informa tituloAbaItens | User funcion que devolverá la query de los ítems. |
tabelaItens | Es obligatorio si se informa tituloAbaItens | Alias dos itens. |
columnas | Es obligatorio si se informa tituloAbaItens | Lista de campos del browse, el sistema utilizará el título de la SX3. Si se informa fields , se ignorará esta propiedad. |
fields | Es obligatorio si se informa tituloAbaItens | Array de json con los campos del browse. Cada campo debe tener las propiedades property, type 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 | Descripción |
1º Posición | Array | Contiene un Array con las claves (SUCURSAL+CÓDIGO+TIENDA) de los clientes seleccionados en el portal. Cada posición del Array contiene un objeto Json con las propiedades: sucursal, código y tienda. |
2º Posición | Carácter | Usuario de login del Portal del cliente |
PARAMIXB | Tipo | Descripción |
1º Posición | Array | Contiene un Array con las claves (SUCURSAL, CÓDIGO, TIENDA) de los clientes seleccionados en el portal. Cada posición del Array contiene un objeto Json con las propiedades: sucursal, código y tienda. |
2º Posición | Carácter | Usuario de login del Portal del cliente |
2º Posición | Json | json de la línea seleccionada en el formato "{ Campo: Valor} " Ej.: "{E1_FILIAL: '01', E1_NUM: '000001'}" |
La función debe devolver la query personalizada:
Deben 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 | Obligatoriedad | Descripción |
Carácter | Obligatorio | Query personalizada para listado de los registros del menú personalizado. |
#Include 'Protheus.ch' /*/{Protheus.doc} PCBROWSE Punto de entrada para agregar opciones de menú en el Portal del cliente @type function @return array, array de configuración /*/ user Function PCBROWSE() Local cUser := PARAMIXB[1] as Character // Código del usuario conectado al portal. Local aMenu := {} as Array aAdd(aMenu, MENU1()) // ejemplo utilizando columnas SX3 aAdd(aMenu, MENU2()) // ejemplo configurando fields Return aMenu /*/{Protheus.doc} MENU1 Configuración del menú @type function @return json, configuración del browse /*/ Static Function MENU1() Local jMenu := JsonObject():new() as Json Local jDetalhes := JsonObject():new() as Json //título presentado en el menú jMenu['tituloMenu'] := 'Pedidos1' //icone para o menu, lista de icones https://po-ui.io/guides/icons jMenu['iconeMenu'] := 'po-icon po-icon-manufacture' //título presentado en la página jMenu['tituloPagina'] := 'Mis pedidos1' //user funcion que devolverá la query de búsqueda jMenu['funcaoQuery'] := 'PCQRY01' //campo que se ordenará jMenu['orderQuery'] := 'C5_EMISSAO DESC' //alias de la tabla utilizada para tratamientos internos jMenu['tabela'] := 'SC5' //lista de campos del browse, el sistema utilizará el título de la SX3. Si se informa fields se ignorará esta propiedad jMenu['colunas'] := {'c5_filial', 'c5_condpag', 'c5_num', 'c5_vend1', 'c5_nota', 'c5_emissao'} //configuración de leyendas, array con value, color y 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 búsquea rápida, Si se informa fieldBusca, se ignorará esta propiedad jMenu['campoBusca'] := 'c5_num' //lista de campos para búsqueda avanzada, el sistema utilizará el título de la SX3. Si se informa fieldsBuscaAvancada, se ignorará esta propiedad jMenu['camposBuscaAvancada'] := {'c5_filial', 'c5_vend1', 'c5_nota', 'c5_emissao', 'c5_transp'} //ejemplo de configuración de detalles //título presentado en la página de detalles jDetalhes['tituloPagina'] := 'Detalles del pedido' //título presentado en la solapa principal jDetalhes['tituloAbaPrincipal'] := 'Datos generales' //lista de campos que se presentarán, el sistema utilizará el título de la SX3. Si se informa fieldsDetalhes, se ignorará esta propiedad jDetalhes['camposDetalhes'] := {'c5_num','c5_tipo', 'c5_nota', 'c5_emissao', 'c5_vend1', 'c5_tabela', 'c5_cliente', 'c5_lojacli', 'c5_transp', 'c5_frete', 'c5_seguro',} //título presentado en la solapa ítems jDetalhes['tituloAbaItens'] := 'Produtos' //user funcion que devolverá la query de los ítems jDetalhes['funcaoQueryItens'] := 'PCITEM' //campo que será ordenado jDetalhes['orderQueryItens'] := 'c6_item desc' //alias de los ítems jDetalhes['tabelaItens'] := 'SC6' //lista de campos del browse, el sistema utilizará el título de la SX3. Si se informa fields, se ignorará esta propiedad jDetalhes['colunas'] := {'c6_item', 'c6_produto', 'c6_descri', 'c6_qtdven', 'c6_prcven', 'c6_valor'} jMenu['detalhes'] := jDetalhes return jMenu /*/{Protheus.doc} MENU2 Configuración del menú utilizando las propiedades fields @type function @return json, configuración del browse /*/ Static Function MENU2() Local jMenu := JsonObject():new() as Json //Json con las propiedades 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 del browse, utilizado cuando no se quiere utilizar datos de la SX3. //debe ser un array de json con las propiedades property, type y label jMenu['fields'] := {} aAdd(jMenu['fields'], prepareField("c5_filial" , "string", "Sucursal del 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 pago")) aAdd(jMenu['fields'], prepareField("c5_nota" , "string", "Fact")) //campo para búsqueda rápida, utilizado cuando no se quiere utilizar datos de la SX3. //debe ser un array de json con las propiedades property, type y label jMenu['fieldBusca'] := prepareField("c5_num", "string", "Búsqueda por pedido") //lista de campos para búsqueda avanzada, el sistema utilizará el título de la SX3. Si se informa fieldsBuscaAvancada, se ignorará esta propiedad jMenu['fieldsBuscaAvancada'] := {} aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_emissao", "date" , "Fecha")) aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_filial" , "string", "Sucursal")) aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_nota" , "string", "Fact")) aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_num" , "string", "Pedido")) //ejemplo de configuración de detalles //título presentado en la página de detalles jDetalhes['tituloPagina'] := 'Detalles del pedido' //título presentado en la solapa principal jDetalhes['tituloAbaPrincipal'] := 'Datos generales' //Se utilizan las propiedades PoDynamicViewField do po-dynamic-view poui. https://po-ui.io/documentation/po-dynamic-view jDetalhes['fieldsDetalhes'] := {} aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_num' , 'string', 'Pedido' , 'Datos' )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_tipo' , 'string', 'Tipo de pedido' )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_nota' , 'string', 'Factura' )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_emissao', 'date' , 'Fecha' )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_vend1' , 'string', 'Vendedor' )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_tabela' , 'string', 'Lista de precios' )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_cliente', 'string', 'Código', 'Comprador' )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_lojacli', 'string', 'Tienda' )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_transp' , 'string', 'Cód Emp de Transporte', 'Entrega')) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_frete' , 'string', 'Valor de flete' )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_seguro' , 'string', 'Valor de seguro' )) //título presentado en la solapa ítems jDetalhes['tituloAbaItens'] := 'Productos' //user funcion que devolverá la query de los ítems jDetalhes['funcaoQueryItens'] := 'PCITEM' //alias de los ítems jDetalhes['tabelaItens'] := 'SC6' //lista de campos del browse, debe ser un array de json con las propiedades property, type y label jDetalhes['fields'] := {} aAdd(jDetalhes['fields'], prepareField('c6_item' , 'string' , 'Ítem')) aAdd(jDetalhes['fields'], prepareField('c6_produto', 'string' , 'Código')) aAdd(jDetalhes['fields'], prepareField('c6_qtdven' , 'string' , 'Cantidad')) aAdd(jDetalhes['fields'], prepareField('c6_prcven' , 'currency', 'Precio')) aAdd(jDetalhes['fields'], prepareField('c6_valor' , 'currency', 'Valor')) jMenu['detalhes'] := jDetalhes return jMenu /*/{Protheus.doc} prepareField función auxiliar para preparar las propiedades del 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 en los detalles) @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 if !Empty(cDivisor) jField["divider"] := cDivisor endIf Return jField /*/{Protheus.doc} prepareStatus función auxiliar para preparar las propiedades de la leyenda @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 |
#Include 'Protheus.ch' /*/{Protheus.doc} PCQRY01 Query para listar los ítems del 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 del 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 los 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 los detalhes del ítem del PE PCBROWSE @type function @return character, query /*/ user function PCITEM() local aSA1 := Paramixb[1] // Clientes local cUser := Paramixb[2] // Login del portal local jFilter := Paramixb[3] // Línea seleccionada para los detalles 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 |