Skip to content

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
    └── ExcelCellWriteFailureReason

Para 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.

Uso personal limitado. Uso comercial sujeto a autorización escrita.