01. VISÃO GERAL

O Dashboard foi desenvolvido para atender a demanda de todas as áreas. Dessa forma, toda a estrutura se baseia em serviços.

Cadastros

  • Tipos de Card e Tipos de Gráficos
    • Os tipos de Card e Gráficos são cadastrados diretamente através do BackEnd.
  • Gráficos, Painéis e Visões
    • O FrontEnd consome os Tipos de Cards/Gráficos;
    • Com Realiza os Cadastro dos Cards/Gráficos;
    • Realiza o Cadastro de Visões.


Exibição de Dados

  1. O usuário seleciona qual visão deseja exibir;
  2. O Dashboard filtra os cards e gráficos de acordo com a visão e aciona os EndPoints informados no tipo de Card/Gráfico.
  3. O BackEnd faz a consulta das informações no banco de dados e retorna os dados do Dashboard;
  4. Os dados são tratados e exibidos para o usuário.

02. COMPONENTES

Componente utilizado para definição do Menu da Rotina. Opções Disponíveis:

  • Home: Tela principal onde serão exibidos os Cards e Gráficos de acordo com a visão selecionada (Componente Home).
  • Gerenciar Cards: Apresenta uma lista com os Cards cadastrados (Componente Cards).
  • Gerenciar Gráficos: Apresenta uma lista com os Gráficos cadastrados (Componente Graphics).
  • Gerenciar Visões: Apresenta uma lista com as Visões cadastrados (Componente Visions).

Serviços Utilizados

Não há.


Componente utilizado para a exibição inicial dos dados. O usuário seleciona a visão desejada (Cadastro de Visões), o sistema filtra os dados conforma e visão e apresenta ao usuário.

Funcionamento

Ao selecionar a visão, um evento é disparado, acionando o serviço putVision (VisionService). Esse serviço é responsável por atualizar o BehaviorSubject setVision, utilizado para atualizar os dados dos Cards e Gráficos.

Serviços Utilizados

SharedService, VisionService


Componente utilizado para imprimir o gráfico.

Funcionamento

O componente recebe a variável chart através do componente pai ChartComponent. O métodoerviço getChart (ChartService) é acionado para retornar os dados do gráfico que serão apresentados.

Serviços Utilizados

ChartService, Router


Componente responsável por apresentar todos os Gráficos cadastrados.

Funcionamento

O Componente funciona como um browser para manutenção de gráficos (CRUD).

Serviços Utilizados

Router, ChartService, PoDialogService


Componente responsável por permitir a inclusão/alteração de gráficos.

Funcionamento

Inclusão

O sistema abrirá um formulário ao usuário. Ao selecionar o Tipo de Gráfico desejado, o sistema carrega de forma dinâmica as demais informações.

Alteração

O sistema recebe o ID do gráfico que deseja editar. Com base nesse ID, o sistema busca os dados do gráfico e preenche as informações do formulário. 

Serviços Utilizados

Router, ChartService, PoDialogService


Componente utilizado para imprimir o card.

Funcionamento

O componente recebe a variável card, para obter os dados, o sistema utiliza o método getServices (CardService). Esse serviço recebe um EndPoint onde estarão as informações a serem apresentadas.

Serviços Utilizados

CardService, Router


Componente responsável por apresentar todos os Cards cadastrados.

Funcionamento

O Componente funciona como um browser para manutenção de cards (CRUD).

Serviços Utilizados

Router, CardService, PoDialogService


Componente responsável por permitir a inclusão/alteração de cards.

Funcionamento

Inclusão

O sistema abrirá um formulário ao usuário. Ao selecionar o Tipo de cards desejado, o sistema carrega de forma dinâmica as demais informações.

Alteração

O sistema recebe o ID do card que deseja editar. Com base nesse ID, o sistema busca os dados do card e preenche as informações do formulário.

Tanto na inclusão quanto na alteração, um modelo do Card é demostrado em tempo real ao usuário.

Serviços Utilizados

Router, CardService, PoDialogService


Componente responsável por exibir os detalhes do Card.

