Na lição anterior você leu dados do Dynamics. Agora você vai escrever. O Patch() é a função central do Power Apps para criar e atualizar registros no Dataverse — uma função, dois comportamentos, infinitas aplicações.
Ao final, o app terá uma tela de criação de novo caso (com campos de título, descrição e prioridade) e um botão na tela de detalhe para atualizar a prioridade do caso — tudo escrevendo direto no Dataverse via Patch().
Patch(
Cases,
Defaults(Cases),
{
title: txtTitulo.Text,
prioritycode: 1,
description: txtDesc.Text
}
)
Patch(
Cases,
LookUp(Cases,
caseid = SelectedCase.caseid),
{
prioritycode: 1,
statuscode: 5
}
)
A diferença entre criar e editar é o segundo parâmetro: Defaults(Cases) cria um registro em branco e preenche os campos especificados. LookUp(Cases, caseid = ...) localiza o registro existente e atualiza apenas os campos especificados — os demais permanecem intocados.
+ New screen → BlankNovoCasoScreenAdicione os componentes:
txtTitulo · Hint: "Título do caso"txtDescricao · Mode: Multiline · Hint: "Descreva o problema"drpPrioridadebtnSalvar · Text: "Salvar Caso"btnCancelar · Text: "Cancelar"
["Alta", "Normal", "Baixa"]Quando o usuário selecionar uma opção, precisamos converter para o código numérico do Dynamics:
Set(varPrioridade, Switch(drpPrioridade.Selected.Value, "Alta", 1, "Normal", 2, "Baixa", 3))Na propriedade OnSelect do btnSalvar:
If(
IsBlank(txtTitulo.Text),
Notify("O título é obrigatório", NotificationType.Error),
Patch(
Cases,
Defaults(Cases),
{
title: txtTitulo.Text,
description: txtDescricao.Text,
prioritycode: varPrioridade,
caseorigincode: 3
}
);
Navigate(ListaScreen, ScreenTransition.UnCover);
Notify("Caso criado com sucesso!", NotificationType.Success)
);. Após o Patch(), Navigate() volta para a lista e Notify() exibe a mensagem de confirmação. As três ações executam em sequência.ResetForm(Form1); Navigate(ListaScreen, ScreenTransition.UnCover)O ResetForm() limpa todos os campos de entrada antes de navegar de volta — sem ele, os campos ficam preenchidos da última vez que o usuário abriu a tela.
"+"Navigate(NovoCasoScreen, ScreenTransition.Cover)Na DetalheScreen (da Lição 25), adicione dois botões:
Patch(
Cases,
LookUp(Cases, caseid = SelectedCase.caseid),
{prioritycode: 1}
);
Notify("Caso escalado para Alta Prioridade", NotificationType.Success);
Back()Patch(
Cases,
LookUp(Cases, caseid = SelectedCase.caseid),
{statecode: 1, statuscode: 5}
);
Notify("Caso resolvido!", NotificationType.Success);
Back()Para capturar erros do Patch() e mostrar mensagem ao usuário:
If(
IsError(Patch(Cases, Defaults(Cases), {title: txtTitulo.Text})),
Notify("Erro ao criar caso: " & First(Errors(Cases)).Message, NotificationType.Error),
Navigate(ListaScreen, ScreenTransition.UnCover)
)IsError() verifica se a última operação gerou erro. Errors(tabela) retorna uma tabela com os erros — First(Errors(Cases)).Message pega a mensagem do primeiro erro. Fundamental para apps em produção onde o Dataverse pode rejeitar o registro por validação.O Power Apps tem dois mecanismos para escrever dados: o Patch() que você acabou de usar e o SubmitForm() que funciona com o componente Edit Form.
Na Lição 27 você vai trabalhar com o componente Edit Form — que usa SubmitForm() e gera automaticamente os campos com base na tabela do Dataverse, acelerando muito a criação de telas de edição.