Files
ECMJobRunner/ECMJobRunner.Application/Common/Exceptions/DEXJobException.cs
TekH 8a1a579501 feat: add DEX job exception handling and configuration
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
2026-07-11 12:38:31 +02:00

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