Histórico da Página
...
Bloco de código | ||
---|---|---|
| ||
PROCEDURE pi-get-monitor-data-detail: /* O nome da procedure de detalhe sempre precisará 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. DEFINE VARIABLE lHasNext AS LOGICAL INITIAL FALSE NO-UNDO. DetailBuilder = NEW DetailBuilder(). // Classe utilitária que ajudará na montagem do objeto de detalhe FIND FIRST ttVisaoMonitor. /* Procedure local que cria a temp-table das colunas que serão apresentadas na janela de detalhe */ RUN pi-get-colunas-detalhe(OUTPUT TABLE ttColunaDetalhe). /* Opcionalmente, também podemos montar cabeçalhos (headers) para a janela de detalhe */ RUN pi-get-headers-detalhe(OUTPUT TABLE ttHeadersDetalhe). /** Executar o método que irá retornar a temp-table contendo os dados a serem apresentados no detalhe. Dessa vez não serão os totais, e sim os registros individuais. Pode ser aproveitado o mesmo método de query que gera o gráfico do monitor, porém ele precisará ser ajustado para levar em consideração qual fatia/coluna do gráfico o usuário clicou (variáveis cSerie e cCategory) e também precisará gerar a tabela com os registros individuais, e não somente calcular os totais **/ RUN pi-get-itens-detalhe(OUTPUT TABLE ttOrdemProducao). INPUT iPage, CREATE ttTags. ASSIGN ttTags.valor = "Tag de Exemplo" INPUT cSerie, ttTags.icone = "po-icon-calendar" OUTPUT lHasNext, ttTags.cor-texto = "#f5f5f5" ttTags.cor-tag OUTPUT = "#080707"TABLE ttOrdemProducao). CREATE ttTags. ASSIGN ttTags.valor = "Tag de Exemplo 2" ttTags.icone = "po-icon-manufacturecalendar" ttTags.cor-texto = "#f5f5f5" ttTags.cor-tag = "#080707". // Setamos as colunas, tags, headers e itens que serão exibidosCREATE ttTags. ASSIGN ttTags.valor = "Tag de Exemplo 2" DetailBuilder:setTags(INPUT TABLE ttTags). icone DetailBuilder:setColumns(INPUT TABLE ttColunaDetalhe).= "po-icon-manufacture" DetailBuilder:setHeaders(INPUT TABLE ttHeadersDetalhe). DetailBuilder:setItems(JsonAPIUtils:convertTempTableToJsonArray(TEMP-TABLE ttOrdemProducao:HANDLE, FALSE)). //O método convertTempTableToJsonArray transforma nossa temp-table em um Array, contendo os campos conforme os SERIALIZE-NAME definidos ttTags.cor-texto = "#f5f5f5" ttTags.cor-tag = "#080707". /** / Setamos as colunas, tags, headers e Seitens aque consultaserão forexibidos paginada e tiver mais resultados além dos que estão sendo retornados, podemos 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 consultar os registros da próxima página. Recomendamos utilizar paginação DetailBuilder:setTags(INPUT TABLE ttTags). DetailBuilder:setColumns(INPUT TABLE ttColunaDetalhe). DetailBuilder:setHeaders(INPUT TABLE ttHeadersDetalhe). DetailBuilder:setItems(JsonAPIUtils:convertTempTableToJsonArray(TEMP-TABLE ttOrdemProducao:HANDLE, FALSE)). //O método convertTempTableToJsonArray transforma nossa temp-table em um Array, contendo os campos conforme os SERIALIZE-NAME definidos /** Se a consulta for paginada e tiver mais resultados além dos que estão sendo retornados, podemos 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 consultar os registros da próxima página. Recomendamos utilizar paginação caso exista a possibilidade da consulta geral demorar mais que um minuto **/ DetailBuilder:setHasNext(lHasNext). DetailBuilder:setCanExportXLS(TRUE). // Determina se o botão de exportação para planilha ficará habilitado (TRUE) ou não (FALSE) DetailBuilder:setModalMaxWidth("1440px"). // Tamanho máximo que a janela terá em tela ASSIGN detailJsonOutput = DetailBuilder:createDetail(). //Gera o objeto de detalhe /** A temp-table RowErrors pode ser utilizada para retornar mensagens de erro, caso necessário: CREATE RowErrors. ASSIGN RowErrors.ErrorNumber = 17006 RowErrors.ErrorDescription = "ERRO DE EXEMPLO" RowErrors.ErrorSubType = "ERROR". **/ END PROCEDURE. PROCEDURE pi-get-headers-detalhe: DEFINE OUTPUT PARAMETER TABLE FOR ttHeadersDetalhe. CREATE ttHeadersDetalhe. ASSIGN ttHeadersDetalhe.texto-header = "Título" ttHeadersDetalhe.classe-header = "po-sm-12 po-font-title blue-text" ttHeadersDetalhe.estilo-header = "". CREATE ttHeadersDetalhe. ASSIGN ttHeadersDetalhe.texto-header = "Subtítulo" ttHeadersDetalhe.classe-header = "po-sm-12 po-font-subtitle" ttHeadersDetalhe.estilo-header = "". CREATE ttHeadersDetalhe. ASSIGN ttHeadersDetalhe.texto-header = "Texto de exemplo" ttHeadersDetalhe.classe-header = "po-sm-12 po-font-text-small po-pt-1" ttHeadersDetalhe.estilo-header = "". END PROCEDURE. PROCEDURE pi-get-colunas-detalhe: DEFINE OUTPUT PARAMETER TABLE FOR ttColunaDetalhe. /* Atenção! O campo 'propriedade' da ttColunaDetalhe deve conter o mesmo nome que consta no SERIALIZE-NAME do campo que será apresentado, conforme definição da temp-table. Estamos utilizando a temp-table ttOrdemProducao neste exemplo, veja que estamos usando os nomes em inglês que foram definidos para cada propriedade: */ CREATE ttColunaDetalhe. ASSIGN ttColunaDetalhe.cod-label = "Ordem" ttColunaDetalhe.propriedade = "productionOrderNumber" //productionOrderNumber equivale ao campo nr-ord-produ na temp-table ttOrdemProducao ttColunaDetalhe.formato = "1.0-0" ttColunaDetalhe.tipo = "number" ttColunaDetalhe.largura = "180px". CREATE ttColunaDetalhe. ASSIGN ttColunaDetalhe.cod-label = "Item" ttColunaDetalhe.propriedade = "itemCode". //itemCode equivale ao campo it-codigo na temp-table ttOrdemProducao CREATE ttColunaDetalhe. ASSIGN ttColunaDetalhe.cod-label = "Data de Emissão" ttColunaDetalhe.propriedade = "creationDate" //creationDate equivale ao campo dt-emissao na temp-table ttOrdemProducao ttColunaDetalhe.tipo = "date". CREATE ttColunaDetalhe. ASSIGN ttColunaDetalhe.cod-label = "Quantidade" ttColunaDetalhe.propriedade = "quantity" //quantity equivale ao campo qt-ordem na temp-table ttOrdemProducao ttColunaDetalhe.tipo = "number" ttColunaDetalhe.formato = "1.4-4". END PROCEDURE. PROCEDURE pi-get-itens-detalhe: DEFINE INPUT PARAM iPage AS INTEGER NO-UNDO. DEFINE INPUT PARAM cSerie AS CHARACTER NO-UNDO. DEFINE OUTPUT PARAM lHasNext AS LOGICAL NO-UNDO. DEFINE OUTPUT PARAMETER TABLE FOR ttOrdemProducao. DEFINE VARIABLE cQuery AS CHARACTER NO-UNDO. DEFINE VARIABLE iCount AS INTEGER NO-UNDO. DEFINE VARIABLE cFiltroEstab AS CHARACTER NO-UNDO. DEFINE VARIABLE dFiltroData AS DATE NO-UNDO. ASSIGN cFiltroEstab = fn-get-valor-propriedade(INPUT "cod-estabel") dFiltroData = TODAY - INTEGER(fn-get-valor-propriedade(INPUT "qtd-dias-atras")). ASSIGN cQuery = 'FOR EACH ord-prod NO-LOCK':U. ASSIGN cQuery = cQuery + ' WHERE ord-prod.cod-estabel = "' + cFiltroEstab + '"'. ASSIGN cQuery = cQuery + ' AND ord-prod.dt-emissao >= ' + STRING(dFiltroData) + ''. /* Caso a cSerie venha preenchido, significa que a tela de detalhes foi acionada através de uma interação com o gráfico e deverá ser filtrado os dados de acordo com a série clicada */ IF cSerie <> "" THEN DO: IF cSerie = "Em Aberto" THEN ASSIGN cQuery = cQuery + ' AND ord-prod.estado < 3'. ELSE IF cSerie = "Em Andamento" THEN ASSIGN cQuery = cQuery + ' AND ord-prod.estado >= 3 AND ord-prod.estado <= 6'. ELSE IF cSerie = "Concluídas" THEN ASSIGN cQuery = cQuery + ' AND ord-prod.estado >= 7'. END. DEFINE QUERY findQuery FOR ord-prod SCROLLING. QUERY findQuery:QUERY-PREPARE(cQuery). QUERY findQuery:QUERY-OPEN(). QUERY findQuery:REPOSITION-TO-ROW(iPage). REPEAT: GET NEXT findQuery. caso existaIF a possibilidade da consulta geral demorar mais que um minuto **/ DetailBuilder:setHasNext(FALSE). DetailBuilder:setCanExportXLS(TRUE). // Determina se o botão de exportação para planilha ficará habilitado (TRUE) ou não (FALSE) DetailBuilder:setModalMaxWidth("1440px"). // Tamanho máximo que a janela terá em tela ASSIGN detailJsonOutput = DetailBuilder:createDetail(). //Gera o objeto de detalhe /** QUERY findQuery:QUERY-OFF-END THEN LEAVE. IF iCount >= 50 THEN DO: ASSIGN lHasNext = TRUE. LEAVE. END. CREATE ttOrdemProducao. TEMP-TABLE ttOrdemProducao:HANDLE:DEFAULT-BUFFER-HANDLE:BUFFER-COPY( ABUFFER temp-table RowErrors pode ser utilizada para retornar mensagens de erro, caso necessário: CREATE RowErrorsord-prod:HANDLE ). FOR FIRST item FIELDS(desc-item) WHERE item.it-codigo = ttOrdemProducao.it-codigo NO-LOCK: END. ASSIGN ttOrdemProducao.desc-item = IF AVAIL item THEN item.desc-item ELSE ''. ASSIGN RowErrors.ErrorNumber = 17006 ASSIGN iCount = iCount + RowErrors.ErrorDescription = "ERRO DE EXEMPLO"1. RowErrors.ErrorSubType = "ERROR"END. **/ END PROCEDURE. |
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas