Histórico da Página
...
Ao clicar em Adicionar, será apresentado um formulário contendo os campos abaixo:
Para o exemplo deste guia, iremos criar um monitor exclusivo para mostrar a quantidade de Ordens de Produção pela sua situação em um determinado período.
...
Informações | ||
---|---|---|
| ||
Pode-se notar que indicamos como nossa Api de Negócio o programa cpp/exclusivo/statusOrdem.p, não se preocupe com isso agora, iremos construir esse .p nos passos adiante. |
No nosso exemplo, iremos cadastrar apenas dois filtros, Estabelecimento e Desde quando (que irá representar o número de dias no passado que iremos buscar as ordens de produção de acordo com a sua data de criação).
...
Informações | ||
---|---|---|
| ||
Neste guia vamos considerar que o monitor foi criado conforme anteriormente indicado neste artigo, com suporte para Gráfico e Textodar continuidade com a construção de um monitor do tipo Gráfico. |
02.1. IMPLEMENTANDO A PROCEDURE DE MODO GRÁFICO
...
Bloco de código | ||
---|---|---|
| ||
PROCEDURE pi-get-monitor-data-chart: DEFINE INPUT PARAMETER TABLE FOR ttVisaoMonitor. DEFINE OUTPUT PARAMETER monitorJsonOutput AS JsonObject. DEFINE OUTPUT PARAMETER TABLE FOR RowErrors. DEFINE VARIABLE cFiltroEstab AS CHARACTER NO-UNDO. DEFINE VARIABLE dFiltroData AS DATE NO-UNDO. DEFINE VARIABLE iStatusAberto AS INTEGER NO-UNDO. DEFINE VARIABLE iStatusAndamento AS INTEGER NO-UNDO. DEFINE VARIABLE iStatusEncerrado AS INTEGER NO-UNDO. DEFINE VARIABLE ChartBuilder AS ChartBuilder NO-UNDO. // Classe utilitária que ajudará na montagem do gráfico FIND FIRST ttVisaoMonitor. EMPTY TEMP-TABLE RowErrors. fn-validate-properties(). // Método interno que valida automaticamente se todos os filtros marcados como obrigatórios foram preenchidos. IF fn-has-row-errors() THEN RETURN "NOK":U. /* Instanciar a classe passando como parâmetro a ttVisaoMonitor, que contém as informações do monitor e visão que estão sendo processados nesse instante. */ ChartBuilder = NEW ChartBuilder(INPUT TABLE ttVisaoMonitor). /* Depois que todas as entidades estão criadas, basta setá-las no objeto ChartBuilder */ ChartBuilder:setTags(INPUT TABLE ttTags). ChartBuilder:setCategories(INPUT TABLE ttCategorias). ChartBuilder:setSeries(INPUT TABLE ttSeries* Pega os valores que o usuário digitou nos filtros do monitor. O valor é sempre gravado como STRING, portanto deve-se fazer a conversão dos dados caso exista necessidade. Importante: Os valores passados como parâmetro devem ser os mesmos informados no campo "Propriedade" no cadastro de cada filtro **/ ASSIGN cFiltroEstab = fn-get-valor-propriedade(INPUT "cod-estabel") dFiltroData = TODAY - INTEGER(fn-get-valor-propriedade(INPUT "qtd-dias-atras")). FOR EACH ord-prod NO-LOCK WHERE ord-prod.cod-estabel >= cFiltroEstab AND ord-prod.dt-emissao >= dFiltroData: IF ord-prod.estado < 3 THEN ASSIGN iStatusAberto = iStatusAberto + 1. ELSE IF ord-prod.estado <= 6 THEN ASSIGN iStatusAndamento = iStatusAndamento + 1. ELSE ASSIGN iStatusEncerrado = iStatusEncerrado + 1. END. CREATE ttSeries. ASSIGN ttSeries.titulo = "Pendentes" ttSeries.valor = STRING(iStatusAberto) ttSeries.cor = "#A0B9BF". CREATE ttSeries. ASSIGN ttSeries.titulo = "Em Andamento" ttSeries.valor = STRING(iStatusAndamento) ttSeries.cor = "#007acc". CREATE ttSeries. ASSIGN ttSeries.titulo = "Concluídas" ttSeries.valor = STRING(iStatusEncerrado) ttSeries.cor = "#26BA41". CREATE ttTags. ASSIGN ttTags.valor = "Tag de Exemplo" ttTags.icone = "po-icon-calendar" ttTags.cor-texto = "#f5f5f5" ttTags.cor-tag = "#080707". CREATE ttTags. ASSIGN ttTags.valor = "Tag de Exemplo 2" ttTags.icone = "po-icon-manufacture" ttTags.cor-texto = "#f5f5f5" ttTags.cor-tag = "#080707". /* Depois que todas as entidades estão criadas, basta setá-las no objeto ChartBuilder */ ChartBuilder:setTags(INPUT TABLE ttTags). ChartBuilder:setHeight(290setSeries(INPUT TABLE ttSeries). /* Chama o método para criar e devolver o gráfico completo e guarda o resultado na variável monitorJsonOutput */ monitorJsonOutput = ChartBuilder:createChart(). DELETE OBJECT ChartBuilder. /* Exibe o resultado no Log do AppServer, se estiver ativo */ RUN displayJsonObject(monitorJsonOutput). CATCH eSysError AS Progress.Lang.Error: CREATE RowErrors. ASSIGN RowErrors.ErrorNumber = 17006 RowErrors.ErrorDescription = eSysError:getMessage(1) RowErrors.ErrorSubType = "ERROR". END. FINALLY: IF fn-has-row-errors() THEN DO: UNDO, RETURN 'NOK':U. END. END FINALLY. END PROCEDURE.. |
Após a inclusão dessa procedure na api, já é possível adicionar esse monitor exclusivo em uma Visão e observar o resultado espero conforme abaixo:
02.2. IMPLEMENTANDO A PROCEDURE DE MODO TEXTO
...