Funcionamento

Ao clicar na opção “Detalhes”, o sistema busca as informações dos detalhes que serão apresentados através do serviço getTypeCardsById (CardService). Com o EndPoint encontrado, o sistema utiliza o serviço genérico getServices (CardService) para retornar o cabeçalho e dados apresentados.

O usuário poderá exportar os dados apresentados através da opção “Exportar”.

Serviços Utilizados

Router, CardService, PoDialogService


Componente responsável por apresentar todas as visões cadastradas.

Funcionamento

O Componente funciona como um browser para manutenção de visões (CRUD).

Serviços Utilizados

Router, VisionService, PoDialogService


Componente responsável por permitir a inclusão/alteração de visões.

Funcionamento

Inclusão

O sistema abrirá um formulário ao usuário. O usuário deverá informar o nome e descrição da Visão. É possível vincular essa visão a vários Cards e Gráficos.

Alteração

O sistema recebe o ID da visão que deseja editar. Com base nesse ID, o sistema busca os dados da visão e preenche as informações do formulário.

Serviços Utilizados

PoNotificationService, VisionService, ActivatedRoute, ChartService, CardService


Componente responsável por montar a tela de Filtro de Informações. Esse componente é utilizado na inclusão/alteração de Cards e Gráficos.

Funcionamento

O Componente espera receber via Input as seguintes informações:

  1. endPontFilter: String contendo o filtro que será utilizado no EndPoint das requisições em formato REST.
    1. Exemplo: eq_product=ABC&eq_order=001
  2. expFilter: String contendo o filtro que será utilizado no EndPoint das requisições em formato Texto
    1. Exemplo: Produto = ABC E Pedido = 001
  3. itemsFields: Os campos que poderão ser utilizados no filtro. O componente espera um array respeitando a interface do PoComboOption.

Com base nesses dados, o sistema exibe a tela e permite criação de novos filtros. Ao incluir/excluir um filtro, o sistema emite um evento (OutPut) retornando um objeto contendo o filtro no formato EndPoint e o filtro no formato texto. Essas informações são utilizadas na gravação do card e gráfico.

Os filtros gravados também são exibidos como Tags no componente FilterTagsComponent.

Serviços Utilizados

PoNotificationService




03. MÉTODOS

Sintaxe:

CoreDash():New()

Descrição:

Método construtor da classe.

Local oCoreDash := CoreDash():New() 

Sintaxe:

CoreDash():SetFields(aCampos)

Descrição:

Método que define os campos que serão retornados no JSON do serviço.

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
aCamposArrayArray que contém o De / Para dos campos que serão apresentados no serviço
X
Local oCoreDash := CoreDash():New() 
Local aCampos 	 := {} 
 
Aadd(aCampos, {"code", "A1_CODIGO"}) 
Aadd(aCampos, {"name", "A1_NOME"}) 
oCoreDash:SetFields(aCampos) 

Sintaxe:

CoreDash():SetQuery(cQuery)

Descrição:

Método que define a query que será utilizada no serviço.

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
cQueryCaractereRecebe a query que será executada. 
X
Local oCoreDash := CoreDash():New() 
Local cQuery 	 := "" 

cQuery := " SELECT A1_COD, A1_NOME FROM " + RetSqlName("SA1") + " SA1 "
oCoreDash:SetQuery(cQuery)

Sintaxe:

CoreDash():SetWhere(cWhere)

Descrição:

Método que define a clausula where que será no método SetQuery().

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
cWhereCaractereWhere que será utilizado na query enviada para o método SetQuery()  


Local oCoreDash := CoreDash():New() 
Local cQuery 	 := " SELECT A1_COD, A1_NOME FROM "+ RetSqlName("SA1") + " SA1 "
Local cWhere 	 := "" 

oCoreDash:SetQuery(cQuery)

cWhere := " SA1.D_E_L_E_T = ' ' "
oCoreDash:SetWhere(cWhere)

Sintaxe:

CoreDash():SetIndexKey(cIndexFather)

Descrição:

