Adicionar legenda numa tela sem PE | Ti Responde 061

No vídeo de hoje vamos demonstrar em como adicionar legendas numa função padrão onde não tem ponto de entrada para manipular o browse.

A dúvida de hoje foi feita pelo grande Alexandre, onde ele questionou se haveria a possibilidade de adicionar legendas na tela de fornecedores.

Então demonstramos como fazer interceptando o browse através da função FWmBrwActive e depois como manipular as informações (foi usado o ponto de entrada genérico MBlkColor, que serve para alterar a cor de linhas bloqueadas).

E abaixo o código fonte desenvolvido para exemplificar:

//Bibliotecas
#Include "TOTVS.ch"
 
/*/{Protheus.doc} User Function MBlkColor
Altera a cor da linha bloqueada
@type  Function
@author Atilio
@since 27/04/2022
@see http://tdn.totvs.com/display/public/mp/MBlkColor+-+Retorna+cores+a+utilizar
/*/
 
User Function MBlkColor()
    Local aArea     := FWGetArea()
    Local oBrowse   := Nil
    Local nColunas  := 0
 
    //Se a última tabela aberta for a de Fornecedor e vier da rotina MATA020
    If aArea[1] == 'SA2' .And. FWIsInCallStack("MATA020")
        //Intercepta o Browse - similar a antiga GetObjBrow()
        oBrowse := FWmBrwActive()
         
        //Se o Browse já estiver na memória
        If ValType(oBrowse) == "O"
            //Se não tiver legendas, irá adicionar
            If Len(oBrowse:aLegends) == 0
                oBrowse:AddLegend( "SA2->A2_TIPO == 'F'", "WHITE",  "Fisico" )
                oBrowse:AddLegend( "SA2->A2_TIPO == 'J'", "BLACK",  "Juridico" )
                oBrowse:AddLegend( "SA2->A2_TIPO == 'X'", "RED",       "Outros" )
 
                //Pega o total de colunas, insere um elemento, e fala que será na posição 1
                nColunas := Len(oBrowse:aColumns)
                aSize(oBrowse:aColumns, nColunas + 1)
                aIns(oBrowse:aColumns, 1)
 
                //Copia a última posição (que é a legenda) para a primeira, e depois exclui ela do final
                oBrowse:aColumns[1] := oBrowse:aColumns[nColunas + 1]
                aDel(oBrowse:aColumns, nColunas + 1)
                aSize(oBrowse:aColumns, nColunas)
            EndIf
        EndIf
    EndIf
 
    FWRestArea(aArea)
Return

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

2 Responses

  1. Súlivan disse:

    Muito bom, contornou um problema com elegância e de forma assertiva.

Deixe uma resposta

Terminal de Informação