Árvore de páginas

Versões comparadas

Chave

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

...

Bloco de código
titleExemplo Api de Negócio
linenumberstrue
collapsetrue
BLOCK-LEVEL ON ERROR UNDO, THROW.
 
USING PROGRESS.json.*.
USING PROGRESS.json.ObjectModel.*.
USING cdp.services.gestaoavista.*.   //A classe ChartBuilder está definida aqui.
 
{method/dbotterr.i}
{cdp/services/gestaoavista/builder-utils.i}
{cdp/services/gestaoavista/monitor-utils.i}

FUNCTION fn-has-row-errors RETURNS LOGICAL ():
    FOR EACH RowErrors 
        WHERE UPPER(RowErrors.ErrorType) = 'INTERNAL':U:
        DELETE RowErrors. 
    END.

    RETURN CAN-FIND(FIRST RowErrors 
        WHERE UPPER(RowErrors.ErrorSubType) = 'ERROR':U).
    
END FUNCTION.   

PROCEDURE pi-get-monitor-data-detail: // O nome da procedure de detalhe sempre precisa ser esse
    DEFINE INPUT  PARAM TABLE FOR ttVisaoMonitor.
    DEFINE INPUT  PARAM iPage            AS INTEGER    NO-UNDO.
    DEFINE INPUT  PARAM cSerie           AS CHARACTER  NO-UNDO.
    DEFINE INPUT  PARAM cCategory        AS CHARACTER  NO-UNDO.
    DEFINE OUTPUT PARAM detailJsonOutput AS JsonObject NO-UNDO.
    DEFINE OUTPUT PARAM TABLE FOR RowErrors.
    
    DEFINE VARIABLE DetailBuilder  AS DetailBuilder  NO-UNDO.   
    
    DetailBuilder = NEW DetailBuilder(). // Classe utilitária que ajudará na montagem do objeto de detalhe
    
    FIND FIRST ttVisaoMonitor.

    DetailBuilder:setHeaders(INPUT TABLE ttHeadersDetalhe). /* Opcionalmente, também podemos montar cabeçalhos (headers) para a janela de detalhe */
    DetailBuilder:setTags(INPUT TABLE ttTags). /* Opcionalmente, também podemos incluir tags para adicionar informações complementares na janela de detalhe */  
    DetailBuilder:setColumns(INPUT TABLE ttColunaDetalhe). /* Setando as colunas que serão exibidas na janela de detalhe */
    DetailBuilder:setItems(JsonAPIUtils:convertTempTableToJsonArray(TEMP-TABLE ttDados:HANDLE, FALSE)). /* Setando os dados que serão apresentados nas colunas definidas na tabela do detalhe */ 
    /*
       Dica: O método convertTempTableToJsonArray transforma nossauma temp-table em um JsonArray. É Arraynecessário erealizar éessa necessárioconversão pois o DetailBuilder érecebe genéricoos paradados qualquer temp-table, por essa razão ele deve receber os dadosde negócio em formato de JsonArray.
    */
    
    /* Se a consulta for paginada e tiver mais resultados além dos que estão sendo retornados, deverá setar a variável 'hasNext' como TRUE. Desse modo o botão
    'Carregar mais resultados' ficará habilitado na janela de detalhe para que o usuário possa requisitar a próxima página. Recomendamos utilizar paginação
    caso exista a possibilidade da consulta demorar mais que um minuto para ser realizada */
    DetailBuilder:setHasNext(FALSE).      
    DetailBuilder:setCanExportXLS(TRUE). // Determina se o botão de exportação para planilha (formato CSV) ficará habilitado (TRUE) ou não (FALSE)
    DetailBuilder:setModalMaxWidth("1440px"). // Tamanho máximo de largura que a janela de detalhe poderá possuir
    
    ASSIGN detailJsonOutput = DetailBuilder:createDetail(). //Gera o objeto de detalhe
    
    /* A temp-table RowErrors pode ser utilizada para retornar mensagens de erro, caso necess rionecessário:
        
        CREATE RowErrors.
        ASSIGN RowErrors.ErrorNumber = 17006
               RowErrors.ErrorDescription = "ERRO DE EXEMPLO"
               RowErrors.ErrorSubType = "ERROR".
    */


    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.

...