Função para fechar todas as áreas

Boa tarde, Existe alguma função que eu consiga pegar todas as áreas de um ponto de entrada aberta, já que eu não sei que tabelas estão abertas, substituindo assim o getarea() restarea() ?

Tiago, não entendi bem o que você deseja? Você quer saber se uma tabela está aberta em determinado trecho do código o todas as tabelas que encontram-se abertas? O Protheus hoje permite mais de 1000 workareas abertas na mesma thread.

Bom dia Tiago ! Tudo bem ?

Não conheço nenhuma função que faça isso, mas existe uma variável pública chamada cFOpened que pode servir.

Você poderia fazer algo assim para guardar as áreas abertas e depois restaurá-las:


aFOpened := {}

For nI := 1 To Len( cFOpened ) Step 3

   aAdd( aFOpened, Substr( cFOpened, nI, 3 ) )

Next nI

Nunca precisei fazer algo assim e não sei se realmente essa variável tem mesmo todas as áreas abertas, mas não custa tentar.

Espero ter ajudado.

Abraços !

Muito obrigado, vou tentar sim o exemplo.

Boa noite Tiago, vc tem uma funcao que nao tem entrada no TDN mais fazen uso no algumos exemplos (VFUNB4 Ponto de Entrada para permitir a manipulação / inserção de novos campos na rotina Documento Entrada (MATA103) que é sGetArea() é sRestArea(). O SGetArea vai acumulando (com ajuda manual) no array aArea as áreas informadas e após quandos e chamada a funcao sRestArea() faz um loop restorando as áreas.


Local aArea := {}

aArea := sGetArea(aArea,"SB1")
aArea := sGetArea(aArea,"SB2")
aArea := sGetArea(aArea,"SB5")
If !Empty(Alias())
   aArea := sGetArea(aArea,Alias())
EndIf

[trecho do codigo]

sRestArea(aArea)

Espero seja de sua ajuda.