Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Resumo
Este artigo explica como usar o Live Monitor junto com a função Trace para diagnosticar problemas em aplicativos de tela do Microsoft Power Apps. Essa abordagem ajuda você a solucionar problemas que ocorrem apenas para determinados usuários ou em ambientes específicos. O monitor ao vivo mostra eventos em tempo real, como chamadas de rede, operações de dados, erros e detalhes de desempenho. A função Trace permite adicionar registros de diagnóstico personalizados para capturar valores de fórmulas de comportamento em momentos-chave.
Observação
O monitor dinâmico não é uma opção prática em todos os cenários, como formulários SharePoint, inserções de portal personalizadas ou problemas que ocorrem apenas intermitentemente. Nesses casos, consulte Aplicativos de tela de depuração sem Monitor Dinâmico para obter abordagens alternativas.
Pré-requisitos
Este artigo baseia-se na depuração de aplicativos de tela com monitor dinâmico e solução de problemas colaborativa usando o Live Monitor. Se você não estiver familiarizado com o Live Monitor, examine esses artigos antes de continuar.
Combinar monitor ao vivo e rastreamento
O monitor ao vivo mostra a atividade no nível da plataforma: operações de dados (getRows, createRow, ), patchavaliações de controle, erros como os códigos 404 de status HTTP ou 429, indicadores de tempo e delegação .
Ao adicionar chamadas de rastreamento em suas fórmulas de comportamento (OnSelect, OnVisible, OnStart), você captura o contexto como:
- O usuário que está executando o aplicativo
- O ambiente atual
- A tela ativa
- Contagens de entidades (linhas nas coleções, registros relacionados)
- Indicadores de negócios (status VIP, elegibilidade para desconto)
- Tempo decorrido nas operações
- Qualquer outra informação que ajude você a entender o comportamento do aplicativo
Juntos, Live Monitor e Trace respondem tanto "o que aconteceu" quanto "por quê".
Exibir dados fluindo pela rede
O monitor ao vivo mostra cada evento de operação de dados fornecendo:
- Tipo de operação (
getRows,createRow, ,patch,removeRow) - Fonte de dados (nome do conector ou tabela do Dataverse )
- Tempo (início, término, duração)
- Resultado (código de status de êxito ou erro)
- Dicas de delegação (operações não delegáveis acionam o processamento no lado do cliente)
Para exibir os detalhes, selecione um evento. Para entender por que a operação ocorreu, correlacione os eventos com registros de rastreamento próximos. Por exemplo, um aumento nas getRows chamadas após uma operação de rastreamento que inclui a phase: "ApplyFilters" propriedade pode indicar uma expressão de filtro ineficiente.
Dica
Se você vir HTTP 429 (limitação), examine os eventos anteriores para verificar se um loop ou uma avaliação repetida disparou operações excessivas. Otimize fórmulas ou use coleções para armazenar em cache dados e reduzir chamadas de rede.
Usar o Rastreamento com eficiência
A função Trace grava um registro estruturado no Live Monitor.
Principais recursos:
- Funciona apenas em propriedades de comportamento (
OnSelect, ,OnChange,OnVisible).OnStart - Aceita uma mensagem de texto e uma carga de registro opcional para detalhes extras.
-
TraceSeverityajuda a filtrar eventos (Informações, Aviso, Erro). Use "Erro" com moderação. - Tem efeito de desempenho mínimo quando usado adequadamente. Remova ou proteja chamadas de rastreamento verbosas antes de executar uma implantação ampla.
Rastrear valores de propriedade de dados usando botões de depuração
Como você não pode colocar Rastreamento em propriedades de dados como a propriedade de Text um rótulo, use botões de depuração temporários para capturar esses valores.
Para criar um botão de depuração:
Adicione um botão nomeado
btnDebugSnapshote que tenha a propriedade Visible definida comoParam("debug") = "true".Para obter mais informações sobre como passar parâmetros, consulte a função Param.
In
OnSelect, chame o Trace e inclua um registro instantâneo.Ao testar, adicione
&debug=trueà URL do aplicativo para mostrar o botão.
Dica
Rastreie os valores de entrada que você usa para calcular uma propriedade de dados. Esses valores geralmente revelam por que o resultado não é o que você espera.
O exemplo a seguir mostra o visível e OnSelect as fórmulas para um botão de instantâneo de depuração.
// Visible property: Param("debug") = "true"
// OnSelect:
Trace(
"Debug: Label value: " & Label1.Text,
TraceSeverity.Information,
{
kind: "DataSnapshot",
user: User().Email,
customerCount: CountRows(Customers),
productCount: CountRows(Products),
maxPrice: Max(Products, Price),
selectedProductId: If(!IsBlank(galProducts.Selected), galProducts.Selected.ProductId)
}
);
Observação
Proteja os controles de depuração usando parâmetros de cadeia de caracteres de consulta ou verificações de função para que os usuários finais não os vejam. Remova esses controles antes de finalizar o aplicativo.
Lista de verificação de depuração
Utilize esta lista de verificação ao solucionar problemas do aplicativo Canvas.
- Reproduza o problema com o Live Monitor aberto no Studio ou em uma sessão publicada.
- Adicione chamadas de rastreamento em fases-chave (início, pontos de decisão, fim, manipuladores de erros).
- Use parâmetros de cadeia de caracteres de consulta (
Param) para marcar o ambiente ou mostrar controles de depuração. - Comparar rastreamentos entre usuários ou ambientes. Procure por diferentes indicadores ou contagens.
- Correlacionar eventos de rastreamento com eventos de rede (limitação, erros, chamadas extras).
- Remova ou proteja chamadas de rastreamento verbosas antes de executar uma implantação ampla.
Cenários de exemplo
O aplicativo funciona para um usuário, mas não para outro
O usuário A envia pedidos com êxito, mas o usuário B vê falhas e comportamentos diferentes da interface do usuário, como uma caixa de seleção de desconto desabilitada. Você suspeita que os dados subjacentes diferem entre suas contas.
Goal
Capture o que o aplicativo vê sobre cada usuário, incluindo email, funções, seleção do cliente e qualificação de desconto. Em seguida, compare-o com as operações de dados no Live Monitor.
Steps
- Abra o aplicativo no Power Apps Studio.
- Adicione chamadas de rastreamento na
OnSelectpropriedade do botão enviar. - Salve e publique o aplicativo.
- Abra o monitor em tempo real para o aplicativo publicado.
- Selecione Conectar usuário para convidar o usuário A. Enquanto o Usuário A navega pelo aplicativo, você vê tanto os eventos internos quanto as chamadas de rastreamento personalizadas.
- Abra uma nova instância do Live Monitor e conecte o Usuário B da mesma maneira.
- Compare os valores para encontrar a diferença que causa o problema.
Exemplo de fórmula OnSelect junto com Trace
// Emit pre-submit context
Trace(
"Debug: Before Submit",
TraceSeverity.Information,
{
user: User().Email,
customerId: ddCustomer.Selected.Id,
cartCount: CountRows(colCart),
orderCountForCustomer: CountIf(Orders, Customer = ddCustomer.Selected),
isVIP: ddCustomer.Selected.'VIP Flag',
env: Param("env"),
screen: App.ActiveScreen.Name
}
);
// Perform data operations (simplified)
ForAll(colCart,
Patch(Orders, Defaults(Orders), {
Customer: ddCustomer.Selected,
Product: ThisRecord.Product,
Quantity: ThisRecord.Quantity
})
);
// Post-submit trace
Trace(
"Debug: After Submit",
TraceSeverity.Information,
{
orderCountForCustomer: CountIf(Orders, Customer = ddCustomer.Selected)
}
);
Analisar os resultados
No Monitor ao Vivo, filtre por Eventos de Rastreio, nome do botão ou pesquise por "Depurar:" nos dados do evento. Comparar o Usuário A com o Usuário B:
- Eles têm valores diferentes
isVIP? Essa diferença pode alterar os cálculos de desconto. - As contagens de carrinhos são idênticas? Caso contrário, a lógica upstream será diferente.
- Os rastros de erro estão presentes apenas para o Usuário B? Expanda o evento para inspecionar os detalhes do erro.
Correlacionar eventos de rastreamento com operações adjacentes getRows ou patch. Se o usuário B disparar chamadas de dados extras, como um filtro não confiável que força várias solicitações de rede, você as verá na tabela de eventos.
O aplicativo funciona em um ambiente, mas não em outro
Seu aplicativo funciona corretamente em Teste , mas falha na Produção. Por exemplo, uma galeria não carrega itens e o envio é lento. Embora o aplicativo seja o mesmo, os dados em cada ambiente podem ser diferentes. Tabelas ausentes, valores de coluna diferentes, conjuntos de dados maiores que disparam limites de delegação ou diferenças de permissão podem fazer com que o aplicativo se comporte de forma diferente.
Goal
Reúna metadados e contagens específicos do ambiente e compare os códigos de sequência e status das operações de dados entre ambientes. Neste exemplo, o aplicativo tem uma tela que inclui um formulário. Esse formulário contém um produto selecionado em uma galeria e que pode ser atualizado. A atualização funciona em Teste , mas falha na Produção.
Steps
Adicione um
OnVisibletrace na tela afetada:Trace( "Debug: OnVisible on " & App.ActiveScreen.Name, TraceSeverity.Information, { recordId: varSelectedProduct.Id, hasDiscount: varSelectedProduct.HasDiscount, relatedOrders: CountIf(Orders, ProductId = varSelectedProduct.Id) } );Implante o aplicativo com os novos rastreamentos na produção.
Abra o monitor ao vivo em Teste e, em seguida, em Produção. Se necessário, exporte os logs.
Analisar os resultados
Na lista de eventos:
- Comparar
getRowseventos para Produtos em ambientes. Um retorna zero resultados ou códigos de erro? Um404código significa que a tabela está ausente,403significa que o acesso é negado e429significa que as solicitações são limitadas. - Procure chamadas repetidas
getRows. Essas chamadas podem indicar uma fórmula não delegável. - Compare os valores do Trace. Os produtos têm valores diferentes para
relatedOrdersouhasDiscount?
Se você encontrar uma diferença, adicione mais chamadas de rastreamento nas quais a variável está definida e examine como as chamadas são preenchidas.
Se você vir erros de rede como 4xx respostas, verifique se tabelas, fluxos e conectores estão configurados corretamente em ambos os ambientes.