Método que atribui a ordenação do Alias principal.

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
cIndexFatherCaractereOrdem utilizada no alias


Local oCoreDash := CoreDash():New() 

//Ordenação Crescente (ASC)
oCoreDash:SetIndexKey("A1_NOME")

//Ordenação Decrescente (DESC)
oCoreDash:SetIndexKey("-A1_NOME")

Sintaxe:

CoreDash():SetGroupBy(cGroup)

Descrição:

Método responsável por definir um agrupador na query utilizada no serviço.

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
cGroupCaractere

Campos que devem compor o agrupador


X
Local oCoreDash := CoreDash():New() 
Local cQuery	 := " SELECT tbl.CAMPO1, tbl.CAMPO2, COUNT(1) COUNT FROM TABLE tbl "
Local cWhere	 := " WHERE FILIAL = 'valor' AND D_E_L_E_T_ = ' ' "

oCoreDash:SetQuery(cQuery)
oCoreDash:SetWhere(cWhere)
oCoreDash:SetGroupBy(" tbl.CAMPO1, tbl.CAMPO2 ")
oCoreDash:SetIndexKey("tbl.CAMPO1")

Sintaxe:

CoreDash():SetPage(nPage)

Descrição:

Método que atribui o número da página em que o usuário vai navegar.

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
nPageNuméricoNúmero da página que será apresentada para o usuário1

Local oCoreDash := CoreDash():New()
Local nPage 	 := 8 

oCoreDash:SetPage(nPage)

Sintaxe:

CoreDash():SetPageSize(nPageSize)

Descrição:

Método que atribui a quantidade máxima de registros que serão exibidos por página.

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
nPageSizeNuméricoQuantidade máxima de registros apresentados por página para o usuário.10

Local oCoreDash := CoreDash():New()
Local nPageSize	 := 20

oCoreDash:SetPageSize(nPageSize)

Sintaxe:

CoreDash():DefFields(lConvProt, cField)

Descrição:

Método que efetua a conversão entre campos do Objeto e Protheus

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
lConvProtLógicoDefine se deve converter os campos para padrão Protheus.T.

cFieldCaractereCampo que será convertido


Local oCoreDash := CoreDash():New()

oCoreDash:DefFields(.T.,"CAMPO")

Sintaxe:

CoreDash():GetDataType(lConvProt, cField)

Descrição:

Retorna o tipo do dado de um determinado campo.

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
lConvProtLógicoDefine se deve converter os campos para padrão Protheus.T.

cFieldCaracteresCampo que será convertido


Local oCoreDash := CoreDash():New()
Local dData

If oCoreDash:GetDataType(.T.,"CAMPO") == "D"
	dData := Date()
Endif

Sintaxe:

CoreDash():SetFieldsFilt(cFields) 

Descrição:

Método que define quais campos serão retornados pelo serviço.

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
cFieldsCaractereCampos que serão retornados no JSON.
X
Local oCoreDash := CoreDash():New()
Local cFields 	 := "order, totValue, product"

oCoreDash:SetFieldsFilt(cFields) 

Sintaxe:

CoreDash():ToObjectJson()

Descrição:

Método que retorna o JSON serializado.

Local oCoreDash := CoreDash():New()
Local lRet 		 := .T. 
Local cError := "Erro na requisição"
 
If lRet 
	Self:SetResponse( oCoreDash:ToObjectJson())
Else 
	cError := oCoreDash:GetJsonError() 
	SetRestFault( 500,  EncodeUtf8(cError) ) 
EndIf 

Sintaxe:

CoreDash():ToSingleObject()

Descrição:

Método que retorna um JSON serializado para apenas um objeto.

Utilizado em requisições do tipo GET que retornam informações de apenas um registro.

Local oCoreDash := CoreDash():New()
Local cError     := "Erro na requisição"
Local lRet 		 := .T. 
 
If lRet 
	Self:SetResponse(oCoreDash:ToSingleObject()) 
Else 
	cError := oCoreDash:GetJsonError() 
	SetRestFault( 500,  EncodeUtf8(cError) ) 
