A050FIL
PE de filtro custom no browse de Solicitacao de Compra (SC). Retorna string SQL/expressao AdvPL que filtra o que aparece pra usuario.
Assinatura: User Function A050FIL() --> String com expressao de filtro (ex: "C1_FILIAL == '01' .And. !Deleted()")
Retorna: String com expressao de filtro (ex: "C1_FILIAL == '01' .And. !Deleted()")
Modulo: SIGACOM (Compras) · Rotina: MATA050 · Momento: Antes de exibir o browse de SC
Parametros (PARAMIXB)
Este PE nao recebe parametros via PARAMIXB. A tabela alvo ja esta posicionada quando o PE dispara — opere via (ALIAS)->CAMPO.
Retorno esperado
String com expressao de filtro (ex: "C1_FILIAL == '01' .And. !Deleted()")
Exemplo
User Function A050FIL()
Local cFil := ".T."
// Mostra apenas SCs do comprador logado
If RetCodUsr() != "000000"
cFil := "C1_USER == '" + RetCodUsr() + "'"
EndIf
Return cFilPegadinhas
- Filtro AdvPL (nao SQL) — usa sintaxe de expressao do Top.
- Filtro muito complexo degrada performance do browse.
- Combine com indices customizados pra performance OK.
Quando usar
- Mostrar so registros do usuario logado (multi-tenant)
- Filtrar por status especifico
- Esconder registros bloqueados/inativos
Cuidados gerais
- Idempotencia: PEs podem disparar mais de uma vez em retry ou reprocessamento — codigo deve ser seguro pra rodar varias vezes sem efeito colateral.
- Performance critica: PE roda em fluxo do usuario. Operacoes pesadas (loop sobre milhares de registros, chamada HTTP sincrona) podem travar a tela. Use
StartJobpra background. - Em JOB sem AppServer ativo: PE chamado via RPC pode ter
cFilAnt/cEmpAntvazios — sempre garantaRpcSetEnv. - Begin Sequence + Recover: erros nao tratados em PE podem deixar transacao Protheus em estado inconsistente. Sempre envolver em
Begin Sequence ... End Sequence. - Logging com contexto: use
FwLoggercom identificacao do PE no log — facilita troubleshooting.