ProcName

Retorna o nome da funcao N niveis acima na pilha de chamada. Pratico pra log de stack trace, auditoria, identificar contexto.

Assinatura: ProcName([nLevel]) -> cNome

Retorna: Character

ProcName permite ler a pilha de chamadas. Sem parametro retorna a funcao atual (similar a FunName). Com nivel N, retorna a funcao N posicoes acima na pilha.

Sintaxe

ProcName(nLevel) --> cNomeDaFuncao
// nLevel 0 = funcao atual (default)
// nLevel 1 = quem chamou a atual
// nLevel 2 = quem chamou quem chamou
// ...

Exemplo: stack trace

User Function A()
    U_B()
Return

Static Function B()
    U_C()
Return

Static Function C()
    ConOut("Atual: " + ProcName(0))    // "C"
    ConOut("Pai:   " + ProcName(1))    // "B"
    ConOut("Avo:   " + ProcName(2))    // "A"
Return

Casos praticos

1. Log com stack trace

Static Function LogErro(cMsg)
    ConOut("[ERRO] " + cMsg)
    ConOut("  Em: " + ProcName(1))     // quem chamou LogErro
    ConOut("  De: " + ProcName(2))     // pai dele
Return

// Uso
User Function MinhaFuncao()
    If !ValidaAlgo()
        LogErro("Validacao falhou")
        // [ERRO] Validacao falhou
        //   Em: MinhaFuncao
        //   De: ...
    EndIf
Return

2. Auditoria de quem alterou registro

Static Function GravaAuditoria(cTabela, cAcao)
    RecLock("ZAUD", .T.)
    ZAUD->ZAUD_FILIAL  := xFilial("ZAUD")
    ZAUD->ZAUD_DATA    := dDataBase
    ZAUD->ZAUD_HORA    := Time()
    ZAUD->ZAUD_USER    := RetCodUsr()
    ZAUD->ZAUD_TABELA  := cTabela
    ZAUD->ZAUD_ACAO    := cAcao
    ZAUD->ZAUD_ORIGEM  := ProcName(1)   // quem disparou
    ZAUD->(MsUnlock())
Return

3. Validar contexto de execucao

User Function MtVldCli()
    Local cCaller := ProcName(1)

    // So permitir alteracao se chamado por MATA030
    If !"MATA030" $ cCaller
        Help(" ", 1, "INVALIDO", , "Use a tela padrao pra alterar", 1, 0)
        Return .F.
    EndIf
Return .T.

ProcName vs FunName

FuncaoRetorno
FunName()Funcao "raiz" — geralmente a rotina TOTVS que esta no menu (MATA030, MATA460...)
ProcName(0)Funcao atual em execucao
ProcName(N)N niveis acima na pilha

Pegadinhas

Parâmetros

NomeTipoObrigatórioDescrição
nLevelNumericnãoNivel da pilha (0 = atual, default).

Veja também