(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Como validar formulários no Power Apps: passo a passo

João Barros 14 de July de 2026 5 min de leitura

Validar formulários no Power Apps evita que registos incompletos ou mal formatados cheguem à base de dados. Com o controlo Form, a propriedade Required dos DataCards e algumas fórmulas Power Fx, é possível bloquear o botão Guardar até os dados estarem corretos e mostrar mensagens de erro claras. O exemplo seguinte usa um formulário simples de contactos com Nome, Email e Idade.

Pré-requisitos

  • Acesso ao Power Apps Studio (make.powerapps.com) com uma licença válida.
  • Uma fonte de dados com os campos Nome, Email e Idade (Dataverse, SharePoint ou Excel).
  • Noções básicas de Power Fx: as fórmulas escrevem-se nas propriedades dos controlos.
  • Uma Canvas App em branco, formato tablet ou telemóvel.

Passo 1: Adicionar o formulário e ligar a fonte de dados

Na Canvas App, escolhe Insert > Edit form. No painel da direita, define a fonte de dados e os campos a mostrar. Depois, configura as propriedades principais do formulário:

// Propriedade DataSource do Form1
Contactos

// Propriedade DefaultMode do Form1 (novo registo)
FormMode.New

Neste momento o formulário já grava, mas aceita qualquer coisa. É isso que vamos corrigir.

Passo 2: Marcar campos obrigatórios

Seleciona o DataCard do campo Nome e define a propriedade Required como true. O Power Apps passa a marcar o campo com um asterisco e a considerá-lo na validação interna. Repete para o Email.

// Propriedade Required do DataCard_Nome
true

Esta é a validação mais barata que existe: não escreves lógica nenhuma e já ganhas a propriedade Form1.Valid, que fica false enquanto houver um campo obrigatório vazio.

Passo 3: Validar o formato do email com IsMatch

Campo obrigatório não chega: "abc" é texto preenchido, mas não é um email. A função IsMatch compara o texto com um padrão. O Power Fx já traz o padrão Match.Email. Adiciona um Label dentro do DataCard do Email e escreve na propriedade Text:

If(
    IsBlank( DataCardValue_Email.Text ),
    "O email é obrigatório.",
    Not( IsMatch( DataCardValue_Email.Text, Match.Email ) ),
    "Formato de email inválido. Exemplo: nome@empresa.pt",
    ""
)

Um If com vários pares condição/resultado funciona como um switch: devolve a primeira mensagem cuja condição é verdadeira e uma string vazia se estiver tudo bem. Define a propriedade Color do Label como Color.Red.

Passo 4: Validar um intervalo numérico

Para a Idade queremos apenas números entre 18 e 120. Cria outro Label de erro com esta fórmula:

If(
    IsBlank( DataCardValue_Idade.Text ),
    "A idade é obrigatória.",
    Not( IsNumeric( Value( DataCardValue_Idade.Text ) ) ),
    "A idade tem de ser um número.",
    Or(
        Value( DataCardValue_Idade.Text ) < 18,
        Value( DataCardValue_Idade.Text ) > 120
    ),
    "A idade tem de estar entre 18 e 120.",
    ""
)

Repara em Value(): o texto de uma caixa é sempre string, e comparar string com número dá erro. Converter primeiro é o passo que a maioria das pessoas esquece.

Passo 5: Bloquear o botão Guardar

A melhor validação é a que não deixa o utilizador errar. Na propriedade DisplayMode do botão Guardar, combina a validação nativa do formulário com as regras personalizadas:

If(
    And(
        Form1.Valid,
        IsMatch( DataCardValue_Email.Text, Match.Email ),
        Value( DataCardValue_Idade.Text ) >= 18,
        Value( DataCardValue_Idade.Text ) <= 120
    ),
    DisplayMode.Edit,
    DisplayMode.Disabled
)

Passo 6: Guardar e dar feedback

No OnSelect do botão chama SubmitForm. O feedback vive nas propriedades do próprio formulário, que sabem se a gravação correu bem:

// OnSelect do botão Guardar
SubmitForm( Form1 )

// OnSuccess do Form1
Notify( "Contacto guardado com sucesso.", NotificationType.Success );
ResetForm( Form1 )

// OnFailure do Form1
Notify( "Não foi possível guardar: " & Form1.Error, NotificationType.Error )

O OnFailure apanha o erro que vem da fonte de dados (permissões, campo duplicado, coluna obrigatória do lado do servidor). Sem ele, uma gravação falhada é silenciosa.

Verificar o resultado

Carrega em F5 para pré-visualizar a app e testa três cenários:

  1. Formulário vazio: o botão Guardar aparece cinzento e não reage.
  2. Email "abc" e idade 12: surgem as mensagens vermelhas e o botão continua bloqueado.
  3. Dados válidos: o botão fica ativo, a gravação acontece e aparece a notificação verde.

Confirma ainda o registo na fonte de dados. Se o botão nunca ativar, verifica se os nomes dos controlos na fórmula (DataCardValue_Email, por exemplo) correspondem aos nomes reais na árvore de controlos — é a causa de erro mais comum.

Conclusão

Com Required, IsMatch, Form1.Valid e um botão condicional tens uma validação completa sem uma única linha de código fora do Power Fx. O passo seguinte natural é mover as regras de negócio mais pesadas para o Dataverse (colunas obrigatórias e business rules), para que fiquem garantidas mesmo quando os dados entram por outro canal. Qual das tuas validações atuais sobreviveria se alguém escrevesse na tabela sem passar pela app?