EN · DE · RU · FR · ES

#824: AddressExport.kt

projectforge-business/src/main/kotlin/org/projectforge/business/address/AddressExport.kt @Service("addressExport") — Servicio de exportación a Excel, projectforge-business/src/main/kotlin/org/projectforge/business/address/AddressExport.kt 216 líneas · 157 código · 35 comentarios · 24 en blanco
Servicio Spring que exporta datos de direcciones a libros de Excel (.xlsx). Gestiona el registro de columnas, filtrado con control de acceso y filas de encabezado combinadas de múltiples secciones para bloques de direcciones postales, comerciales, de envío y privadas.

Arquitectura

Jerarquía de clases

AddressExport es una clase open anotada con @Service("addressExport"), diseñada para ser extendida por complementos. El complemento de marketing AddressCampaignValueExport la extiende, sobrescribiendo registerAdditionalCols(), configureSheet() y handleAddressCampaign() para agregar campos específicos de campaña.

Registro de columnas (registerCols)

Registra ~40 columnas en orden:

  1. Identidad: nombre, nombre, formulario, título, estadoContacto
  2. Organización: organización, división, textoCargo, idiomaComunicación
  3. Enlace de complemento: registerAdditionalCols() — punto extensible para valores de campaña
  4. Contacto: correo electrónico, sitio web
  5. Dirección postal: textoDirección, textoDirección2, códigoPostal, ciudad, país, estado
  6. Dirección comercial: bloque completo (registrado automáticamente mediante registerAddress(sheet, ""))
  7. Dirección de envío: bloque completo (registerAddress(sheet, "postal"))
  8. Teléfonos: teléfonoComercial, fax, teléfonoMóvil
  9. Privado: bloque de dirección completo, correoPrivado, teléfonoPrivado, móvilPrivado
  10. Metadatos: cumpleaños, últimaActualización, comentario, huellaDigital, clavePública, id

Las constantes de tamaño de ExcelUtils.Size controlan los anchos de columna: ESTÁNDAR (predeterminado), CORREO, CÓDIGOPOSTAL, TELÉFONO, EXTRA_LARGO.

Flujo de exportación (export())

  1. Control de acceso: Los miembros de FINANCE_GROUP o MARKETING_GROUP reciben todas las direcciones; otros usuarios solo obtienen sus favoritos personales (coincidentes mediante personalAddressMap).
  2. Creación del libro: Utiliza ExcelWorkbook de Merlin con try-with-resources mediante .use { }.
  3. Configuración de hoja: Fila de título, fila de encabezado con estilo negrita, panel congelado en (2,2) y autofiltro en la fila de encabezado.
  4. Regiones de encabezado combinadas: Cuatro regiones de celdas combinadas en la fila 0 agrupan columnas de direcciones postales, comerciales, de envío y privadas bajo encabezados de sección en negrita.
  5. Llamada a enlace: configureSheet(sheet, *params) para personalización de subclases.
  6. Población de filas: Cada dirección se convierte en una fila de Excel. Llama a ExcelUtils.autoFill() para el mapeo de propiedades estándar, llena manualmente las celdas de dirección postal y el idioma de comunicación, luego invoca handleAddressCampaign() para datos de campaña.

Puntos de extensión

Historial de Git

868d6abb7 2025 -> 2026
83cbccb11 ExcelUtils AddressExport: stream.use (¿los flujos no se cerraban antes?)
78a38ca8f ExcelUtils.createFont y utilizado por todas las rutinas de creación de fuentes de Excel.
63081666f Encabezados de archivos fuente: 2024 -> 2025.
4c04cfd65 CAMBIO MAYOR: Migración de ids enteros a ids Long
b6092df09 Derechos de autor 2023 -> 2024
ab45d51fa Derechos de autor 2001-2022 -> 2001-2023.
dce7927f4 función obsoleta de Kotlin decapitalize() reemplazada
5f7ef41b8 Derechos de autor 2021 -> 2022
e1538819c Merlin: usando ahora Autoclosure de ExcelWorkbook
91554ea83 Nueva versión de Merlin.