Power Platform

Controle de anexos no Power Apps Canvas: guia do preview

Luiz Antonio Sgargeta
- Sócio fundador e CEO da Trinapse, IA aplicada, Microsoft 365 e Power Platform
· 11 min de leitura
Controle de anexos no Canvas, passo a passo

O Canvas ganhou, em preview público, um controle de anexos moderno com upload por arrastar e soltar, filtro de tipos de arquivo, validação e eventos disparados ao adicionar ou remover um arquivo. É a base para uma tela de recebimento de comprovantes e contratos que recusa o formato errado na entrada e registra cada movimento em um fluxo do Power Automate. Ao final deste tutorial, você terá essa tela funcionando em um ambiente de teste, com a validação em duas camadas e o registro de cada arquivo adicionado ou removido.

Um aviso antes de começar: o recurso está em preview, não em produção. Nome de propriedade, comportamento e disponibilidade podem mudar antes da disponibilidade geral. O tutorial foi desenhado em torno disso.

O que muda por estar em preview

Recursos em preview não têm o compromisso de suporte de um recurso em disponibilidade geral e podem ser alterados ou retirados. Para um controle de anexos isso pesa mais do que para um controle visual, porque ele toca em documento de cliente, comprovante e contrato. Um comportamento que mude entre builds pode deixar o app aceitando o que não devia, ou recusando o que devia aceitar.

Por isso, a ordem dos passos abaixo começa pelo isolamento do teste, e não pelo controle. Também há uma limitação de honestidade técnica: os nomes exatos das propriedades de arquivo e de evento do controle moderno ainda variam entre builds do preview. Onde o nome exato for incerto, o tutorial usa um identificador de substituição que força erro de compilação, para que nada passe despercebido. Você confirma o nome real no IntelliSense do seu studio.

Pré-requisitos para usar o controle de anexos Power Apps em preview

  • Licença: Power Apps (plano por usuário ou por aplicativo) ou o plano de desenvolvedor, para o ambiente de teste. O fluxo precisa de Power Automate; se gravar em SharePoint, o conector é padrão. Se gravar em Dataverse, o conector é premium e exige licença correspondente para quem executa.
  • Papéis: Administrador do Power Platform para criar o ambiente sandbox (ou permissão delegada para isso no tenant), e a função Environment Maker nesse ambiente para criar o app e o fluxo.
  • Ambiente: um ambiente do tipo Sandbox, separado do que hospeda o app em produção.
  • Destino do registro: uma lista SharePoint de teste chamada Registro de Recebimentos, com as colunas Title (nome do arquivo), TipoDocumento (texto), TamanhoKB (número), IdProcesso (texto), Acao (texto) e Usuario (texto).
  • Disponibilidade: recursos em preview chegam de forma gradual, por região e por tenant. Se o controle não aparecer no seu studio, pode não ter chegado ainda, e não é erro de configuração.

Passo a passo

São seis etapas. O desenho abaixo mostra a sequência e destaca a primeira, que é a que mais evita prejuízo.

Seis passos: ambiente sandbox, controles modernos, inserir controle, tipos aceitos, eventos e fluxo com teste.

O passo 1 vem antes de qualquer configuração: ligar o preview em um app de produção é a armadilha que o restante do tutorial evita.

Passo 1: isole o teste antes de ligar qualquer coisa

Este é o passo que a pauta mais exige respeitar: não ative o controle em um app de produção. A chave de preview do studio é por aplicativo, então uma cópia do app recebe a chave sem afetar o original. Mas a cópia precisa viver em um ambiente de teste, porque quem abre um app publicado em produção usa a versão publicada, com o que ela contiver.

  1. Acesse o Power Platform admin center e vá em Ambientes > Novo. Escolha o tipo Sandbox e dê um nome que não se confunda com o de produção, por exemplo "Homologacao-Recebimentos".
  2. Em make.powerapps.com, selecione esse ambiente no seletor no canto superior direito.
  3. Se já existe um app em produção que vai receber o controle, leve-o para o sandbox: exporte a solução que o contém e importe no ambiente de teste, ou use Salvar como para uma cópia nomeada de forma inequívoca. Para um app novo, crie-o direto no sandbox.

O racional é simples. Se o preview mudar de comportamento, o prejuízo fica no ambiente que existe para isso.

Passo 2: habilite os controles modernos no app

