Como criar um formulário com anexos condicionais em Power Apps / Power Platform
Criar um formulário que peça anexos apenas quando necessário é útil para reduzir dados redundantes e orientar utilizadores. Este tutorial mostra como, em Power Apps / Power Platform, construir um Canvas App que apresenta campos condicionais de ficheiro e guarda os anexos para SharePoint ou Dataverse.
Pré-requisitos
- Conta com acesso a Power Apps (licença com Canvas Apps).
- Uma lista SharePoint ou uma tabela Dataverse para registo (ex.: lista "Registos").
- Um fluxo Power Automate (opcional) para mover anexos ou processar ficheiros maiores.
- Conhecimentos básicos de Canvas Apps: ecrãs, galerias, formulários e colecções.
Passo 1: Criar a fonte de dados (SharePoint ou Dataverse)
Decide onde vais guardar os registos. Exemplo com SharePoint: cria uma lista chamada "Registos" com colunas: Title (Texto), Tipo (Escolha) e Comentários (Multilinha). Para anexos condicionais poderás usar a funcionalidade nativa de anexos da lista ou armazenar ficheiros numa biblioteca separada e guardar o link.
// Exemplo: estrutura mínima da lista SharePoint
Lista: Registos
Colunas: Title (Texto), Tipo (Escolha: Produto, Serviço), Comentarios (Multilinha)
Ativar anexos na lista
Passo 2: Criar o Canvas App e ligar a fonte de dados
Cria um Canvas App em branco (Phone ou Tablet) e adiciona a ligação à lista SharePoint (ou à tabela Dataverse). Insere um EditForm ligado a "Registos" e os campos Title, Tipo e Comentarios.
// No Power Apps Studio
Insert > Forms > Edit Form
DataSource = Registos
Fields = [Title, Tipo, Comentarios]
Passo 3: Adicionar controlo condicional de anexos
Se usares a funcionalidade nativa de anexos do EditForm, podes mostrar/ocultar o controlo Attachments com base no campo Tipo. Alternativamente, usa um controlo de ficheiros personalizado (AddMediaButton ou Attachment control separado) e guarda os ficheiros numa colecção até submeter.
// Exemplo usando AddMediaButton para recolher ficheiros condicionalmente
// Adiciona um AddMediaButton chamado btnAddFile e uma Gallery chamada galFiles
// Colecção para guardar ficheiros temporários
OnAddFile: Collect(colFiles, {Name: Last(AddedMedia).Name, Content: Last(AddedMedia).Value})
// Visibilidade do botão controlada por Tipo
btnAddFile.Visible = (DataCardValue_Tipo.Selected.Value = "Serviço")
Passo 4: Mostrar lista de ficheiros adicionados
Cria uma Gallery simples que mostra os itens de colFiles para permitir remover ou ver o nome do ficheiro antes de submeter.
// Gallery Items
galFiles.Items = colFiles
// Botão Remover no template da Gallery
OnSelect = Remove(colFiles, ThisItem)
Passo 5: Submeter o formulário e guardar anexos
Quando o utilizador submeter o formulário, primeiro guarda o registo em SharePoint/Dataverse. Se usares SharePoint com anexos nativos, podes usar FormMode e SubmitForm; para ficheiros guardados separadamente, cria o item e depois faz upload para a biblioteca e actualiza o link no registo.
// Botão Guardar - lógica simplificada
// 1. Submeter formulário para criar o registo
SubmitForm(frmRegisto)
// 2. Quando o formulário for bem-sucedido, usar OnSuccess para processar ficheiros
// OnSuccess do frmRegisto
If(CountRows(colFiles) > 0,
ForAll(colFiles,
// Exemplo de criar ficheiro em SharePoint numa biblioteca chamada 'Anexos'
// Usa a função Power Apps: Patch com SharePointAttachment não é suportado directamente
// Recomenda-se usar Power Automate para upload; aqui mostramos chamada a um Flow
'FlowUploadFile'.Run(RegisterID, ThisRecord.Name, ThisRecord.Content)
)
);
// Onde RegisterID = frmRegisto.LastSubmit.ID
Passo 6: Criar o Power Automate flow para receber ficheiros
Como o Power Apps não escreve directamente binários para bibliotecas facilmente, cria um Power Automate com trigger "Power Apps" que receba parâmetros: RegisterID, FileName, FileContent (base64). O Flow usa a acção "Create file" em SharePoint e actualiza a lista/registo se necessário.
// Passos essenciais no Flow
Trigger: PowerApps
Action: Create file (SiteAddress, FolderPath, FileName, FileContent) // FileContent em base64
Optional: Update item (Registos) para acrescentar link do ficheiro
Return: success/URL para Power Apps
Verificar o resultado
Testa o cenário: escolhe Tipo = "Serviço" e adiciona ficheiros; escolhe Tipo = "Produto" e verifica que o botão de anexos fica oculto. Submete e confirma que o item foi criado na lista SharePoint e que os ficheiros aparecem na biblioteca com ligação ao registo. Erros comuns: ficheiros não enviados porque o Flow não retorna sucesso, permissões insuficientes, ou base64 mal formatado.
Conclusão
Com este padrão tens um formulário em Power Apps que solicita anexos apenas quando aplicável e os guarda de forma fiável usando Power Automate para upload. Próximos passos: tratar validação de tamanho/tipo de ficheiro, mostrar progresso de upload, e associar metadados dos ficheiros ao registo. Dica: testa sempre o Flow isoladamente com dados de exemplo para depurar problemas de ficheiro.