Manipular exceções no código

 

Publicado: janeiro de 2017

Aplicável a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Existem várias exceções que podem ser retornadas de uma chamada do método do serviço Web do Microsoft Dynamics 365. O design do aplicativo deverá capturar e manipular essas exceções de forma adequada. No SDK do Microsoft Dynamics 365, todas as chamadas do método do serviço Web usam um canal de comunicação com o servidor baseado na tecnologia do WCF (Windows Communication Foundation). Em termos do WCF, as exceções retornadas do canal são chamadas falhas.

Neste tópico

Falhas e exceções comuns

Erros personalizados de regras comerciais

Informações adicionais sobre exceções

Falhas e exceções comuns

O seguinte código é usado na maioria dos exemplos do SDK do Microsoft Dynamics 365. Ele destaca as falhas e exceções comuns que o design do aplicativo deverá manipular.


catch (FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault> ex)
{
    Console.WriteLine("The application terminated with an error.");
    Console.WriteLine("Timestamp: {0}", ex.Detail.Timestamp);
    Console.WriteLine("Code: {0}", ex.Detail.ErrorCode);
    Console.WriteLine("Message: {0}", ex.Detail.Message);
    Console.WriteLine("Inner Fault: {0}",
        null == ex.Detail.InnerFault ? "No Inner Fault" : "Has Inner Fault");
}
catch (System.TimeoutException ex)
{
    Console.WriteLine("The application terminated with an error.");
    Console.WriteLine("Message: {0}", ex.Message);
    Console.WriteLine("Stack Trace: {0}", ex.StackTrace);
    Console.WriteLine("Inner Fault: {0}",
        null == ex.InnerException.Message ? "No Inner Fault" : ex.InnerException.Message);
}
catch (System.Exception ex)
{
    Console.WriteLine("The application terminated with an error.");
    Console.WriteLine(ex.Message);

    // Display the details of the inner exception.
    if (ex.InnerException != null)
    {
        Console.WriteLine(ex.InnerException.Message);

        FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault> fe = ex.InnerException
            as FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>;
        if (fe != null)
        {
            Console.WriteLine("Timestamp: {0}", fe.Detail.Timestamp);
            Console.WriteLine("Code: {0}", fe.Detail.ErrorCode);
            Console.WriteLine("Message: {0}", fe.Detail.Message);
            Console.WriteLine("Trace: {0}", fe.Detail.TraceText);
            Console.WriteLine("Inner Fault: {0}",
                null == fe.Detail.InnerFault ? "No Inner Fault" : "Has Inner Fault");
        }
    }
}

Observação

Se estiver acessando o serviço Web de descoberta, o código deverá capturar DiscoveryServiceFault, em vez da falha OrganizationServiceFault mostrada anteriormente.

Além dessas falhas e exceções, o código deverá manipular as seguintes exceções:

Ao se conectar ao Microsoft Dynamics 365 (online), uma exceção SecurityAccessDeniedException pode ser acionada se você usar um Conta da Microsoft válido e a sua conta não estiver associada a uma organização do Microsoft Dynamics 365 (online). Um MessageSecurityException pode ser lançado se o Conta da Microsoft não é válido ou se houve falha de autenticação.

Erros personalizados de regras comerciais

Com o Microsoft Dynamics 365 e Microsoft Dynamics 365 (online), os personalizadores podem criar regras de negócios que são avaliadas no servidor. Os personalizadores podem lançar mensagens de erro com base nas condições definidas na regra de negócios. Os desenvolvedores devem garantir de incluir um tratamento de erro robusto no código para capturar e lidar com essas exceções.

A seguir está um exemplo do log de rastreamento gerado quando um desses erros é devolvido de uma regra de negócios chamada “Name of Entity Scope Business Rule returning Error" e a mensagem de erro é “custom error message".

Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: custom error messageDetail: 
<OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://schemas.microsoft.com/xrm/2011/Contracts">
  <ErrorCode>-2147220891</ErrorCode>
  <ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic">
    <KeyValuePairOfstringanyType>
      <d2p1:key>OperationStatus</d2p1:key>
      <d2p1:value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:string">0</d2p1:value>
    </KeyValuePairOfstringanyType>
    <KeyValuePairOfstringanyType>
      <d2p1:key>SubErrorCode</d2p1:key>
      <d2p1:value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:string">-2146233088</d2p1:value>
    </KeyValuePairOfstringanyType>
  </ErrorDetails>
  <Message>custom error message</Message>
  <Timestamp>2014-09-04T17:43:16.8197965Z</Timestamp>
  <InnerFault i:nil="true" />
  <TraceText>

[Microsoft.Crm.ObjectModel: Microsoft.Crm.ObjectModel.SyncWorkflowExecutionPlugin]
[cf6a25a9-5a34-e411-80b9-00155dd8c20f: ]
Starting sync workflow 'Name of Entity Scope Business Rule returning Error', Id: c76a25a9-5a34-e411-80b9-00155dd8c20f
Entering ConditionStep1_step: 
Entering SetMessage_step: 
Sync workflow 'Name of Entity Scope Business Rule returning Error' terminated with error 'custom error message'

</TraceText>
</OrganizationServiceFault>

Para obter mais informações:TechNet: Criar e editar regras de negócios.

Informações adicionais sobre exceções

Quando uma exceção não capturada que contém informações confidenciais que o usuário não tem permissão para ver é acionada, as informações confidenciais na exceção são ocultas do usuário e um número de referência é fornecido. Este número de referência refere-se à entrada do log de eventos do servidor e à entrada de rastreamento do servidor relacionados. Um administrador do sistema pode pesquisar essas entradas e encontrar mais informações sobre a exceção.

Confira Também

Solução de problemas e tratamento de erro
Dicas de solução de problemas
Web service error codes
Lidar com exceção nos plug-ins
Centro de Desenvolvedores do .NET Framework

Microsoft Dynamics 365

© 2017 Microsoft. Todos os direitos reservados. Direitos autorais