Usina BRGuía AdvPL
Ingresar
← Todos los temas
CLASEPublicado

FWGridProcess

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

Crea una interfaz estándar para configurar, supervisar y ejecutar procesos AdvPL, incluso con distribución en múltiples hilos.

ProcesamientoHilosInterfazLogFramework
01 · DESCRIPCIÓN GENERAL

Descripción general

FWGridProcess organiza rutinas extensas en las áreas Información, Preguntas SX1, Log de Procesos y configuración de concurrencia. Un bloque principal controla el flujo y una función de grid opcional permite que CallExecute() distribuya unidades independientes entre los hilos.

02 · SINTAXIS

Sintaxis

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

Parámetros

cFunName
CaractereObligatorio

Nombre de la rutina de menú asociada al proceso.

cTitle
CaractereObligatorio

Título mostrado en la interfaz.

cDescription
CaractereObligatorio

Descripción de la página Información.

bProcess
BlocoObligatorio

Bloque principal; recibe por referencia el indicador de cancelación.

cPerg
CaractereOpcional

Grupo de preguntas SX1 usado en la parametrización.

cGrid
CaractereOpcional

Función ejecutada para cada unidad del procesamiento en grid.

lSaveLog
LógicoOpcional

Habilita la persistencia de mensajes de SaveLog() en SXU.

Retorno

New() retorna la instancia de FWGridProcess. IsFinished() indica si terminó la ejecución; CallExecute() retorna el resultado de control de la unidad enviada.

03 · EJEMPLO PRÁCTICO

Estructura principal e Información

#Include "TOTVS.ch"

User Function ExGridProcess()
    Local oProceso
    oProceso := FWGridProcess():New( ;
        "MATA330", "Procesamiento", ;
        "Ejemplo de procesamiento en grid", ;
        {|lCancelar| U_ExProcesa(oProceso, @lCancelar)}, ;
        "MTA330", "U_ExUnidad" ;
    )
    oProceso:SetMeters(2)
    oProceso:SetThreadGrid(5)
    oProceso:Activate()
Return
Resultado esperado

Se abre la interfaz estándar con información y controles de ejecución.

04 · EJEMPLO PRÁCTICO

Preguntas SX1

// MTA330 construye el área Preguntas.
oProceso := FWGridProcess():New( ;
    "MATA330", cTitulo, cDescripcion, bProceso, ;
    "MTA330", "U_ExUnidad" ;
)
Resultado esperado

Los parámetros SX1 se muestran con controles adecuados a sus tipos.

05 · EJEMPLO PRÁCTICO

Medidores y unidades

User Function ExProcesa(oProceso, lCancelar)
    Local nGrupo
    Local nItem
    oProceso:SetMaxMeter(4, 1, "Grupos")
    For nGrupo := 1 To 4
        oProceso:SetMaxMeter(10, 2, "Elementos")
        For nItem := 1 To 10
            If !oProceso:CallExecute("Unidad cargada", 1)
                lCancelar := .T.
            EndIf
            oProceso:SetIncMeter(2)
            If lCancelar
                Exit
            EndIf
        Next nItem
        If lCancelar
            Exit
        EndIf
        oProceso:SetIncMeter(1)
    Next nGrupo
Return
Resultado esperado

Cada medidor acompaña un nivel y CallExecute() envía unidades independientes a la función de grid.

06 · EJEMPLO PRÁCTICO

Log del proceso

oProceso:SaveLog("Inicio del grupo " + cValToChar(nGrupo))
ConOut(oProceso:GetLastLog())
Resultado esperado

Los mensajes se consultan en Log de Procesos y pueden persistirse en SXU.

BUENAS PRÁCTICAS
  • Utiliza SetMeters(), SetMaxMeter() y SetIncMeter() para representar los niveles de progreso.
  • SetMaxThreadGrid() limita la selección y SetThreadGrid() define la cantidad inicial de hilos.
  • CallExecute() requiere una función de grid configurada.
  • Utiliza SaveLog() y GetLastLog() para los mensajes.
  • SetAfterExecute(), StopExecute(), SetAbort() y SetNoParam() controlan el ciclo de ejecución y la interfaz.
  • Activate() abre la interfaz; DeActivate() descarta su configuración actual.
ERRORES COMUNES
  • Las funciones de grid se ejecutan en hilos separados; evita estado compartido sin control.
  • Comprueba el indicador de cancelación dentro de bucles extensos.
  • Elige una cantidad de hilos compatible con base de datos, licencias, memoria y carga del AppServer.
  • Adapta RpcSetEnv(), empresa, sucursal, preguntas y rutinas del ejemplo comunitario.
  • El ejemplo original comprueba nX == 5 dentro de un bucle que termina en 4; el ejemplo didáctico elimina esa condición inalcanzable.

Contenido relacionado

REFERENCIAS
  1. TOTVS. FWGridProcess. TDN Framework.
  2. Elton Teodoro. Ejemplo comunitario testeba.prw en GitHub. Adaptado y revisado.
  3. Capturas suministradas por el editor de la Guía AdvPL el 5 ago. 2026.
Estado
Publicado
Página creada el
Última revisión el
Idioma original
Portugués
Revisión
Usina.BR