Solucionar problemas comuns com várias tabelas
Este artigo ajuda você a solucionar problemas comuns em várias tabelas, como oportunidade, cotação, pedido ou fatura no Microsoft Dynamics 365 Sales.
Problema 1 - No Formulário de Contexto pode aparecer no seletor de formulários
O Formulário em contexto é usado para exibir e personalizar o painel lateral no gerenciador de negócios e na nova interface para contatos, oportunidades, leads e contas.
Causa
Se o seu ambiente tiver alguma personalização que defina o formActivationState como Ativo para essas tabelas, o Formulário de Contexto aparecerá na lista suspensa do seletor de formulários e permitirá que os usuários selecionem esse formulário para exibir os detalhes do registro.
Solução
Se a aparência do Formulário em contexto levar a confusão, você poderá desativar o Formulário em contexto, conforme mostrado na captura de tela a seguir.
Problema 2 - Erro ou comportamento inesperado ao trabalhar em tabelas
Sintomas
Ao trabalhar em tabelas (como oportunidades, cotação, pedido, fatura, cotação de produto e produto do pedido), você observa um comportamento inesperado ou um erro no Dynamics 365 for Sales. A seguir estão alguns dos erros que você pode encontrar ao trabalhar em oportunidades e eles podem se aplicar a outras tabelas:
- "O valor estendido está errado após a revisão da cotação" - esse erro pode ocorrer devido a um plug-in personalizado.
- "Erro ao salvar a oportunidade" - esse erro pode ocorrer devido ao JavaScript personalizado.
- "Erro ao fechar oportunidade" – esse erro pode ocorrer devido a um fluxo de trabalho personalizado.
Causa
Esses problemas podem ocorrer devido à personalização inadequada do aplicativo.
Solução
Você deve verificar as personalizações inadequadas e resolvê-las. Execute os seguintes métodos de verificação para identificar qual personalização está causando o problema e, em seguida, resolva:
- Desativar um plug-in personalizado
- Desativar JavaScript personalizado
- Desativar um processo de fluxo de trabalho personalizado
Desativar um plug-in personalizado
Vá para Configurações>Personalizações>Personalizar o Sistema.
Selecione Etapas de Processamento de Mensagens do SDK.
Uma lista de etapas de processamento de mensagens do SDK disponíveis é exibida.
Selecione o ícone Filtro , selecione a coluna Código do Tipo de Objeto Primário (Filtro de Mensagem do SDK) e selecione a tabela para a qual o erro está ocorrendo.
Selecione as etapas de processamento de mensagens do SDK provenientes das soluções de sua propriedade.
Observação
Para visualizar as etapas de processamento de mensagens personalizadas do SDK:
Vá para Configurações>Soluções e abra a solução.
Selecione Etapas de processamento de mensagens do SDK. Verifique se os valores estão selecionados da seguinte maneira: Tipo de Componente para Etapa de Processamento de Mensagens do SDK e Exibir para Todos.
Selecione Desativar.
Publicar as personalizações.
Verifique o problema e, se ele não ocorrer, o problema está nas etapas de processamento de mensagens personalizadas do SDK. Resolva o problema.
Observação
Se o problema ocorrer, ative as etapas de processamento de mensagens do SDK que você desativou agora e tente desativar o JavaScript personalizado ou desativar um processo de fluxo de trabalho personalizado.
Desativar JavaScript personalizado
Abra o editor de formulários da tabela na qual o erro está ocorrendo. Neste exemplo, estamos selecionando a tabela como Oportunidades e o formulário de solução padrão.
Selecione Propriedades do formulário no editor de formulários.
A caixa de diálogo Propriedades do formulário é aberta.
Na guia Eventos , selecione o controle OnLoad na lista suspensa Eventos .
Escolha os arquivos JavaScript personalizados provenientes da solução de sua propriedade.
Observação
Para visualizar seu JavaScript personalizado:
- Vá para Configurações>Soluções e abra a solução.
- Selecione WebResources. Verifique se os valores estão selecionados como: Tipo de componente para WebResources e Exibir para todos.
- Selecione o ícone Filtro para ativar as opções de filtro para colunas. Selecione Tipo e defina o filtro como Script (JScript).
Selecione Editar. Neste exemplo, selecionamos o arquivo JavaScript personalizado eg_opportunity editar.
Desmarque a opção Habilitado e selecione OK.
Publicar as personalizações.
Verifique o problema e, se ele não ocorrer, o problema está no JavaScript personalizado. Resolva o problema.
Observação
Se o problema ocorrer, ative o JavaScript que você desativou agora e tente Desativar um plug-in personalizado ou Desativar um processo de fluxo de trabalho personalizado.
Desativar um processo de fluxo de trabalho personalizado
Vá para Configurações>Personalizações>Personalizar o Sistema.
Selecione Processos. Esses processos incluem Fluxo de trabalho, Fluxo do processo de negócios e Regra de negócios.
Uma lista de processos disponíveis é exibida.
Selecione o ícone Filtro , selecione a coluna Entidade Primária e, em seguida, selecione a tabela para a qual o erro está ocorrendo.
Escolha os processos que vêm das soluções de sua propriedade.
Observação
Para visualizar seus processos personalizados:
- Vá para Configurações>Soluções e abra a solução.
- Selecione Processos. Verifique se os valores estão selecionados como: Tipo de componente para processos e Exibir para todos.
Selecione Desativar.
Publicar as personalizações.
Verifique o problema e, se ele não ocorrer, o problema está nos processos personalizados. Resolva o problema.
Observação
Se o problema ocorrer, ative os processos que você desativou agora e tente desativar um plug-in personalizado ou desativar o JavaScript personalizado.
Problema 3 - Tratamento de plug-in personalizado usando uma variável compartilhada
Sintomas
- Criar e atualizar operações em tabelas de Oportunidade, Cotação, Pedido e Fatura acionam atualizações em suas tabelas pai.
- A recuperação de detalhes sobre as tabelas Oportunidade, Cotação, Pedido e Fatura aciona internamente o serviço de Cálculo de Preço, que subsequentemente aciona plug-ins personalizados criados pelos clientes.
Solução
Os plug-ins personalizados executam operações de criação, atualização e salvamento nas tabelas Oportunidade, Cotação, Pedido e Fatura. As operações de criação e atualização nessas tabelas acionam internamente o serviço de Cálculo de Preço, que atualiza os campos ou atributos relacionados ao preço associados de suas tabelas pai.
Você pode identificar ou diferenciar quaisquer atualizações nas tabelas de Oportunidade, Cotação, Pedido ou Fatura ou nas tabelas pai de Oportunidade, Cotação, Pedido ou Fatura usando o serviço interno de Cálculo de Preço ou usando seu próprio plug-in personalizado. A variável InternalSystemPriceCalculationEvent
compartilhada booleana , que pode ser acessada por meio IPluginExecutionContext
de , está disponível no código do plug-in. Qualquer evento de criação ou atualização processado usando o serviço de Cálculo de Preço definirá o valor da variável InternalSystemPriceCalculationEvent
como true
. O valor padrão de InternalSystemPriceCalculationEvent
é false
. Você pode acessar essa variável a partir do código de plug-in personalizado para controlar o fluxo da lógica de negócios existente.
Observação
Para executar operações de plug-in personalizadas usando uma variável compartilhada, certifique-se de que o serviço de Cálculo de Preço pronto para uso esteja desabilitado.
Código de exemplo
public void Execute(IServiceProvider serviceProvider)
{
// Obtain the tracing service
ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
// Obtain the execution context from the service provider.
IPluginExecutionContext executionContext = (IPluginExecutionContext)
serviceProvider.GetService(typeof(IPluginExecutionContext))
bool isInternalSystemPriceCalculationEvent = false;
//Check existence of shared variable and fetch the value from executionContext
if (executionContext.ParentContext != null && executionContext.ParentContext.SharedVariables.ContainsKey("InternalSystemPriceCalculationEvent"))
{
isInternalSystemPriceCalculationEvent = (bool)executionContext.ParentContext.SharedVariables["InternalSystemPriceCalculationEvent"];
}
if (isInternalSystemPriceCalculationEvent)
{
//TO DO - Add or skip custom business logic
}
}