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(INPUT cSerie,
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(INPUT iPage,
INPUT cSerie,
OUTPUT lHasNext,
OUTPUT TABLE ttOrdemProducao).
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".
// Setamos as colunas, tags, headers e itens que serão exibidos
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 INPUT PARAM cSerie AS CHARACTER NO-UNDO.
DEFINE OUTPUT PARAMETER TABLE FOR ttHeadersDetalhe.
CREATE ttHeadersDetalhe.
ASSIGN ttHeadersDetalhe.texto-header = "Listando Ordens com Situação:"
ttHeadersDetalhe.classe-header = "po-sm-12 po-font-subtitle blue-text" //Classes de tipografia do PO-UI estão disponíveis em: https://po-ui.io/guides/typography
ttHeadersDetalhe.estilo-header = "".
CREATE ttHeadersDetalhe.
ASSIGN ttHeadersDetalhe.texto-header = IF cSerie <> "" THEN cSerie ELSE "Todos"
ttHeadersDetalhe.classe-header = "po-sm-12 po-font-text-large-bold" //Classes de tipografia do PO-UI estão disponíveis em: https://po-ui.io/guides/typography
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 esteja preenchido, irá significar 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.
IF 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(
BUFFER ord-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 iCount = iCount + 1.
END.
END PROCEDURE. |
...
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas