Processing request execution errors

Version: 10.4

The error handling strategy of the Universal Tracker SDK aims at:

  • Simplifying the creation of alert messages.

  • Providing sufficient information for debugging.

In order to show a concise, informative alert message, you need to know what causes the error. This is why the messages generated by the .NET framework are grouped according to the request processing flow:

  • ProcessUserRequestException – unable to build an HTTP request from the user’s request.

  • LoadDataFromNetworkException – TCP or HTTP protocol physical connection errors.

  • ParserException – unable to handle server response properly.

The SitecoreUTSdkException class is a common base class of all the exceptions.

The recommended way of handling errors is as follows:

RequestResponse
try
{
	var locationEventRequest = UTRequestBuilder.LocationEvent(lat, lon)
                                             .Build(); 

  var response = await session. TrackLocationEventAsync(locationEventRequest );

// Process response
}
catch(ProcessUserRequestException) 
{
// HTTP request construction failed
}
catch(LoadDataFromNetworkException) 
{
// Connection error
}
catch(ParserException) 
{
// Server response is not valid 
}
catch(SitecoreUTSdkException) 
{
// Some Item Universal Tracker API response processing error has occurred.
// This code should not be reached in this example.
}
catch(Exception) 
{
// Some exception has been thrown.
// This code should not be reached in this example.
}

Client application developers can access the original error object in the Exception.InnerException property, and the error stack trace in the Exception.StackTrace property.

RequestResponse
try
{
  var session = this.instanceSettings.GetSession();

  var locationEventRequest = UTRequestBuilder.LocationEvent(lat, lon)
                                             .Build(); 

  var response = await session. TrackLocationEventAsync(locationEventRequest);

// Process response
}

catch(Exception e) 
{
  Debug.WriteLine(e.Message);

  Exception originalError =  e.InnerException;
  Debug.WriteLine(originalError.Message); // access original error
  Debug.WriteLine(originalError.StackTrace);
}

To avoid having redundant code, you should catch only the SitecoreUTSdkException exception and handle it in a separate class using the Type.Equals() method.

RequestResponse
try
{
  var locationEventRequest = UTRequestBuilder.LocationEvent(lat, lon)
                                             .Build(); 

  var response = await session. TrackLocationEventAsync(locationEventRequest);

// Process response
}
catch(SitecoreUTSdkException ex) 
{
  this.MyErrorProcessor.ShowAlertForSitecoreUTSdkError(ex);
}
catch(Exception ex) 
{
  this.MyErrorProcessor.ShowAlertForUnexpectedError(ex);
}
Note

The Universal Tracker SDK does not provide any error classes that show alerts because they may vary depending on the target platform, and may require customization.

Do you have some feedback for us?

If you have suggestions for improving this article,