Pegar os dados do FwMarkBrowse apos filtro

Acredito que esta minha duvida seja bem simples, mas como sou iniciante em ADVPL estou com dificuldade. Tenho o codigo abaixo, onde coloco um filtro default no browse e o usuario pode criar outros filtros, como faço para pegar somente os registros que estão sendo exibidos no browse apos o filtro?


#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"

User Function MCK001A()
    Local aArea     As Array
    Local oBrowse   As Object

    aArea   := GetArea()

    oBrowse := FwLoadBrw("MCK001")
    oBrowse:Activate()

    RestArea(aArea)

Return

Static Function BrowseDef()
    Local oBrowse   As Array
    Local cFilter   As Character

    cFilter := SB2->("@B2_LOCAL = 'DV' AND B2_QATU > 0")

    oBrowse := FwMarkBrowse():New()
    oBrowse:DataTable()
    oBrowse:SetAlias("SB2")
    oBrowse:SetMenuDef("MCK001")
    oBrowse:SetFilterDefault(cFilter)

Return oBrowse

Static Function MenuDef()
    Local aRot  As Array

    aRot := {}
    Add OPTION aRot TITLE 'Teste' ACTION 'u_MCK001B()'  OPERATION 6 ACCESS 0

Return aRot


User Function MCK001B()
    Local cAliasSB2 := 'SB2'
    Local aAreaSB2  := (cAliasSB2)->( GetArea() )

    //Aqui vem todos os registros da tabela
    //Gostaria de pegar somente os dados exibidos no browse
    DbSelectArea(cAliasSB2)
    (cAliasSB2)->( DbGoTop() )
    While !(cAliasSB2)->( Eof() )
        Alert( (cAliasSB2)->B2_COD )
        (cAliasSB2)->( DbSkip() )
    EndDo

    RestArea( aAreaSB2 )
Return

Segue link do TDN

https://centraldeatendimento.totvs.com/hc/pt-br/articles/360021719771-MP-ADVPL-Utilização-do-setFilterDefault-na-Classe-FwBrowse-em-um-Browser-de-Array

Abraço, Don Junior

Leandro, passei pelo mesmo problema, não sei se é o jeito correto, mas resolvi da seguinte forma. Consegui buscar o filtro ativo no array oMarkBrow:oBrowse:ODATA:AFILTRATE na segunda posição, e comparei se o registro não está marcado e a condição é verdadeira


User Function RestOMark()
    Local aArea := GetArea()     

    DbSelectArea("TRB")
    DbGotop()
    While !Eof()
        if !(oMarkBrow:IsMark( cMark )) .and. &(oMarkBrow:oBrowse:ODATA:AFILTRATE[1][2])
            RecLock( 'TRB', .F. )
            TRB->RB_OK := cMark
            MsUnLock()
        Endif
        TRB->(DbSkip())
    Enddo

    RestArea(aArea)
return

Leandro, é muito simples, passei por este problema. É só você setar novamente o SetFilterDefault e nem precisa dar um gotop.

ser Function MCK001B()

Local aArea := GetArea()

Local cMarca := oMark:Mark()

Local cAlias := oMark:Alias()

cFilter := SB2->("@B2_LOCAL = 'DV' AND B2_QATU > 0")

oBrowse:SetFilterDefault(cFilter)

//Aqui vem so os registros filtrados

DbSelectArea(cAlias )

While !(cAlias )->( Eof() )

Alert( (cAlias )->B2_COD )

(cAlias )->( DbSkip() )

EndDo

RestArea( aArea )

Return