Usina BRGuía AdvPL
Ingresar
← Todos los temas
FUNDAMENTOPublicado

Preservación de áreas con GetArea y RestArea

aArea := GetArea() // ... procesamiento ... RestArea(aArea)

Conserva alias, orden y registro antes de navegar por tablas y devuelve al llamador el mismo contexto de trabajo.

Base de datosÁreas de trabajoAliasBuenas prácticasGetAreaRestArea
01 · DESCRIPCIÓN GENERAL

Descripción general

Una rutina AdvPL que selecciona alias, cambia órdenes o mueve registros puede alterar el entorno que el código llamador espera seguir utilizando. GetArea() captura el alias activo, el orden seleccionado y el registro actual; RestArea() restaura ese conjunto. Cuando se manipula un alias conocido, conserva tanto el área general como el área específica. Restaura primero el alias manipulado y al final el área general, pues la última área restaurada queda activa. Los ejemplos actuales también presentan FWGetArea() y FWRestArea() como alternativas del Framework; confirma su disponibilidad en la LIB y utiliza de forma consistente el par adoptado por el proyecto.

02 · SINTAXIS

Sintaxis

aArea := GetArea()  // ... procesamiento ...  RestArea(aArea)

Parámetros

GetArea()
FunciónObligatorio

No recibe argumentos y retorna un array con Alias(), IndexOrd() y Recno().

Alias->(GetArea())
ExpresiónOpcional

Captura un área específica sin convertirla definitivamente en el área activa de la rutina.

RestArea(aArea)
FunciónObligatorio

Recibe el array de GetArea() y restaura alias, orden y registro. La última restauración determina el área activa.

Retorno

GetArea() retorna un array con el alias, el orden y el número de registro actuales. RestArea() recompone el entorno guardado.

03 · EJEMPLO PRÁCTICO

Conservar el área activa

#Include "TOTVS.ch"

User Function ExConsultaCliente()
    Local aAreaAnterior := GetArea()
    Local cNombreCliente := ""

    DbSelectArea("SA1")
    SA1->(DbSetOrder(1))
    If SA1->(DbSeek(xFilial("SA1") + "000001"))
        cNombreCliente := SA1->A1_NOME
    EndIf
    RestArea(aAreaAnterior)
Return cNombreCliente
Resultado esperado

La consulta utiliza SA1 sin dejar su contexto activo para el llamador.

04 · EJEMPLO PRÁCTICO

Conservar el área general y una específica

#Include "TOTVS.ch"

User Function ExValidaProducto()
    Local aAreaAnterior := GetArea()
    Local aAreaSB1 := SB1->(GetArea())
    Local lEncontrado := .F.

    DbSelectArea("SB1")
    SB1->(DbSetOrder(1))
    lEncontrado := SB1->(DbSeek(xFilial("SB1") + "000001"))
    SB1->(RestArea(aAreaSB1))
    RestArea(aAreaAnterior)
Return lEncontrado
Resultado esperado

Se restauran SB1 y el entorno general del llamador.

05 · EJEMPLO PRÁCTICO

Funciones del Framework

#Include "TOTVS.ch"

User Function ExAreaFramework()
    Local aAreaAnterior := FWGetArea()
    Local aAreaSC5 := SC5->(FWGetArea())

    DbSelectArea("SC5")
    SC5->(DbSetOrder(1))
    SC5->(DbGoTop())
    FWRestArea(aAreaSC5)
    FWRestArea(aAreaAnterior)
Return
Resultado esperado

Se aplica el mismo patrón con las funciones del Framework disponibles en la LIB homologada.

BUENAS PRÁCTICAS
  • Captura el área antes de operaciones que cambien el contexto recibido.
  • Guarda también Alias->(GetArea()) para cada alias conocido cuya posición será modificada.
  • Restaura las áreas específicas antes del área general.
  • Evita salidas que omitan la restauración; centraliza el retorno cuando sea útil.
  • Trata la preservación como parte del contrato de puntos de entrada y llamadas estándar.
  • Evalúa FWGetArea() y FWRestArea() según la LIB homologada y las convenciones del proyecto.
ERRORES COMUNES
  • Guardar solo el área general no protege necesariamente cada alias adicional.
  • Restaurar primero el área general y luego otro alias cambia el contexto activo del llamador.
  • El array guardado es un estado temporal, no una referencia permanente al registro.
  • La preservación no sustituye bloqueos, transacciones, tratamiento de errores ni validación de DbSeek().
  • Verifica la disponibilidad de las funciones del Framework en la LIB utilizada.

Contenido relacionado

REFERENCIAS
  1. TOTVS. GETAREA(). TDN Framework.
  2. TOTVS. RESTAREA(). TDN Framework.
  3. TOTVS. ADVPL — Manipulación de datos de banco. Atención al cliente.
  4. Adilio Costa. Protección de datos de un alias/tabla con GetArea en ADVPL, 2023.
  5. Alexandre Daniel. La importancia de GetArea y RestArea, 2022.
Estado
Publicado
Página creada el
Última revisión el
Idioma original
Portugués
Revisión
Usina.BR