GetArea/RestArea

Preserva e restaura o estado da area de trabalho (alias, ordem, posicao). Pattern obrigatorio em funcoes utilitarias.

Assinatura: aArea := GetArea() // RestArea(aArea) -> NIL

Retorna: Array (GetArea) / NIL (RestArea)

Dupla de funcoes fundamental pra escrever codigo educado. GetArea retorna um array com alias atual, ordem, recno; RestArea restaura. Sem isso, sua funcao bagunça a area da funcao chamadora.

Padrao basico

User Function MinhaFunc()
    Local aArea := GetArea()        // salva estado
    Local aAreaSA1 := SA1->(GetArea()) // salva especifico de SA1

    SA1->(DBSetOrder(1))
    SA1->(DBSeek(xFilial("SA1") + cCod))
    // ... trabalho

    RestArea(aAreaSA1)              // restaura SA1
    RestArea(aArea)                 // restaura geral
Return

Quando usar

Pegadinhas

Exemplos

Funcao bem-comportada

User Function GetNomeCli(cCod)
    Local cNome  := ""
    Local aArea := SA1->(GetArea())

    SA1->(DBSetOrder(1))
    If SA1->(DBSeek(xFilial("SA1") + cCod))
        cNome := AllTrim(SA1->A1_NOME)
    EndIf

    RestArea(aArea)
Return cNome

Veja também