- Criado por Ricardo Augusto Da Costa, última alteração em 22 out, 2015
Conceito
O widget de gráficos e visões é uma forma de visualização de um conjunto de dados no formato de gráfico ou browse, considerando a configuração de gráficos e visões previamente configurados para uma determinada tabela.
O widget de gráficos é totalmente depende da utilização de gráficos e visões. Para saber mais sobre o conceito de gráficos e visões consulte: Gráficos e Visões do Browse
Em resumo, uma visão guarda a configuração das colunas de browse (quando a exibição for do tipo browse) e os filtros que devem ser aplicados (ao browse ou ao gráfico).
Os gráficos e visões podem ser definidos pelo programa ou pelo próprio usuário e são associados à uma tabela. O widget permitirá a visualização carregando os tipos de gráficos e as visões definidas para a tabela.
Além dos filtros aplicados pela visão, um widget também permitirá adicionar filtros padrões através de um método AddFilter(), semelhante a inclusão de filtros do browse. Esses filtros devem ser usado para criar as restrições de programa que não dependem da visão selecionada.
O Widget permitirá os seguintes formatos de exibição de dados:
- browse com visões
- browse com visões + gráfico
- gráfico
- gráfico com visões
No Widget será possível configurar os seguintes itens:
- Gráficos a serem exibidos
- Visões a serem exibidas
- Visão que deve ser aplicada inicialmente
- Gráfico que deve ser exibido inicialmente
- Alias da tabela
- Modo de exibição
- Painel Owner
- Definir se o gráfico dentro do browse já deverá vir aberto.
- Filtros adicionais
Atenção
Por questões de performance e visualização dos dados nos gráficos, o widget de gráficos é limitado a exibição de 10 registros no eixo X.
Procedimento para Implementação
A implementação do widget deve ser feita pela GDP, através da utilização da classe FWTableAttachWidget em conjunto com a FWTableAtt.
Procedimento para Configuração
Para criação de um widget, deverão ser informados os métodos conforme exemplo abaixo:
Local oWidget := FWTableAttachWidget():New()
oWidget:setVisions(aVisions) //Define as visões que serão exibidas no menu de visões
oWidget:setCharts(aCharts) //define os gráficos que serão exibidos no menu de gráficos
oWidget:setAlias("SC5") //define o alias da tabela principal
oWidget:setBrwDescription("Pedidos de Venda") // descrição do widget
oWidget:setVisionDefault(aVisions[2]) //define a visão que será carregada na abertura
oWidget:setChartDefault(aCharts[1]) //define o gráfico carregado na abertura
oWidget:setDisplayMode(cType) // Tipo de widget
oWidget:setOwner(oPanel) // owner
oWidget:setOpenChart(.T.)//Quando o tipo for Browse+Grafico(MODE_BRW_CHART), define se o gráfico virá exibido ou oculto
oWidget:activate() //ativa o widget
Definindo lista de visões e gráficos
O método setVisions() deverá receber um array de objetos do tipo FWDSView e o SetCharts() deverá receber um array de objetos FWDSChart.
Esses objetos podem ser criados manualmente ou poderá ser pego das visões e gráficos já configuradas para o alias, utilizando as seguintes funções auxiliares:
//Busca graficos e visoes de usuario e de fontes de acordo com a X2_SYSOBJ e X2_USROBJ
Function FWGetAttach(cAlias)
//Busca as visoes e graficos de usuário (xml)
Function FWGetUsrAttach(cAlias)
//Busca as visoes e graficos do fonte (padrao e de usuario) de acordo com os fontes configurados na SX2
Function FWGetSrcAttach(cAlias)
//Busca graficos e visoes de um determinado fonte – Esta função necessita que o fonte possua uma função statica chamada “TableAttDef” que retorne um objeto do tipo FWTableAtt (mesma função statica utilizada para carregar gráficos e visões padrões da rotina.
Function FWGetAttSrc(cProgram)
Todas as funções auxiliares acima retornam um objeto do tipo FWTableAtt() que guarda um array chamado aViews com os objetos FWDSView e um array chamado aCharts com os objetos FWDSChart.
Exemplo:
oWidget := FWTableAttachWidget():New()
oTableAtt := FWGetAttach(“SC5”)
oWidget:setVisions(oTableAtt:aViews)
oWidget:setCharts(oTableAtt:aCharts)
Modo de exibição:
O método setDisplayMode(cType) deverá receber uma das seguintes opções:
Obs: os defines encontram-se no include FWTableAttach.ch
- Browse com visões
setDisplayMode( MODE_BROWSE )
- Browse com visões e gráfico
setDisplayMode ( MODE_BRW_CHART )
- Gráfico (sem visões)
setDisplayMode ( MODE_CHART )
- Gráfico com visões
setDisplayMode ( MODE_VIEW_CHART )
Exemplo de utilização de widgets:
User Function widgetTeste()
Local oDlg
Local oPanel
Local o
Local oContainer
Local cBoxUp
Local cBoxDown
Local cBoxV1_UP
Local cBoxV2_UP
Local cBoxV1_DOWN
Local cBoxV2_DOWN
Local oPanel1
Local oPanel2
Local oPanel3
Local oPanel4
Local oWidget1
Local oWidget2
Local oWidget3
Local oWidget4
Define MsDialog oDlg Title "Teste Widget" FROM 000, 000 To 750, 1000 Pixel
oPanel:= tPanel():New(,,,oDlg,,,,,,,)
oPanel:Align := CONTROL_ALIGN_ALLCLIENT
//--------------------------------------------------------
// criação dos paineis
//--------------------------------------------------------
oContainer := FWFormContainer():New(oPanel)
cBoxUp := oContainer:createHorizontalBox(50)
cBoxDown := oContainer:createHorizontalBox(50)
cBoxV1_UP := oContainer:createVerticalBox(50,cBoxUp, .F.)
cBoxV2_UP := oContainer:createVerticalBox(50,cBoxUp, .F.)
cBoxV1_DOWN := oContainer:createVerticalBox(50,cBoxDown, .F.)
cBoxV2_DOWN := oContainer:createVerticalBox(50,cBoxDown, .F.)
oContainer:activate(oPanel, .F.)
oPanel1 := oContainer:getPanel(cBoxV1_UP)
oPanel2 := oContainer:getPanel(cBoxV2_UP)
oPanel3 := oContainer:getPanel(cBoxV1_DOWN)
oPanel4 := oContainer:getPanel(cBoxV2_DOWN)
oWidget1 := createWidget(oPanel1, "BROWSE")
oWidget2 := createWidget(oPanel2, "BRW_CHART")
oWidget3 := createWidget(oPanel3, "CHART")
oWidget4 := createWidget(oPanel4, "VIEW_CHART")
oDlg:Activate(,,,.T.,{||oWidget1:destroy(), oWidget2:destroy(), oWidget3:destroy(),oWidget4:destroy(),.T.})
Return
Static Function createWidget(oPanel, cType)
Local oWidget := FWTableAttachWidget():New()
Local aVisions := getVisions()
Local aCharts := getCharts()
oWidget:setVisions(aVisions)
oWidget:setCharts(aCharts)
oWidget:setAlias("SC5")
oWidget:setBrwDescription("Pedidos de Venda")
oWidget:setVisionDefault(aVisions[2])
oWidget:setChartDefault(aCharts[1])
oWidget:setDisplayMode(cType)
oWidget:setOwner(oPanel)
oWidget:setOpenChart(.T.)
oWidget:activate()
Return oWidget
Static Function getVisions()
Local oDSView
Local oDSView2
Local aVisions := {}
oDSView := FWDSView():New()
oDSView:SetName("Pedidos Não Faturados") //Nome da Visão
oDSView:SetPublic(.T.) //Define se será visível por todos os usuários ou não
oDSView:SetCollumns({"C5_NUM","C5_CLIENTE"}) //Colunas do browse
oDSView:SetOrder(2) //índice utilizado
oDSView:AddFilterRelation( 'SA1' , 'A1_COD+A1_LOJA' , 'C5_CLIENTE+C5_LOJACLI' ) //relacionamento para construção de filtros relacionados (necessário somente quando for configurado um filtro de tabela relacionada)
oDSView:AddFilter( "Pedidos Faturados" , 'C5_CLIENTE<>"000001"' ) //Filtro
oDSView:setUser() //usuário dono da visão. Quando a visão não for pública, somente este usuário poderá enxergá-la.
oDSView:setID("1")
oDSView2 := FWDSView():New()
oDSView2:SetName("Clientes de São Paulo")
oDSView2:SetPublic(.T.)
oDSView2:SetCollumns({"C5_LOJACLI","C5_NUM","C5_CLIENTE"})
oDSView2:SetOrder(2)
oDSView2:AddFilterRelation( 'SA1' , 'A1_COD+A1_LOJA' , 'C5_CLIENTE+C5_LOJACLI' )
oDSView2:AddFilter( "Clientes de SP" ,'A1_COD == "000001" ' , "SA1" )
oDSView2:setID("2")
aAdd(aVisions, oDSView)
aAdd(aVisions, oDSView2)
Return aVisions
Static Function getCharts()
Local aCharts := {}
Local oDSChart
oDSChart := FWDSChart():New()
oDSChart:SetName("Fat x Cliente")
oDSChart:setTitle( "Fat x Cliente" )
oDSChart:SetPublic(.T.)
oDSChart:setSeries({ {"SC6","C6_VALOR","SUM"} })
oDSChart:setCategory({ {"SA1", "A1_NOME"} })
oDSChart:SetType("PIECHART")
oDSChart:SetLegend(CONTROL_ALIGN_LEFT)
oDSChart:SetTitleAlign(CONTROL_ALIGN_CENTER)
oDSChart:SetMask("R$ *@*")
oDSChart:SetPicture("99999.99")
aAdd(aCharts, oDSChart)
Return aCharts
Status do documento | Concluído |
---|---|
Data | 03/11/2014 |
Versão | 1.1 |
Versão anterior | 1.0 |
Autores |
Índice resumido |
Índice |
- Sem rótulos