Camarada, demorei pra achar sua pergunta para descobrir que não foi respondida :'(.
Não teve jeito, tive que me virar nas gambiarra.
Não sei se funciona com FWMarkBrowse mas com a FWMbrowse funcionou direitinho.
Consegui este código tornando a variável do browse privada e pegando o array de filtros via depuração,
ou seja, basta você criar manualmente o filtro que quiser e depois utilizar sua função informada no método SetIniWindow para visualizar como foi salvo o filtro no padrão do protheus, e então copiar tudo para o seu código ;)
Obs: Estou utilizando em tabela temporária, e mesmo assim não tive problemas.
Private oBrowse
//Filtro de expressão exibido quando você cria seu filtro manualmente
oBrowse:AddFilter("Descricao Contem", '"%TMP_DESC0%" $ UPPER(TMP_DESC)',,.F.,,.T.)
//Bloco de código que é executado na inicialização da janela do browse
oBrowse:SetIniWindow({||UpdBrw()})
//Sua função para alterar o filtro do browse durante a execução
//Está feito na mão mas acredito que você pode facilitar a programação pela função FWFilter
Static Function UpdBrw()
Local aFiltroDes := { {"TMP_DESC","FIELD","DESCRICAO Contém a expressão '%TMP_DESC0%'",'"%TMP_DESC0%" $ UPPER(TMP_DESC)',"UPPER(TMP_DESC) LIKE '%%TMP_DESC0%%'"},;
{"..","OPERATOR","","",""},;
{"%TMP_DESC0%","EXPRESSION","","","",.F.};
}
IF oBrowse:OFWFILTER:AFILTER != nil .AND. Len(oBrowse:OFWFILTER:AFILTER) > 0 .AND. type("oBrowse:OFWFILTER:AFILTER[1][3]") == "C" .AND. EMPTY(oBrowse:OFWFILTER:AFILTER[1][3])
oBrowse:OFWFILTER:AFILTER[1][3]:= aFiltroDes[1][5]//"UPPER(TMP_DESC) LIKE '%%TMP_DESC0%%'"
oBrowse:OFWFILTER:AFILTER[1][4]:= aFiltroDes
ENDIF
Return .T.
Você diz aquele filtro padrão do protheus que tem no canto superior direito?
— Patrick Zerbinatti 21 de Nov de 2019