EndIf 

Sintaxe:

CoreDash():GetJsonObject()

Descrição:

Método que retorna o objeto JSON da classe

Local oCoreDash := CoreDash():New()
Local oJson

oJson:= oCoreDash:GetJsonObject()

If oJson["items"] != Nil
	...
Endif

Sintaxe:

CoreDash():SetApiQstring(aQueryString)

Descrição:

Método que define os campos (Retornados pelo JSON), page (página que será apresentada) e pagesize (Quantidade máxima de registros por página) e filtros.

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
aQueryStringArrayRecebe o filtro a ser utilizado quando retornado o JSON


Local oCoreDash 	:= CoreDash():New()
Local aQueryString 	:= {} 

aAdd(aQueryString, {"fields"	, "order, totValue"	}) 
aAdd(aQueryString, {"page"		, 10				}) 
aAdd(aQueryString, {"pagesize"	, 5					}) 

oCoreDash:SetApiQString(aQueryString) 

Sintaxe:

CoreDash():SetApiFilter(aFilter)

Descrição:

Método que atribui um filtro de pesquisa.

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
aFilterArrayArray com expressões de filtro que serão utilizadas
X
Local oCoreDash 	:= CoreDash():New()
Local aFilter		:= {} 

aAdd(aFilter, {"A1_COD = '000001'"}) 

oCoreDash:SetApiFilter(aFilter)

Sintaxe:

CoreDash():GetApiFilter()

Descrição:

Método que retorna o filtro de pesquisa.

Local oCoreDash 	:= CoreDash():New()

oCoreDash:GetApiFilter()

Sintaxe:

CoreDash():BuildJson()

Descrição:

Método que responsável por construir o objeto JSON.

Local oCoreDash  := CoreDash():New() 
 
Self:SetContentType("application/json") 
 
oCoreDash:SetQuery(cQuery) 
oCoreDash:SetWhere(cWhere) 
oCoreDash:SetFields(aCampos) 
oCoreDash:SetApiQstring(aQueryString) 
oCoreDash:BuildJson() 

Sintaxe:

CoreDash():SetJson(lHasNext, aItems)

Descrição:

Método que responsável por atribuir um objeto JSON, de acordo com o contrato estabelecido pela TOTVS, contento o [items] e o [hasNext].

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
lHasNextLógicoIndica se o objeto possui próxima página..T.

aItemsArrayArray com os valores do objeto.


Local aItems 		:= {} 
Local lHasNext 		:= .T. 
Local oCoreDash  	:= CoreDash():New() 
Local oItem 		:= JsonObject():New()
 
If (cTemp)->(Eof()) 
	lHasnext := .F. 
EndIf 
 
aAdd(aItems, oItem) 
oCoreDash:SetJson(lHasNext, aItems) 

Sintaxe:

CoreDash():SetTable(cAlias)

Descrição:

Método que recebe o alias que será responsável pela geração do JSON.

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
cAliasCaractereAlias recebido para a geração do JSON.
X
Local oCoreDash := CoreDash():New() 
Local cAlias 	 := GetNextArea() 
 
oCoreDash:SetTable(cAlias) 

Sintaxe:

CoreDash():SetUpsertData(cAlias, cIndex, cBody)

Descrição:

Método que efetua a inclusão ou alteração de registros.

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
cAliasCaractereAlias recebido para a geração do JSON.
X
cIndexCaractereÍndice utilizado na busca.


cBodyCaractereJSON recebido no Body da mensagem.
X
Local oCoreDash := CoreDash():New() 

If oCoreDash:SetUpsertData(cAlias, Nil, cBody)
	Self:SetResponse( EncodeUtf8("Registro incluído com sucesso"))
Else
	SetRestFault( 500,  EncodeUtf8("Falha ao converter o arquivo.") )
Endif 

Sintaxe:

CoreDash():Destroy()

Descrição:

Método responsável por destruir o objeto.

Local oCoreDash := CoreDash():New() 

