Páginas filhas
  • totvs.framework.adapter.dashboard - cards e charts

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Classe auxiliar para criação dinâmica de cards e charts (gráficos) para telas genéricas de dashboard, para ser utilizada em aplicativos angular POUI
Essa classe deve ser utilizada como herança da sua classe que terá os cards e charts
Essa classe por padrão herdas herda a classe genérica de adapter FwAdapterBaseV2, portanto podem ser utilizados os métodos disponíveis na classe pai também.

classe disponível a partir da lib 20240115

Métodos disponíveis:

Métodos que devem ser implementados na classe que herdar esta

Exemplos


...

addCard
Âncora
addcard
addcard

...

Bloco de código
languagejava
themeMidnight
titleExemplo
collapsetrue
Method new(cVerb as character) as object Class home
    _Super:new( cVerb, .T. )
    // Cards disponiveis na home do dashboard de privilégio
    ::addCard("total_users", STR0001 ) //"Total de usuários"
Return self

//-------------------------------------------------------------------
/*/{Protheus.doc} total_users
    definições referente ao card total_users
@param, oCard, objeto de card a ser criado.
@param, jResponse, json de retorno da api até o momento
@return objeto de card passado por parametro
@author totvs
@since 15/12/2023
//-----------------------------------------------------------------*/
Method total_users(oCard as object, jResponse as json) as object Class home
    Local cSql as character

    cSql := ::total_UsersQuery("total")

    oCard:setDescription(STR0010) //"Total de usuários existente no protheus"
    oCard:setValue(FwExecCachedQuery():ExecScalar(cSql, "QTD", "30", "10"))
    oCard:addColumn("user_id", STR0011, "string", .T.) //"Id do usuário"
    oCard:addColumn("user_code", STR0012, "string", .T.) //"Código do usuário"
    oCard:addColumn("name", STR0013, "string", .T.) //"Nome do usuário"
    
Return(oCard)

...


...

chart_

...

name
Âncora

...

chart_

...

name

...

chart_

...

name

Descrição

Método para definir a query que será utilizada nos detalhes de uma card ou chartque irá criar um chart (grafico) no dashboard, o nome desse método é dinâmico, deve ser de acordo com o card chart que foi criado no new da classe.


Parâmetros:

NomeTipoDescrição
sem parâmetros
oChartObjetoObjeto do tipo totvs.framework.adapter.dashboard.chart

Retorno nilRetorno caractere

Bloco de código
languagejava
themeMidnight
titleExemplo
collapsetrue
Method new(cVerb as character) as object Class home
    _Super:new( cVerb, .T. )

    	// Cardsgraficos disponiveis na home do dashboard de privilégio
    ::addCardaddChart("totalgroup_usersrules", STR0001STR0009  ) //"TotalRegra de grupo do usuáriosusuário"
Return self  

