Deixar um campo obrigatório via customização | Ti Responde 064

No vídeo de hoje, vamos demonstrar em como deixar um campo obrigatório, pintando o fundo de vermelho.

Essa dúvida foi feita pelo Eduardo, onde ele perguntou se era possível ter um campo comum no dicionário (sem ser obrigatório), mas que via AdvPL, dependendo da condição, o campo ficasse obrigatório e deixasse o fundo em vermelho.

Então criamos uma tratativa no ponto de entrada MA020TDOK, onde se o estado for SP, os campos de email e home page serão obrigatórios.

E abaixo o código fonte desenvolvido para exemplificar:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function MA020TDOK
Ponto de Entrada na validação do Fornecedor ao clicar no Confirmar
@type  Function
@author Atilio
@since 01/09/2022
/*/

User Function MA020TDOK()
    Local aArea        := FWGetArea()
    Local lRet         := .T.
    Local cCSSCampo    := "TGet { color: #000000; selection-background-color: #369CB5;    background-color: #fff2f0;     padding-left: 3px;     padding-right: 3px;     border: 1px solid #D3362C;     border-radius: 3px; }tLabel{color: #000000;}"
    Local nAtual       := 0
    //Variáveis de controle dos objetos da tela
    Private oPai       := GetWndDefault()
    Private aControles := oPai:aControls
    Private nAtuPvt    := 0

    //Se o Estado for SP
    If M->A2_EST == "SP"
        //Se não tiver preenchido o email ou a homepage
        If Empty(M->A2_EMAIL) .Or. Empty(M->A2_HPAGE)
            lRet := .F.
            Help(, , "Help", , "Falha ao validar o fornecedor!", 1, 0, , , , , , {"Verifique os campos de eMail e/ou HomePage"})

            //Percorrendo os objetos criados da tela
            For nAtual := 1 To Len(aControles)
                nAtuPvt := nAtual

                //Se tiver variável e descrição
                If Type("aControles[nAtuPvt]:cReadVar") != "U" .And. Type("aControles[nAtuPvt]:cToolTip") != "U"

                    //Somente se tiver conteúdo de TGet
                    If ! Empty(aControles[nAtuPvt]:cReadVar) .And. ! Empty(aControles[nAtuPvt]:cToolTip) .And. 'M->' $ Upper(aControles[nAtuPvt]:cReadVar)
                        
                        //Se for o campo de email e ele estiver vazio -OU- Se for o campo de home page e ele estiver vazio
                        If (Alltrim(aControles[nAtuPvt]:cReadVar) == "M->A2_EMAIL" .And. Empty(M->A2_EMAIL)) .Or. (Alltrim(aControles[nAtuPvt]:cReadVar) == "M->A2_HPAGE" .And. Empty(M->A2_HPAGE))
                            aControles[nAtuPvt]:SetCSS(cCSSCampo)
                        EndIf
                        
                    EndIf
                EndIf
            Next


        EndIf
    EndIf

    FWRestArea(aArea)
Return lRet

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.

Deixe uma resposta

Terminal de Informação