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 documentoConcluído
Data03/11/2014
Versão1.1
Versão anterior1.0
Autores

Ricardo Augusto Da Costa

Índice resumido
Índice
  • Sem rótulos