“Exportar” descarga los incidentes del listado tal como están filtrados y ordenados. Usa los mismos parámetros, la misma validación, la misma visibilidad y la misma consulta del listado, así que el archivo nunca trae algo que la persona no podría ver en pantalla.
Paso a paso
- PersonaPulsa Exportar
Monitor con texto; portátil solo el ícono; celular y tablet en el menú "Más opciones del listado".
- NavegadorPide confirmar cuántos saldrán
"Se exportarán N con los filtros y el orden actuales, en un archivo CSV que se abre con Excel."
- NavegadorPide GET /incidents/export con los filtros
- API¿Menos de 5 exportaciones en el minuto?
- API¿Tiene incidents.export (y restore si pide eliminados)?
- Base de datos¿Son 50.000 filas o menos?
Cuenta antes de leer. El tope es
EXPORT_MAX_ROWS(50.000 por defecto). - Base de datosRegistra la exportación en la auditoría
Antes de enviar el archivo, porque una descarga cortada a mitad igual dejó salir datos. En
admin_actions, tipoincidents_exported, con el número de filas y los filtros (estados y prioridades con código y nombre, personas por ULID). - Base de datosLee por tandas de 1.000
Con el orden del listado. Medido: 50.000 filas son 7,9 MB en 2,1 s y la memoria se mantiene en unos 28 MB.
- APIEscribe el CSV mientras lee
Con BOM y
;para que Excel lo abra bien en español; fechas en la zona del negocio con el desfase en el encabezado; "Vencido" calculado. Una celda que empieza por=,+,-,@, tabulación o salto de línea lleva un apóstrofo delante, para que Excel no la ejecute como fórmula. Sin caché (no-store). - NavegadorGuarda incidentes-AAAA-MM-DD-HHMM.csv
Qué ve la persona en cada error
| Código | HTTP | Cuándo | Mensaje en pantalla |
|---|---|---|---|
EXPORT_TOO_LARGE | 422 | Más de 50.000 incidentes con esos filtros | Con estos filtros salen {total} incidentes y el máximo por archivo es {max}. Acota los filtros, por ejemplo con un rango de fechas, y vuelve a exportar. |
TOO_MANY_REQUESTS | 429 | Más de 5 exportaciones en un minuto | Hiciste demasiados intentos seguidos. Espera {wait} y vuelve a intentarlo. |
FORBIDDEN_ACTION | 403 | Sin permiso de exportar | No tienes permiso para hacer esta acción. Si crees que deberías tenerlo, habla con un administrador. |
Como la descarga llega como archivo, el cliente HTTP lee el error dentro del blob para poder mostrar el mensaje correcto.
Dónde está en el código
ExportIncidents: permiso, tope y registro.EloquentIncidentExporteIncidentCsv: lectura por tandas y columnas.CsvDownload: BOM, separador y protección de fórmulas.useIncidentList(exportCsv) ysaveFile.- Explicación del módulo: Módulo Incidents.