Exceptions: - DEXJobException: custom exception with formatted error messages * Includes query name, batch ID, SQL query, and detailed error info * Two constructors: with inner exception or reason message * Comprehensive XML documentation Options: - DexJobOptions: hierarchical configuration for DEX job execution * Error handling per stage (MainQuery, CheckQuery, ReCRequest) * Granular error actions (OnExecution, IfNullOrWhiteSpace, OnUnexpectedResult) * Placeholder configuration with regex pattern support * Default BatchId placeholder: #INT#BATCH_ID (case-insensitive) * Fully documented with XML comments
69 lines
3.4 KiB
C#
69 lines
3.4 KiB
C#
using System;
|
|
|
|
namespace ECMJobRunner.Application.Common.Exceptions
|
|
{
|
|
/// <summary>
|
|
/// Exception thrown when a DEX job operation fails
|
|
/// </summary>
|
|
public class DEXJobException : Exception
|
|
{
|
|
/// <summary>
|
|
/// Initializes a new instance with an inner exception
|
|
/// </summary>
|
|
/// <param name="queryName">Name of the query that failed</param>
|
|
/// <param name="batchId">Batch ID associated with the operation</param>
|
|
/// <param name="sqlQuery">SQL query that was executed (nullable)</param>
|
|
/// <param name="innerException">The inner exception that caused the failure</param>
|
|
public DEXJobException(string queryName, string batchId, string? sqlQuery, Exception innerException)
|
|
: base(
|
|
$"[SQL Execution Failure] Query '{queryName}' could not be completed for Batch '{batchId}'." + Environment.NewLine +
|
|
"─────────────────────────────────────────" + Environment.NewLine +
|
|
" Query:" + (sqlQuery is null ? string.Empty : Environment.NewLine + $" {sqlQuery}") + Environment.NewLine + Environment.NewLine +
|
|
" Root Cause:" + Environment.NewLine +
|
|
$" {innerException?.Message}" + Environment.NewLine +
|
|
"─────────────────────────────────────────",
|
|
innerException)
|
|
{
|
|
SqlQuery = sqlQuery;
|
|
BatchId = batchId;
|
|
QueryName = queryName;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance with a reason message
|
|
/// </summary>
|
|
/// <param name="queryName">Name of the query that failed</param>
|
|
/// <param name="batchId">Batch ID associated with the operation</param>
|
|
/// <param name="sqlQuery">SQL query that was executed (nullable)</param>
|
|
/// <param name="reason">Reason for the failure</param>
|
|
public DEXJobException(string queryName, string batchId, string? sqlQuery, string reason)
|
|
: base(
|
|
$"[SQL Execution Failure] Query '{queryName}' could not be completed for Batch '{batchId}'." + Environment.NewLine +
|
|
"─────────────────────────────────────────" + Environment.NewLine +
|
|
" Query:" + (sqlQuery is null ? string.Empty : Environment.NewLine + $" {sqlQuery}") + Environment.NewLine + Environment.NewLine +
|
|
" Reason:" + Environment.NewLine +
|
|
$" {reason}" + Environment.NewLine +
|
|
"─────────────────────────────────────────")
|
|
{
|
|
SqlQuery = sqlQuery;
|
|
BatchId = batchId;
|
|
QueryName = queryName;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the SQL query that failed (if available)
|
|
/// </summary>
|
|
public string? SqlQuery { get; }
|
|
|
|
/// <summary>
|
|
/// Gets the batch ID associated with the operation
|
|
/// </summary>
|
|
public string BatchId { get; }
|
|
|
|
/// <summary>
|
|
/// Gets the name of the query that failed
|
|
/// </summary>
|
|
public string QueryName { get; }
|
|
}
|
|
}
|