Compartir a través de


Administrar las excepciones en su código

 

Publicado: noviembre de 2016

Se aplica a: Dynamics CRM 2015

Existe un número de excepciones que se pueden obtener de una llamada de método de servicio web Microsoft Dynamics 365. El diseño de su aplicación debe respetar y manejar de manera adecuada estas excepciones. En Microsoft Dynamics CRM SDK, todas las llamadas al método de servicio web usan un canal de comunicaciones al servidor basado en la tecnología Windows Communication Foundation (WCF). En términos de WCF, las excepciones obtenidas del canal reciben el nombre de errores.

En este tema

Excepciones y errores comunes

Errores personalizados de reglas de negocio

Información adicional acerca de excepciones

Excepciones y errores comunes

El siguiente código se usa en la mayoría de muestras de Microsoft Dynamics CRM SDK. Resalta los errores y las excepciones comunes que debe manejar el diseño de su aplicación.


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");
        }
    }
}

Nota

Si está accediendo al servicio web de detección, su código deberá obtener DiscoveryServiceFault en lugar del fallo OrganizationServiceFault mostrado anteriormente.

Además de estas excepciones y errores, el código debe administrar las siguientes excepciones:

Al conectarse a Microsoft Dynamics CRM Online, es posible que se muestre una excepción SecurityAccessDeniedException si utiliza un Cuenta de Microsoft válido y su cuenta no está asociada con ninguna organización Microsoft Dynamics CRM Online. Se puede mostrar una MessageSecurityException si su Cuenta de Microsoft no es válido o se produjo un error de autenticación.

Errores personalizados de reglas de negocio

Con Microsoft Dynamics CRM 2015 y Microsoft Dynamics CRM Online, los personalizadores pueden crear reglas de negocio que se evalúan en el servidor. Los personalizadores pueden lanzar mensajes de error según las condiciones fijadas en la regla de negocio. Los programadores deben asegurarse de incluir un control de errores sólido en el código para obtener y resolver estas excepciones.

Lo siguiente es un ejemplo del registro de seguimiento producido cuando uno de estos errores se devuelve desde una regla de negocio llamada "Name of Entity Scope Business Rule returning Error" y el mensaje de error es "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>

Más información:TechNet: Crear y editar reglas de negocio.

Información adicional acerca de excepciones

Cuando se genera una excepción no detectada que contiene información confidencial que el usuario no tiene permiso para ver, la información confidencial de la excepción se oculta al usuario y se proporciona un número de referencia. Este número de referencia hace referencia a la entrada del registro de evento de servidor relacionado y a la entrada de seguimiento del servidor. El administrador del sistema puede buscar estas entradas y buscar más información sobre la excepción.

Ver también

Solución de problemas y control de errores
Sugerencias para la solución de problemas
Web service error codes
Administrar las excepciones en complementos
Centro para desarrolladores .NET Framework

© 2017 Microsoft. Todos los derechos reservados. Copyright