Usina BRAdvPL Guia
Entrar
← Todos os tópicos
CLASSEPublicado

FWGridProcess

FWGridProcess():New( cFunName, cTitle, cDescription, bProcess, [cPerg], [cGrid], [lSaveLog] )

Cria uma interface padronizada para parametrizar, acompanhar e executar processamentos AdvPL, inclusive com divisão do trabalho em múltiplas threads.

ProcessamentoThreadsInterfaceLogFramework
01 · VISÃO GERAL

Visão geral

FWGridProcess organiza rotinas de processamento em uma interface com informações, perguntas SX1, log e configuração de concorrência. A rotina principal é recebida em um bloco de código; quando uma função de grid é informada, CallExecute() distribui unidades de trabalho entre as threads configuradas. Réguas de progresso, cancelamento e gravação de log ajudam a acompanhar execuções demoradas.

02 · SINTAXE

Sintaxe

FWGridProcess():New( cFunName, cTitle, cDescription, bProcess, [cPerg], [cGrid], [lSaveLog] )

Parâmetros

cFunName
CaractereObrigatório

Nome da rotina de menu associada ao processamento.

cTitle
CaractereObrigatório

Título exibido na interface.

cDescription
CaractereObrigatório

Descrição apresentada na área de informações.

bProcess
BlocoObrigatório

Bloco que executa o processamento e recebe, por referência, o indicador lógico de cancelamento.

cPerg
CaractereOpcional

Grupo de perguntas SX1 usado para montar a tela de parâmetros.

cGrid
CaractereOpcional

Nome da função executada por CallExecute() quando o processamento em grid estiver configurado.

lSaveLog
LógicoOpcional

Habilita a persistência das mensagens enviadas por SaveLog() no log de processamento SXU.

Retorno

New() retorna a instância de FWGridProcess. IsFinished() informa se o processamento terminou; CallExecute() devolve o resultado do controle da execução da unidade enviada ao grid.

03 · EXEMPLO PRÁTICO

Estrutura principal e tela de informações

#Include "TOTVS.ch"

User Function ExGridProcess()
    Local oProcesso

    oProcesso := FWGridProcess():New( ;
        "MATA330", ;
        "Processamento", ;
        "Exemplo de processamento em grade", ;
        {|lCancelar| U_ExProcessa(oProcesso, @lCancelar)}, ;
        "MTA330", ;
        "U_ExUnidade" ;
    )

    oProcesso:SetMeters(2)
    oProcesso:SetThreadGrid(5)
    oProcesso:Activate()

    If oProcesso:IsFinished()
        MsgInfo("Processamento concluído.", "FWGridProcess")
    Else
        MsgAlert("Processamento cancelado ou finalizado com erro.", "FWGridProcess")
    EndIf
Return
Resultado esperado

A classe abre a interface padronizada. A área Informações apresenta o título, a descrição e os comandos de execução.

04 · EXEMPLO PRÁTICO

Perguntas do grupo SX1

// O grupo MTA330 informado no construtor
// alimenta automaticamente a área Perguntas.

oProcesso := FWGridProcess():New( ;
    "MATA330", cTitulo, cDescricao, bProcesso, ;
    "MTA330", "U_ExUnidade" ;
)
Resultado esperado

Os parâmetros do grupo SX1 são exibidos em uma área própria, com controles adequados ao tipo de cada pergunta.

05 · EXEMPLO PRÁTICO

Réguas e execução das unidades

User Function ExProcessa(oProcesso, lCancelar)
    Local nGrupo
    Local nItem

    oProcesso:SetMaxMeter(4, 1, "Grupos")

    For nGrupo := 1 To 4
        oProcesso:SetMaxMeter(10, 2, "Itens")

        For nItem := 1 To 10
            If !oProcesso:CallExecute("Unidade carregada", 1)
                lCancelar := .T.
            EndIf

            oProcesso:SetIncMeter(2)
            If lCancelar
                Exit
            EndIf
        Next nItem

        If lCancelar
            Exit
        EndIf
        oProcesso:SetIncMeter(1)
    Next nGrupo
Return

User Function ExUnidade(cParametro, lErro)
    // Processe uma unidade independente nesta função.
    Sleep(1000)
Return .T.
Resultado esperado

A configuração permite escolher o número de processos simultâneos. Cada régua acompanha um nível do trabalho e CallExecute() encaminha a unidade à função de grid.

06 · EXEMPLO PRÁTICO

Registro e consulta do log

oProcesso:SaveLog("Início do lote " + cValToChar(nGrupo))

If lCancelar
    oProcesso:SaveLog("Processamento cancelado pelo usuário")
Else
    oProcesso:SaveLog("Processamento concluído")
EndIf

ConOut(oProcesso:GetLastLog())
Resultado esperado

As mensagens podem ser acompanhadas na área Log de Processos e, quando habilitado no construtor, persistidas no controle SXU.

BOAS PRÁTICAS
  • SetMeters(nQtde) define a quantidade de réguas; SetMaxMeter(nMax,nMeter,cMsg) configura o total e SetIncMeter(nMeter,cMsg) avança a régua indicada.
  • SetMaxThreadGrid(nMax) limita a escolha do usuário e SetThreadGrid(nThread) define a quantidade inicial de threads.
  • CallExecute(xParm0...xParm9) só deve ser usado quando uma função de grid tiver sido configurada no construtor.
  • SaveLog(cMsg) registra informações da execução; GetLastLog() recupera a última mensagem.
  • SetAfterExecute(bParam) registra um bloco para o término de Execute(); StopExecute() interrompe uma execução iniciada.
  • SetAbort(lAbort) controla se o usuário pode cancelar. SetNoParam() oculta a área de parametrização quando ela não for necessária.
  • Activate(oDlg) abre a interface; DeActivate() descarta a configuração atual e permite refazê-la.
ARMADILHAS COMUNS
  • A função de grid é chamada em threads separadas: não dependa de variáveis globais ou de estado compartilhado sem controle adequado.
  • Passe o indicador de cancelamento por referência ao bloco principal e verifique-o dentro de laços demorados.
  • Mantenha a quantidade de threads compatível com banco de dados, licenças, memória e carga do AppServer; mais threads não garantem melhor desempenho.
  • O exemplo comunitário abre ambiente com RpcSetEnv(); adapte empresa, filial, perguntas e rotinas antes de executar e sempre finalize ambientes abertos programaticamente quando aplicável.
  • O teste condicional nX == 5 do exemplo original nunca ocorre em um laço que termina em 4; ele foi preservado apenas na referência original e corrigido no exemplo didático abaixo.

Conteúdos relacionados

REFERÊNCIAS
  1. TOTVS. FWGridProcess. TDN Framework. Criado por Marcelo Cardoso da Silva; última alteração indicada em 2 mar. 2016.
  2. TEODORO, Elton. testeba.prw — exemplo comunitário de FWGridProcess. Repositório Base-Teste no GitHub. Exemplo adaptado e revisado.
  3. Capturas de tela fornecidas pelo editor do AdvPL Guia em 5 ago. 2026.
Situação
Publicado
Página criada em
Última revisão em
Idioma original
Português
Revisão
Usina.BR