If oCoreDash:SetUpsertData(cAlias, Nil, cBody)
	Self:SetResponse( EncodeUtf8("Registro incluído com sucesso"))
Else
	SetRestFault( 500,  EncodeUtf8("Falha ao converter o arquivo.") )
Endif 

oCoreDash:Destroy()

Sintaxe:

CoreDash():SetPOHeader(aFields)

Descrição:

Método responsável por retornar um Array conforme esperado na propriedade p-columns do componente Table da biblioteca de componentes PO-UI

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
aFieldsArray

Array de até quatro dimensões com os dados:

aFields[n, 1] = Property

aFields[n, 2] = Label - Descrição apresentada na tabela.

aFields[n, 3] = Determina se a propriedade Action possui um link para o próximo nivel da visão.

aFields[n, 3] = Formato


X
Local aFields 	 := {}
Local aItems     := {}
Local oResponse	 :=	JsonObject():New()
Local oCoreDash := CoreDash():New()

aAdd(aFields, { "A1_COD"	, "Código"		,"Link"	})
aAdd(aFields, { "A1_LOJA"	, "Loja"				})
aAdd(aFields, { "A1_NOME"	, "Nome"				})
aAdd(aFields, { "total"		, "Total Faturado"		})

aItems := oCoreDash:SetPOHeader(aFields)

oResponse["items"]      := aItems

Self:SetResponse( EncodeUtf8(oResponse:ToJson()))

Sintaxe:

CoreDash():SetPOCombo(aOptions)

Descrição:

Método responsável por retornar um Array conforme esperado na propriedade p-options do componente Combo da biblioteca de componentes PO-UI.

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
aOptionsArray

Array de duas dimensões com as seguintes informações:

aOptions[n, 1] = Valor (Value)

aOptions[n, 2] = Rotulo (Label)


X
Local oCoreDash := CoreDash():New() 
Local aOptions	 := {}

aAdd(aOptions, {"phone"		,"Telefono"	})
aAdd(aOptions, {"cellPhone"	,"Celular"	})

oCoreDash:SetPOCombo(aOptions)

Sintaxe:

CoreDash():SetPOForm(cDivider, cProperty, cGridColumns, cLabel, lRequired, cType, aOptions, loptionsMulti)

Descrição:

Método responsável por construir um Formulário utilizando como base o componente DynamicForm do da biblioteca da PO-UI.

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
cDividerCaractere

Cria uma divisória entre os campos, utilizando o nome definido na propriedade cDivider.




cPropertyCaractereNome da Propriedade.


cGridColumnsCaractere

Número de Colunas Ocupado pelo Campo.




cLabelCaractereRotulo/Label do Campo.


lRequiredLógicoDefine se o campo é obrigatório.


cTypeCaractereTipo do Campo.


aOptionsArrayLista de opções do campo.


loptionsMultiCaractereDefine se o campo é MultSelect.


Local oResponse   := JsonObject():New()
Local oCoreDash  := CoreDash():New()

oCoreDash:SetPOForm("Tipo de Gráfico", "graphictype"     , 6  , "Tipo de Gráfico"    , .T., "string", oCoreDash:SetPOCombo({{"pie","Pizza"},{"polarArea","Radar"}}))
oCoreDash:SetPOForm("Filtros"        , "typesearchcombo" , 12 , "Tipo de Pesquisa"   , .T., "string", oCoreDash:SetPOCombo({{"mensal","Mensal"},{"anual","Anual"}}))
oCoreDash:SetPOForm(""               , "datadereferencia", 6  , "Data de Referência" , .T., "date")

oResponse  := oCoreDash:GetPOForm()

Self:SetResponse( EncodeUtf8(oResponse:ToJson()))

Sintaxe:

CoreDash():GetPOForm()

Descrição:

Método responsável por retornar o Formulário, construído através do método SetPOForm.

Local oResponse   := JsonObject():New()
Local oCoreDash  := CoreDash():New()

oCoreDash:SetPOForm("Tipo de Gráfico", "graphictype"     , 6  , "Tipo de Gráfico"    , .T., "string", oCoreDash:SetPOCombo({{"pie","Pizza"},{"polarArea","Radar"}}))
oCoreDash:SetPOForm("Filtros"        , "typesearchcombo" , 12 , "Tipo de Pesquisa"   , .T., "string", oCoreDash:SetPOCombo({{"mensal","Mensal"},{"anual","Anual"}}))
oCoreDash:SetPOForm(""               , "datadereferencia", 6  , "Data de Referência" , .T., "date")

oResponse  := oCoreDash:GetPOForm()

Self:SetResponse( EncodeUtf8(oResponse:ToJson()))

Sintaxe:

CoreDash():SetGraphInfo(aDados, cLegenda, cTipo, cBgColor, lBackGround, lDrillDown)

Descrição:

Método responsável por adicionar linhas e/ou colunas em um Gráfico de Barra ou Linha.

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
aDadosCaractere

Cria uma divisória entre os campos, utilizando o nome definido na propriedade cDivider.


X
cLegendaCaractereNome da Propriedade.
X
cTipoCaractere

Número de Colunas Ocupado pelo Campo.




cBgColorCaractereRotulo/Label do Campo.


lBackGroundLógicoDefine se o campo é obrigatório..F.

lDrillDownCaractereTipo do Campo..T.

Local oCoreDash  := CoreDash():New()
Local aHeader	  := {"2019","2020","2021"}
Local aData1	  := { Randomize(1,99), Randomize(1,99), Randomize(1,99) }
Local aData2	  := { Randomize(1,99), Randomize(1,99), Randomize(1,99) }
Local aSaldo	  := {}
Local nSaldo	  := 0

oCoreDash:SetGraphInfo( aData1, 'Vendedor 01' )
oCoreDash:SetGraphInfo( aData2, 'Vendedor 02' )

nSaldo := aData1[1] + aData2[1]
aAdd(aSaldo, nSaldo)
nSaldo := aData1[2] + aData2[2]
aAdd(aSaldo, nSaldo)
nSaldo := aData1[3] + aData2[3]
aAdd(aSaldo, nSaldo)

oCoreDash:SetGraphInfo( aSaldo, "Média", "line", "rgba(255,240,210,0.0)", .F., .F.)

Sintaxe:

CoreDash():GetGraphInfo()

Descrição:

Método responsável por retornar todos os gráficos adicionados através do método SetGraphInfo.

Local aGraphic 	  := {}
Local oCoreDash  := CoreDash():New()

oCoreDash:SetGraphInfo( aSaldo, "Média", "line", "rgba(23,132,175,0.59)", .F., .F.)
aGraphic := oCoreDash:GetGraphInfo()

Sintaxe:

CoreDash():SetChart( aLegenda, aDados, lCurrency, cType, cTitle ) Class CoreDash

Descrição:

Método responsável por adicionar linhas e/ou colunas em um Gráfico de Barra ou Linha.

Parâmetros:

NomeTipoDescriçãoDefaultObrigatórioReferência
aLegendaArrayLegendas apresentadas no Gráfico
X
aDadosArray

Dados impressos no Gráfico.

Observação: Para gráficos do tipo barra/linha, pode se usar o próprio GetGraphInfo




lCurrencyLógicoInforma se a máscara retornada será ou não do tipo moeda.F.

cTypeCaractereTipo de Gráfico que será retornado.


cTitleCaractereTítulo apresentado no Gráfico.




Sintaxe:

CoreDash():GetCposLGPD()

Descrição:

Método responsável por retornar array com os campos sensíveis que deverão ter exibição restrita de acordo com o Usuário logado.

Local oCoreDash := CoreDash():New() 
Local aCampos 	:= {}
Local aCposLGPD	:= {} 
 
Aadd(aCampos, {"code", "A1_CODIGO"}) 
Aadd(aCampos, {"name", "A1_NOME"}) 

oCoreDash:SetFields(aCampos) 

aCposLGPD := oCoreDash:GetCposLGPD()

04. DEMAIS INFORMAÇÕES

  • Não há.