Abra o app de teste no Power Apps Studio e entre em Configurações > Atualizações. Procure, nas guias de recursos em preview (a organização das guias muda entre versões do studio), a opção de controles modernos e temas e, se houver uma opção específica para o controle de anexos, ative-a também. Salve e, se o studio pedir, recarregue o app.

Se o controle não aparecer em seguida, volte à ressalva dos pré-requisitos: o recurso pode ainda não estar liberado no seu tenant.

Passo 3: insira o controle e prepare a tela

Crie uma tela chamada scrRecebimento. Em Inserir, procure pelo controle de anexos na seção de controles modernos. Não confunda com o controle clássico Attachments, que vive dentro do cartão de dados de um formulário e tem outra lógica de propriedades. Renomeie o controle novo para ctrlAnexos.

Adicione também:

  • Uma lista suspensa ddTipoDocumento com os valores "Comprovante" e "Contrato".
  • Um botão btnEnviar.
  • Uma variável varIdProcesso, preenchida com o identificador do processo ao qual os documentos pertencem.

No OnVisible da tela, crie uma coleção vazia que guardará apenas os arquivos aprovados na validação:

// OnVisible da scrRecebimento
// Cria o esquema da coleção e a esvazia em seguida
ClearCollect(colValidos; {nome: ""; kb: 0});;
Clear(colValidos)

As fórmulas deste tutorial usam o separador do Power Fx em português do Brasil: ponto e vírgula entre argumentos e ;; para encadear ações. Se o seu studio estiver configurado em inglês, troque ; por , e ;; por ;.

Passo 4: configure o filtro de tipos aceitos

Selecione ctrlAnexos e, no painel de propriedades, localize o campo de tipos de arquivo aceitos. Preencha com as extensões permitidas. O formato exato (com ou sem ponto, separador) aparece na dica do próprio campo no seu build; siga-o. Uma referência de política para esta tela:

Tipo de documento

Extensões aceitas

Tamanho máximo

Comprovante

pdf, png, jpg, jpeg

5 MB

Contrato

pdf

20 MB

Se a propriedade aceitar fórmula (a maioria das propriedades de controle no Canvas aceita), você pode fazer o filtro depender do tipo escolhido na lista suspensa, em vez de fixar um valor:

// Propriedade de tipos aceitos do ctrlAnexos
// Ajuste o formato do texto ao que a dica do campo indicar
If(
    ddTipoDocumento.Selected.Value = "Contrato";
    ".pdf";
    ".pdf,.png,.jpg,.jpeg"
)

Dois cuidados que não dependem do build. Primeiro, teste o filtro pelos dois caminhos de entrada, o seletor de arquivos e o arrastar e soltar. Não presuma que o comportamento seja idêntico. Segundo, o filtro de extensão é uma conveniência de interface, não uma garantia de segurança: um arquivo executável renomeado para .pdf passa por ele. Por isso o passo seguinte repete a validação na fórmula, e o fluxo do passo 6 deve conferir também o que chegar a ele.

Passo 5: programe os eventos de adicionar e remover

Na aba Avançado do controle, localize as propriedades de evento correspondentes a adicionar e a remover arquivo. É nelas que a automação se conecta. A fórmula do evento de adicionar valida extensão e tamanho, recusa o que estiver fora da política e, se estiver correto, guarda o arquivo na coleção e avisa o fluxo.

Os identificadores AJUSTAR_NOME e AJUSTAR_TAMANHO abaixo são propositais: representam as propriedades pelas quais o controle expõe o arquivo no seu build. Digite ctrlAnexos. ou use o IntelliSense dentro do evento para encontrar os nomes reais e substitua. Enquanto não o fizer, o studio sinaliza erro, o que impede a publicação de uma fórmula incompleta.

// Evento de adicionar arquivo do ctrlAnexos
Set(varNome; ctrlAnexos.AJUSTAR_NOME);;
// Confirme a unidade do tamanho no seu build (bytes é o caso comum)
Set(varTamanhoKB; ctrlAnexos.AJUSTAR_TAMANHO / 1024);;
Set(varExt; Lower(Last(Split(varNome; ".")).Result));;

