Apariencia
Excel: estructura fija para fallos de escritura
Este ejemplo complementa la importación: usa una familia de procesos para describir fallos al guardar un libro. Referencia el proyecto que expone Greencore.Platform.Processes; los ejemplos usan imports implícitos de .NET y nulabilidad habilitada.
Definir los tipos
Un fallo al guardar un libro puede tener una ubicación precisa y una causa técnica. Esta segunda familia declara ambos niveles:
csharp
using Greencore.Platform.Errors;
using Greencore.Platform.Processes;
public sealed class ExcelWriteError : ProcessError
{
public string FileName { get; }
public ExcelWriteError(string fileName) : base($"No se pudo escribir '{fileName}'", "excel.write")
{
FileName = fileName;
}
public ExcelWriteCellReason AddCell(string sheetName, string address) => AddReason(new ExcelWriteCellReason(sheetName, address));
}
public sealed class ExcelWriteCellReason : ProcessReason<ExcelWriteError, ExcelWriteCellReason>
{
public string SheetName { get; }
public string Address { get; }
public ExcelWriteCellReason(string sheetName, string address) : base("excel.write_cell", $"Hoja {sheetName}, celda {address}")
{
SheetName = sheetName;
Address = address;
}
public ExcelWriteCellReason Failed(Exception exception) => this.WithReason(new ExcelCellWriteFailureReason(exception));
}
public sealed class ExcelCellWriteFailureReason : ProcessReason<ExcelWriteCellReason, ExcelCellWriteFailureReason>
{
public Exception Exception { get; }
public ExcelCellWriteFailureReason(Exception exception) : base("excel.cell_write_failed", "No se pudo escribir el valor")
{
ArgumentNullException.ThrowIfNull(exception);
Exception = exception;
}
}Este método puede recibir la excepción capturada durante la escritura de una celda:
csharp
static ExcelWriteError DescribeCellWriteFailure(Exception exception)
{
var error = new ExcelWriteError("salida.xlsx");
error.AddCell("Clientes", "B12").Failed(exception);
return error;
}text
ExcelWriteError
└── ExcelWriteCellReason
└── ExcelCellWriteFailureReasonPara un fallo del libro completo, usa error.AddExceptionReason(exception) en la raíz. Las razones estándar de procesos declaran ProcessError como padre; una excepción anidada bajo una celda requiere una razón propia como la anterior.
Ventajas y extensión
La sintaxis comunica la ubicación y la causa. Las propiedades conservan coordenadas y excepciones con sus tipos. El compilador rechaza relaciones incompatibles y los consumidores pueden generar informes consistentes.
Para añadir una regla de celda, define otra razón con ExcelCellReason como padre. Si la escritura necesita agrupar muchas filas, incorpora niveles de hoja y fila siguiendo el mismo patrón. La aplicación debe validar los argumentos de sus tipos cuando necesite restringir números de fila, nombres o direcciones.
Consulta composición libre frente a árboles tipados para decidir cuándo compensa definir esta familia.