//-------------------------------------------------------------------
/*/{Protheus.doc} totalgroup_UsersQueryrules
    Retornadefinições a query referente aao quantidade total de usuarioschart group_rules
@param, cTypeoCard, tipoobjeto de querychart a ser retornado, podendo ser detail ou total
@return character, sql a ser utilizado
@author totvs
@since 08criado.
@param, jResponse, json de retorno da api até o momento
@return objeto de chart passado por parametro
@author Caio Lima
@since 15/12/2023
//-----------------------------------------------------------------*/
Method totalgroup_UsersQuery(cTyperules(oChart as object, jResponse as characterjson) as characterobject Class home
    Local cSql as character

    IfLocal cTypecAlias == "total"as character
    Local cAliasBk as character

 cSql := " SELECT COUNT(*) QTD "
    ElseIf cType == "detail"
        cSql := " SELECT #QueryFields# "
        cSql += " FROM ( SELECT US.*,  oChart:setDescription(STR0029) //"Total de usuários por regra de acesso do grupo (prioriza, desconsidera ou soma)"
    oChart:addColumn("user_id", STR0011, "string", .T.) //"Id do usuário"
    oChart:addColumn("user_code", STR0012, "string", .T.) //"Código do usuário"
    oChart:addColumn("name", STR0013, "string",  cSql += " CASE USR_GRPRULE  "+CRLF
        cSql += " WHEN '1' THEN '"+STR0032+"' "+CRLF // 'Priorizar'
        cSql += " WHEN '2' THEN '"+STR0033+"' "+CRLF // 'Desconsiderar'
        cSql += " WHEN '3' THEN '"+STR0036+"' END group_rule "+CRLF // 'Somar'
    EndIf

	cSql += " FROM "+MPSysSqlName("MPUSR_USR")+" US "
	cSql += " WHERE US.D_E_L_E_T_=' ' "

    If cType == "detail"
        cSql += " ) TAB WHERE 1=1 #QueryWhere# "
    EndIf

Return(cSql)

...

.T.) //"Nome do usuário"
    oChart:addColumn("group_rule", STR0030, "string", .T.) //"Regra de acesso do grupo"

    // a api de detalhes desse grafico será a mesma referente a api de total de usuários,
    // apenas mostrando a coluna de regra de acesso do grupo a mais
    oChart:setApiDetail("/api/framework/dashboard/detail/totvs.framework.adapter.privileges.home/total_users")
    
    cAliasBk := Alias()
    
    cSql := ::group_RulesQuery("total")
    cAlias := FwExecCachedQuery():OpenQuery(cSql,,,,"30","10")

    oChart:addDataChart(STR0032, (cAlias)->PRIORIZA, STR0031, "color-03") //"Usuários que priorizam os acessos do grupo" //"Prioriza"
    oChart:addDataChart(STR0033, (cAlias)->DESCONSIDERA, STR0034, "color-05") //"Desconsidera" //"Usuários que desconsideram os acessos do grupo"
    oChart:addDataChart(STR0036, (cAlias)->soma, STR0035, "color-07") //"Usuários que somam os acessos do grupo" //"Soma"
    
    (cAlias)->(DbCloseArea())

    FWRestAlias(cAliasBk)

Return(oChart)


...

card_nameQuery
Âncora
card_nameQuery
card_nameQuery

Descrição

Método para definir a query que será utilizada

...

Descrição

Método para definir os campos que serão utilizados nos detalhes de uma card ou chart, o nome desse método é dinâmico, deve ser de acordo com o card que foi criado no new da classe.


Parâmetros:

NomeTipoDescrição


sem parâmetros

Retorno caractere

Bloco de código
languagejava
themeMidnight
titleExemplo
collapsetrue
Method new(cVerb as character) as object Class home
    _Super:new( cVerb, .T. )
    // Cards disponiveis na home do dashboard de privilégio
    ::addCard("total_users", STR0001 ) //"Total de usuários"
Return self  

//----------Total de usuários"
Return self  

//-------------------------------------------------------------------
/*/{Protheus.doc} total_UsersQuery
    Retorna a query referente a quantidade total de usuarios
@param cType, tipo de query a ser retornado, podendo ser detail ou total
@return character, sql a ser utilizado
@author totvs
@since 08/12/2023
//-----------------------------------------------------------------*/
Method total_UsersQuery(cType as character) as character Class home
    Local cSql as character

    If cType == "total"
        cSql := " SELECT COUNT(*) QTD "
    ElseIf cType == "detail"
        cSql := " SELECT #QueryFields# "
        cSql += " FROM ( SELECT US.*, "
        cSql += " CASE USR_GRPRULE  "+CRLF
        cSql += " WHEN '1' THEN '"+STR0032+"' "+CRLF // 'Priorizar'
        cSql += " WHEN '2' THEN '"+STR0033+"' "+CRLF // 'Desconsiderar'
        cSql += " WHEN '3' THEN '"+STR0036+"' END group_rule "+CRLF // 'Somar'
    EndIf

	cSql += " FROM "+MPSysSqlName("MPUSR_USR")+" US "
	cSql += " WHERE US.D_E_L_E_T_=' ' "

    If cType == "detail"
        cSql += " ) TAB WHERE 1=1 #QueryWhere# "
    EndIf

Return(cSql)


...

addFieldscard_name
Âncora
addFieldscard_name
addFieldscard_name

Descrição

Método para definir os campos que serão utilizados nos detalhes de uma card ou chart, o nome desse método é dinâmico, deve ser de acordo com que foi criado no new da classe.


Parâmetros:

NomeTipoDescrição


sem parâmetros

Retorno caractere

Bloco de código
languagejava
themeMidnight
titleExemplo
collapsetrue
Method new(cVerb as character) as object Class home
    _Super:new( cVerb, .T. )
    // Cards disponiveis na home do dashboard de privilégio
    ::addCard("total_users", STR0001 ) //"Total de usuários"
Return self  

//-----------------------------------------------------------------------------
/*/{Protheus.doc} addFieldsTotal_Users
    Função para geração do mapa de campos
@author totvs
@since 11/12/2023
@version 1.0
/*/
//-----------------------------------------------------------------------------
Method addFieldsTotal_Users() Class home
    ::addMapFields( 'user_id' , 'USR_ID'  , .T., .T., { 'USR_ID', 'C', 06, 0 },,.T. )
    ::addMapFields( 'user_code' , 'USR_CODIGO'  , .T., .T., { 'USR_CODIGO', 'C', 25, 0 },,.T. )
    ::addMapFields( 'name'    , 'USR_NOME'   , .T., .F., { 'USR_NOME', 'C', 30, 0 },,.T. )
    ::addMapFields( 'group_rule'    , 'group_rule'   , .T., .F., { 'group_rule', 'C', 12, 0 },,.T. )
    ::setOrderDefault('user_id')
Return


...

setDescription
Âncora
setDescription
setDescription

Descrição

Método para definir a descrição completa de um card ou chart, deve ser utilizado dentro do método dinâmico que recebe o nome da propriedade e recebe como parâmetro o mesmo


Parâmetros:

NomeTipoDescrição
cDescriptionCarácterdescrição a ser definida

Retorno nil

Bloco de código
languagejava
themeMidnight
titleExemplo
collapsetrue
//-------------------------------------------------------------------
/*/{Protheus.doc} total_users
    definições referente ao card total_users
@param, oCard, objeto de card a ser criado.
@return objeto de card passado por parametro
@author Caio Lima
@since 15/12/2023
//-----------------------------------------------------------------*/
Method total_users(oCard as object) as object Class home

    oCard:setDescription(STR0010) //"Total de usuários existente no protheus"
    
Return(oCard)


...

setValue
Âncora
setValue
setValue

Descrição

Método para definir o valor do card, deve ser utilizado dentro do método dinâmico que recebe o nome da propriedade e recebe como parâmetro o mesmo
Disponível apenas para o card


Parâmetros:

NomeTipoDescrição
nValuenumericoValor a ser definido para o card

Retorno nil

Bloco de código
languagejava
themeMidnight
titleExemplo
collapsetrue
//-------------------------------------------------------------------
/*/{Protheus.doc} total_users
    definições referente ao card total_users
@param, oCard, objeto de card a ser criado.
@return objeto de card passado por parametro
@author Caio Lima
@since 15/12/2023
//-----------------------------------------------------------------*/
Method total_users(oCard as object) as object Class home
	Local cSql as character
	Local nValue as numeric

    cSql := ::total_UsersQuery("total")
	nValue := FwExecCachedQuery():ExecScalar(cSql, "QTD", "30", "10")

    oCard:setValue(nValue)
    
Return(oCard)


...

setApiDetail
Âncora
setApiDetail
setApiDetail

Descrição

Método para definir a api que será utilizada para os detalhes de um card ou chart
caso não seja definido será utilizado o default que é 
/api/framework/dashboard/detail/:cDashClient/:cWich

caso seja definido uma api detail diferente não é necessário implementar os métodos addfields e query referente.


Parâmetros:

NomeTipoDescrição
cApiDetailCaráctercaminho para a api de detalhes de um card ou chart

Retorno nil

Bloco de código
languagejava
themeMidnight
titleExemplo
collapsetrue
//-------------------------------------------------------------------
/*/{Protheus.doc} total_users
    definições referente ao card total_users
@param, oCard, objeto de card a ser criado.
@return objeto de card passado por parametro
@author Caio Lima
@since 15/12/2023
//-----------------------------------------------------------------*/
Method total_users(oCard as object) as object Class home

	// utilizo a api de detalhes já existente no dashboard de saneamento.
    oCard:setApiDetail("/api/framework/privileges/sanitation/usersWithoutPrivileges")
    
Return(oCard)


...

addColumn
Âncora
addColumn
addColumn

Descrição

Adiciona uma coluna que será utilizada para a estrutura de detalhes do card/chart


Parâmetros:

NomeTipoDescrição
cPropertycaracterenome da coluna que virá na api de detalhes
cLabelcaracteretitulo da coluna
cTypecaracteretipo da coluna
lVisiblelogicoindica se a coluna será visivel na grid de detalhes

Retorno nil

Bloco de código
languagejava
themeMidnight
titleExemplo
collapsetrue
//-------------------------------------------------------------------
/*/{Protheus.doc} total_users
    definições referente ao card total_users
@param, oCard, objeto de card a ser criado.
@return objeto de card passado por parametro
@author Caio Lima
@since 15/12/2023
//-----------------------------------------------------------------*/
Method total_users(oCard as object) as object Class home

	oCard:addColumn("user_id", STR0011, "string", .T.) //"Id do usuário"
    oCard:addColumn("user_code", STR0012, "string", .T.) //"Código do usuário"
    oCard:addColumn("name", STR0013, "string", .T.) //"Nome do usuário"
    
Return(oCard)


...

addDataChart
Âncora
addDataChart
addDataChart

Descrição

Adiciona uma nova dimensão no gráfico a ser construído
Método disponível apenas para objeto do tipo chart


Parâmetros:

NomeTipoDescrição
cLabelcaracteretitulo da dimensão
nValuenumericovalor da dimensão
cToolTipcaractereTooltip da dimensão, exibida no mousehover no grafico
cColorcaracterecor da dimensão, para maiores informações consultar documentação de chart do POUI

Retorno nil

Bloco de código
languagejava
themeMidnight
titleExemplo
collapsetrue
//-------------------------------------------------------------------
/*/{Protheus.doc} addFieldsTotal_Users
    Função para geração do mapa de campos
@author totvs
@since 11 total_users
    definições referente ao chart total_users
@param, oChart, objeto de chart a ser criado.
@return objeto de chart passado por parametro
@author Caio Lima
@since 15/12/2023
@version 1.0
/*/
//-----------------------------------------------------------------------------*/
Method addFieldsTotaltotal_Usersusers(oChart as object) as object Class home
    ::addMapFields( 'user_id' , 'USR_ID'  , .T., .T., { 'USR_ID', 'C', 06, 0 },,.T. 
    Local cSql as character
    Local cAlias as character
    Local cAliasBk as character

	cAliasBk := Alias()

    cSql := ::group_RulesQuery("total")
    cAlias := FwExecCachedQuery():addMapFields( 'user_code' , 'USR_CODIGO'  , .T., .T., { 'USR_CODIGO', 'C', 25, 0 },,.T. )
    ::addMapFields( 'name'    , 'USR_NOME'   , .T., .F., { 'USR_NOME', 'C', 30, 0 },,.T. )
    ::addMapFields( 'group_rule'    , 'group_rule'   , .T., .F., { 'group_rule', 'C', 12, 0 },,.T. )
    ::setOrderDefault('user_id')
ReturnOpenQuery(cSql,,,,"30","10")

    oChart:addDataChart(STR0032, (cAlias)->PRIORIZA, STR0031, "color-03") //"Usuários que priorizam os acessos do grupo" //"Prioriza"
    oChart:addDataChart(STR0033, (cAlias)->DESCONSIDERA, STR0034, "color-05") //"Desconsidera" //"Usuários que desconsideram os acessos do grupo"
    oChart:addDataChart(STR0036, (cAlias)->soma, STR0035, "color-07") //"Usuários que somam os acessos do grupo" //"Soma"
    
    (cAlias)->(DbCloseArea())

    FWRestAlias(cAliasBk)

Return(oCard)

Exemplo:
Âncora
Exemplo
Exemplo

framework.adapter.privileges.home.tlpp