If(
    !(varExt in ["pdf"; "png"; "jpg"; "jpeg"]) || varTamanhoKB > 5120;
    Notify(
        "Arquivo recusado: use PDF, PNG ou JPG de até 5 MB.";
        NotificationType.Error
    );
    Collect(colValidos; {nome: varNome; kb: varTamanhoKB});;
    RegistrarAnexo.Run(
        varNome;
        ddTipoDocumento.Selected.Value;
        varTamanhoKB;
        varIdProcesso;
        "adicionado";
        User().Email
    )
)

A coleção colValidos é o que sustenta o envio: só o que passou pela validação entra nela. Para o contrato, ajuste as extensões e o limite de tamanho da condição de acordo com a tabela do passo 4.

O evento de remover mantém a coleção sincronizada e registra a retirada:

// Evento de remover arquivo do ctrlAnexos
Set(varNome; ctrlAnexos.AJUSTAR_NOME_REMOVIDO);;
Remove(colValidos; LookUp(colValidos; nome = varNome));;
RegistrarAnexo.Run(
    varNome;
    ddTipoDocumento.Selected.Value;
    0;
    varIdProcesso;
    "removido";
    User().Email
)

Para impedir envio sem anexo válido, use a coleção na propriedade DisplayMode do botão:

// DisplayMode do btnEnviar
If(
    CountRows(colValidos) = 0;
    DisplayMode.Disabled;
    DisplayMode.Edit
)

A gravação do conteúdo do arquivo em si (biblioteca do SharePoint, coluna de arquivo do Dataverse) é uma etapa separada, ligada ao botão de envio, e depende do destino que você escolheu. Este tutorial cobre a entrada controlada e o registro de cada evento.

Passo 6: crie o fluxo que recebe os eventos

  1. Em make.powerautomate.com, no mesmo ambiente de teste, vá em Criar > Fluxo de nuvem instantâneo e escolha o gatilho Power Apps (V2). Nomeie o fluxo RegistrarAnexo.
  2. No gatilho, adicione cinco entradas, na ordem exata em que o app as envia: nomeArquivo (Texto), tipoDocumento (Texto), tamanhoKB (Número), idProcesso (Texto), acao (Texto), e uma sexta, emailUsuario (Texto).
  3. Adicione a ação SharePoint > Criar item apontando para a lista Registro de Recebimentos, mapeando cada entrada do gatilho para a coluna correspondente.
  4. Salve o fluxo. No Power Apps Studio, abra o painel Power Automate na barra lateral e use Adicionar fluxo para vinculá-lo ao app. Sem esse vínculo, RegistrarAnexo.Run(...) não é reconhecido.

O racional de usar um único fluxo com o parâmetro acao é manter uma trilha única de auditoria, em que cada arquivo aparece com a ação e o horário na mesma lista. Como o fluxo não tem ação de resposta ao Power Apps, o app em geral não espera o resultado para seguir. Isso é desejável aqui, porque a interface não deve travar por causa de um registro de auditoria. Se quiser confirmar a gravação antes de liberar o envio, adicione a resposta e trate o retorno no app.

Como validar que deu certo

Teste no modo de execução do studio e, depois, no player em navegador, com arquivos de amostra e não com documentos reais. Use esta matriz:

Ação de teste

Resultado esperado

Arrastar um PDF de 1 MB

Sem mensagem de erro; arquivo entra em colValidos; botão Enviar habilitado

Arrastar um .exe ou .zip

Notificação de arquivo recusado; nenhum item novo na lista de registro

Escolher o mesmo .exe pelo seletor de arquivos

Mesmo comportamento do arrastar; se diferir, o filtro nativo não cobre os dois caminhos

Arquivo de 8 MB como comprovante

Recusado pelo limite de 5 MB

Remover um arquivo válido

Sai de colValidos; novo item na lista com Acao = "removido"

Executar sem nenhum anexo

Botão Enviar desabilitado

Confirme também no lado do fluxo: em make.powerautomate.com, abra o Histórico de execuções do RegistrarAnexo. Cada arquivo aceito deve gerar uma execução com status Bem-sucedido e, na lista do SharePoint, uma linha com nome, tipo, tamanho, processo, ação e e-mail do usuário. Compare o número de execuções com o número de arquivos que você adicionou e removeu no teste. Se não bater, o evento correspondente não está disparando.

