EN · DE · RU · FR · ES

#824: AddressExport.kt

projectforge-business/src/main/kotlin/org/projectforge/business/address/AddressExport.kt @Service("addressExport") — Excel-Exportdienst, projectforge-business/src/main/kotlin/org/projectforge/business/address/AddressExport.kt 216 Zeilen · 157 Code · 35 Kommentare · 24 leer
Spring-Dienst, der Adressdaten in Excel-Arbeitsmappen (.xlsx) exportiert. Handhabt Spaltenregistrierung, zugriffsgesteuerte Filterung und mehrteilige zusammengeführte Kopfzeilen für Post-, Geschäfts-, Postanschrift- und private Adressblöcke.

Architektur

Klassenhierarchie

AddressExport ist eine offene Klasse, die mit @Service("addressExport") annotiert ist und für die Erweiterung durch Plugins konzipiert wurde. Das Marketing-Plugin AddressCampaignValueExport erweitert sie und überschreibt registerAdditionalCols(), configureSheet() und handleAddressCampaign(), um kampagnenspezifische Felder hinzuzufügen.

Spaltenregistrierung (registerCols)

Registriert ~40 Spalten in dieser Reihenfolge:

  1. Identität: name, firstName, form, title, contactStatus
  2. Organisation: organization, division, positionText, communicationLanguage
  3. Plugin-Hook: registerAdditionalCols() — erweiterbarer Punkt für Kampagnenwerte
  4. Kontakt: email, website
  5. Postanschrift: addressText, addressText2, zipCode, city, country, state
  6. Geschäftsadresse: vollständiger Block (automatisch registriert über registerAddress(sheet, ""))
  7. Postalische Adresse: vollständiger Block (registerAddress(sheet, "postal"))
  8. Telefone: businessPhone, fax, mobilePhone
  9. Privat: vollständiger Adressblock, privateEmail, privatePhone, privateMobilePhone
  10. Metadaten: birthday, lastUpdate, comment, fingerprint, publicKey, id

Größenkonstanten von ExcelUtils.Size steuern die Spaltenbreiten: STANDARD (Standard), EMAIL, ZIPCODE, PHONENUMBER, EXTRA_LONG.

Exportablauf (export())

  1. Zugriffskontrolle: Mitglieder von FINANCE_GROUP oder MARKETING_GROUP erhalten alle Adressen; andere Benutzer erhalten nur ihre persönlichen Favoriten (abgeglichen über personalAddressMap).
  2. Arbeitsmappenerstellung: Verwendet Merlins ExcelWorkbook mit Try-with-Resources über .use { }.
  3. Blatteinrichtung: Titelzeile, Kopfzeile mit fetter Formatierung, eingefrorener Bereich bei (2,2) und Autofilter auf der Kopfzeile.
  4. Zusammengeführte Kopfbereiche: Vier zusammengeführte Zellbereiche in Zeile 0 gruppieren Post-, Geschäfts-, Postanschrift- und private Adressspalten unter fetten Abschnittsüberschriften.
  5. Hook-Aufruf: configureSheet(sheet, *params) zur Anpassung durch Unterklassen.
  6. Zeilenbefüllung: Jede Adresse wird zu einer Excel-Zeile. Ruft ExcelUtils.autoFill() für die Standard-Eigenschaftszuordnung auf, füllt manuell die Zellen der Postanschrift und die Kommunikationssprache und ruft dann handleAddressCampaign() für Kampagnendaten auf.

Erweiterungspunkte

Git-Verlauf

868d6abb7 2025 -> 2026
83cbccb11 ExcelUtils AddressExport: stream.use (Streams wurden vorher nicht geschlossen?)
78a38ca8f ExcelUtils.createFont und von allen Schriftarten-erstellenden Excel-Routinen verwendet.
63081666f Quelltextdatei-Header: 2024 -> 2025.
4c04cfd65 MAJOR-CHANGE! Migration von Integer-IDs zu Long-IDs
b6092df09 Copyright 2023 -> 2024
ab45d51fa Copyright 2001-2022 -> 2001-2023.
dce7927f4 Veraltete Kotlin-Funktion decapitalize() ersetzt
5f7ef41b8 Copyright 2021 -> 2022
e1538819c Merlin: Verwendet jetzt Autoclosure von ExcelWorkbook
91554ea83 Neue Merlin-Version.