Depurar aplicativos de tela usando o Monitor Ao Vivo e o Rastreamento

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.
  • TraceSeverity ajuda 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:

  1. Adicione um botão nomeado btnDebugSnapshot e que tenha a propriedade Visible definida como Param("debug") = "true".

    Para obter mais informações sobre como passar parâmetros, consulte a função Param.

  2. In OnSelect, chame o Trace e inclua um registro instantâneo.

  3. 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.

  1. Reproduza o problema com o Live Monitor aberto no Studio ou em uma sessão publicada.
  2. Adicione chamadas de rastreamento em fases-chave (início, pontos de decisão, fim, manipuladores de erros).
  3. Use parâmetros de cadeia de caracteres de consulta (Param) para marcar o ambiente ou mostrar controles de depuração.
  4. Comparar rastreamentos entre usuários ou ambientes. Procure por diferentes indicadores ou contagens.
  5. Correlacionar eventos de rastreamento com eventos de rede (limitação, erros, chamadas extras).
  6. 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

  1. Abra o aplicativo no Power Apps Studio.
  2. Adicione chamadas de rastreamento na OnSelect propriedade do botão enviar.
  3. Salve e publique o aplicativo.
  4. Abra o monitor em tempo real para o aplicativo publicado.
  5. 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.
  6. Abra uma nova instância do Live Monitor e conecte o Usuário B da mesma maneira.
  7. 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

  1. Adicione um OnVisible trace na tela afetada:

    Trace(
        "Debug: OnVisible on " & App.ActiveScreen.Name,
        TraceSeverity.Information,
        {
            recordId: varSelectedProduct.Id,
            hasDiscount: varSelectedProduct.HasDiscount,
            relatedOrders: CountIf(Orders, ProductId = varSelectedProduct.Id)
        }
    );
    
  2. Implante o aplicativo com os novos rastreamentos na produção.

  3. 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 getRows eventos para Produtos em ambientes. Um retorna zero resultados ou códigos de erro? Um 404 código significa que a tabela está ausente, 403 significa que o acesso é negado e 429 significa 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 relatedOrders ou hasDiscount?

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.