Erros comuns

  • O controle não aparece em Inserir. Causa mais provável: o recurso ainda não foi liberado na região ou no tenant, ou a opção de controles modernos não foi ativada nas Atualizações do app. Confira o passo 2 antes de procurar defeito.
  • "Name isn't valid. 'AJUSTAR_NOME' isn't recognized." (no studio em português, a mensagem aparece traduzida). Esperado: é o identificador de substituição do passo 5. Troque pelo nome real da propriedade mostrado no IntelliSense.
  • "Unexpected characters. Characters are used in the formula in an unexpected way." Quase sempre é o separador errado: vírgula em um studio configurado em português, ou ponto e vírgula em um studio em inglês.
  • "The input body for trigger 'manual' of type 'Request' did not match its schema definition." no histórico do fluxo. O app enviou um valor de tipo diferente do declarado na entrada, por exemplo texto onde o gatilho espera Número. Confira a ordem e os tipos dos parâmetros em RegistrarAnexo.Run.
  • O arquivo recusado continua visível na lista do controle. O evento dispara depois que o arquivo já foi adicionado, e a notificação não o remove sozinha. Por isso o envio deve ler a coleção colValidos, e nunca a lista bruta do controle.
  • Um arquivo renomeado passa na validação. A checagem é por extensão. Para documentos sensíveis, some a ela uma verificação do lado do servidor no fluxo e, quando houver gravação no SharePoint, o antivírus do próprio serviço (como o Safe Attachments, para quem tem o Microsoft Defender for Office 365).
  • O app em produção quebrou depois de uma atualização do preview. É a consequência direta de ter ativado o controle sem ambiente de homologação. Reverta para a versão publicada anterior pelo histórico do app e refaça o teste no sandbox.

Antes de levar isso a produção

O caminho recomendado é manter o app com o controle só em homologação, documentar os nomes de propriedade que você usou e rever a matriz de testes a cada atualização do studio. Para entrar em produção, espere a disponibilidade geral do controle. Se o negócio não puder esperar, o controle clássico de anexos, em formulário, continua sendo a alternativa suportada para o mesmo cenário.

Quando o desenho estiver estável, vale discutir onde os documentos devem ficar, quem pode lê-los e como o registro dos eventos alimenta a auditoria. Essa é a parte em que a Trinapse costuma apoiar quem leva a digitalização de comprovantes e contratos do protótipo para a operação.

Luiz Antonio Sgargeta
Sócio fundador e CEO da Trinapse, IA aplicada, Microsoft 365 e Power Platform

Luiz Antonio Sgargeta é sócio fundador e CEO da Trinapse, consultoria brasileira de Microsoft 365 com quase duas décadas de operação, acumula mais de 20 anos em desenvolvimento de software e em ambientes corporativos de alta complexidade.

Ver maisVer menos

Trabalha com SharePoint desde o SharePoint Portal Server 2003 e com .NET desde a versão 1.0. Acompanhou a plataforma em todas as suas reinvenções, do portal de documentos on-premises ao SharePoint Online dentro do Microsoft 365, o que dá a ele uma leitura rara sobre o que muda de verdade e o que é apenas nome novo para o mesmo problema.

No início da carreira atuou em uma das maiores operações de e-commerce do país, em sistemas que não toleram degradação de performance nem indisponibilidade, essa origem definiu o critério que ele aplica até hoje: solução boa é a que sustenta volume real, integra com o legado que já existe e não quebra no pico.

Depois disso, passou por praticamente todo tipo de projeto corporativo, de portais e intranets de milhares de usuários a integrações críticas e automação de processos de ponta a ponta, sempre em grandes empresas e em desafios de alta exigência.

A marca do trabalho dele é a tradução entre tecnologia e negócio, levanta a necessidade real por trás do pedido do cliente, questiona o processo antes de automatizá-lo e desenha a solução pelo resultado esperado, não pela ferramenta disponível, é o que permite conversar com a diretoria sobre retorno e com o time técnico sobre arquitetura na mesma reunião.

Hoje lidera a frente comercial e estratégica da Trinapse e conduz a empresa no novo ciclo da inteligência artificial, com foco em agentes de IA e operação de processos assistida por IA para cooperativas de crédito, agronegócio e indústria. Escreve no blog da Trinapse desde 2019, com mais de 450 artigos sobre IA, SharePoint, Power Platform, Modern Workplace e transformação de processos, sempre a partir de projeto entregue e não de teoria.

LinkedIn
Compartilhar:

Precisa aplicar isso na sua empresa? Fale com nossos especialistas.

Falar com um especialista