Árvore de páginas

Versões comparadas

Chave

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

...

Ao clicar em Adicionar, será apresentado um formulário contendo os campos abaixo:

Image RemovedImage Added


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
titleInformação

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.


Image RemovedImage Added

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
titleInformação

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
titleExemplo 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:

Image Added Image Added Image Added Image Added




02.2. IMPLEMENTANDO A PROCEDURE DE MODO TEXTO

...