From dc6d9bf847bc934db37faea37e09afaac7e21d34 Mon Sep 17 00:00:00 2001 From: Torsten Brendgen Date: Thu, 16 Jul 2026 23:12:38 +0200 Subject: [PATCH] =?UTF-8?q?Aktualisiere=20Versionsnummern=20auf=201.0.1=20?= =?UTF-8?q?in=20package.json,=20package-solution.json=20und=20Manifestdate?= =?UTF-8?q?ien=20f=C3=BCr=20Erweiterungen;=20verbessere=20README.md=20mit?= =?UTF-8?q?=20Konfigurationsanweisungen=20f=C3=BCr=20"Expiry-Einstellungen?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 178 +++++++++++++++++- config/package-solution.json | 5 +- package.json | 2 +- ...piryIndicatorFieldCustomizer.manifest.json | 6 +- .../ExpiryIndicatorCommandSet.manifest.json | 4 +- 5 files changed, 184 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 0da4b87..446e4d2 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Die Solution provisioniert ausdrücklich keine fachliche Ablaufdatumsspalte und 3. Die erste Regel mit passendem `columnValue` bestimmt `lifeTime` und `columnRule`. 4. Wenn keine Regel passt oder keines der Regelfelder vorhanden ist, gilt der gesamte `default`-Block. -Beispiel: +Beispiel der intern gespeicherten Gesamtstruktur (nicht vollständig in eines der JSON-Felder des Dialogs einfügen): ```json { @@ -58,6 +58,179 @@ Beispiel: } ``` +## Konfiguration über "Expiry-Einstellungen" + +### Voraussetzungen + +1. Die App muss in der betreffenden Site installiert sein. +2. Die Liste oder Bibliothek muss die moderne Oberfläche verwenden. +3. Der angemeldete Benutzer benötigt die SharePoint-Berechtigung `Listen verwalten`. +4. Das konfigurierte Ablaufdatumsfeld muss bereits vorhanden sein. Die Solution legt dieses Feld nicht an. + +Nach der Installation erscheint in modernen Listen und Dokumentbibliotheken der Befehl +**Expiry-Einstellungen** in der Befehlsleiste. Falls der Befehl nicht sichtbar ist, zunächst prüfen, ob +die App in der Site installiert und die Berechtigung `Listen verwalten` vorhanden ist. + +### Interne Feldnamen ermitteln + +Es müssen interne SharePoint-Feldnamen verwendet werden, nicht die angezeigten Spaltennamen. + +1. **Listeneinstellungen** beziehungsweise **Bibliothekseinstellungen** öffnen. +2. Die gewünschte Spalte anklicken. +3. In der URL den Wert hinter `Field=` ablesen. + +Beispiel: Bei `...FldEdit.aspx?Field=DataPrivacy` lautet der interne Feldname `DataPrivacy`. +Ein Anzeigename wie "Ablaufdatum" kann intern beispielsweise `ExpiryDate` oder +`CustomerExpiryDate` heißen. + +### Allgemeine Einstellungen + +- **Internes Basis-Datumsfeld:** Ausgangsdatum für die Berechnung, normalerweise `Created`. +- **Internes Ablaufdatumsfeld:** Vorhandenes Datumsfeld, beispielsweise `ExpiryDate`. +- **Standardlaufzeit:** Zahl für die Laufzeit, beispielsweise `2`. +- **Einheit:** `days`, `months` oder `years`. +- **Verlängerung vorher bestätigen:** Zeigt vor der Verlängerung eine Sicherheitsabfrage. +- **Text bei fehlendem Datum:** Wird angezeigt, wenn weder Basis- noch Ablaufdatum gelesen werden können. + +Ist das Ablaufdatumsfeld eines Elements bereits gefüllt, wird dieser gespeicherte Wert verwendet. +Nur bei einem leeren Ablaufdatumsfeld wird das Datum aus Basisdatum plus passender Laufzeit berechnet. +Ein berechnetes Datum wird durch die Anzeige allein nicht in das SharePoint-Feld geschrieben. + +### Standard-Farbregeln + +In **Standard-Farbregeln** wird nur das JSON-Array für `default.columnRule` eingetragen: + +```json +[ + { + "daysUntilExpiry": 0, + "operator": "lessOrEqual", + "backgroundColor": "#a4262c", + "textColor": "#ffffff", + "label": "Abgelaufen" + }, + { + "daysUntilExpiry": 30, + "operator": "lessOrEqual", + "backgroundColor": "#ffaa44", + "textColor": "#000000", + "label": "Läuft bald ab" + }, + { + "daysUntilExpiry": 90, + "operator": "lessOrEqual", + "backgroundColor": "#fff4ce", + "textColor": "#000000", + "label": "Beobachten" + } +] +``` + +Die Farbregeln werden von oben nach unten ausgewertet; die erste passende Regel gewinnt. Deshalb muss +`<= 0` vor `<= 30` und `<= 90` stehen. Ohne passende Farbregel wird das Datum ohne besondere Farbe angezeigt. + +Unterstützte Operatoren: + +| Operator | Bedeutung | +| --- | --- | +| `lessThan` | Resttage kleiner als Grenzwert | +| `lessOrEqual` | Resttage kleiner oder gleich Grenzwert | +| `equal` | Resttage genau gleich Grenzwert | +| `greaterOrEqual` | Resttage größer oder gleich Grenzwert | +| `greaterThan` | Resttage größer als Grenzwert | + +### Feldabhängige Regeln + +In **Feldwertregeln** wird nur das JSON-Array für `rules` eingetragen. Folgendes Beispiel verwendet bei +`DataPrivacy = PersDat1` eine Laufzeit von einem Jahr und bei `PersDat2` eine Laufzeit von drei Jahren: + +```json +[ + { + "columnName": "DataPrivacy", + "columnValue": "PersDat1", + "lifeTime": { + "value": 1, + "unit": "years" + }, + "columnRule": [ + { + "daysUntilExpiry": 0, + "operator": "lessOrEqual", + "backgroundColor": "#a4262c", + "textColor": "#ffffff", + "label": "Abgelaufen" + }, + { + "daysUntilExpiry": 30, + "operator": "lessOrEqual", + "backgroundColor": "#ffaa44", + "textColor": "#000000", + "label": "Läuft bald ab" + } + ] + }, + { + "columnName": "DataPrivacy", + "columnValue": "PersDat2", + "lifeTime": { + "value": 3, + "unit": "years" + }, + "columnRule": [ + { + "daysUntilExpiry": 0, + "operator": "lessOrEqual", + "backgroundColor": "#a4262c", + "textColor": "#ffffff", + "label": "Abgelaufen" + }, + { + "daysUntilExpiry": 60, + "operator": "lessOrEqual", + "backgroundColor": "#ffaa44", + "textColor": "#000000", + "label": "Läuft bald ab" + } + ] + } +] +``` + +Die Regeln werden von oben nach unten geprüft. Dabei gilt: + +1. Existiert `columnName` in der Liste oder Bibliothek? +2. Entspricht der Feldwert dem konfigurierten `columnValue`? +3. Die erste passende Regel liefert Laufzeit und Farbregeln. +4. Existiert das Feld nicht oder passt kein Wert, werden Standardlaufzeit und Standard-Farbregeln verwendet. + +Nach **Speichern** wird die Konfiguration pro Liste beziehungsweise Bibliothek in der ausgeblendeten Liste +`_ExpiryIndicatorConfiguration` der aktuellen Site gespeichert. Anschließend die Ansicht neu laden. + +### Anzeige aktivieren + +Die Einstellungen registrieren noch nicht den Field Customizer an der kundenspezifischen Ablaufdatumsspalte. +Diese Zuordnung erfolgt einmal pro Feld mit dem mitgelieferten Skript: + +```powershell +.\scripts\Enable-ExpiryIndicator.ps1 ` + -SiteUrl 'https://sharepoint/sites/fachbereich' ` + -ListTitle 'Dokumente' ` + -ExpiryFieldInternalName 'CustomerExpiryDate' +``` + +Der Wert von `ExpiryFieldInternalName` muss mit **Internes Ablaufdatumsfeld** in den Einstellungen +übereinstimmen. Danach die Listenansicht neu laden. + +### Ablaufdatum um ein Jahr verlängern + +Ein oder mehrere Elemente markieren und **Ablaufdatum +1 Jahr** auswählen. Ist bereits ein Ablaufdatum +gespeichert, wird dieses um ein Kalenderjahr verlängert. Ist das Feld leer, wird zunächst das berechnete +Ablaufdatum verwendet, um ein Jahr verlängert und anschließend in das Ablaufdatumsfeld geschrieben. + +Der Befehl ist nur sichtbar, wenn das konfigurierte Ablaufdatumsfeld existiert, mindestens ein Element +markiert wurde und der Benutzer Elemente bearbeiten darf. + ## Build SPFx 1.4.1 verwendet die Legacy-Toolchain. Unterstützt wird Node.js 6 oder 8; empfohlen wird für reproduzierbare Builds Node.js 8.17.0. @@ -73,7 +246,8 @@ Das Paket wird als `sharepoint/solution/expiry-indicator.sppkg` erzeugt. 1. `expiry-indicator.sppkg` in den App Catalog der On-Premises-Farm laden. 2. Die App in der gewünschten Site installieren. -3. Eine moderne Liste/Bibliothek öffnen und über **Expiry-Einstellungen** interne Feldnamen, Standardlaufzeit, Policies und Farben konfigurieren. +3. Eine moderne Liste/Bibliothek öffnen und wie im Abschnitt + **Konfiguration über "Expiry-Einstellungen"** beschrieben konfigurieren. 4. Den Field Customizer mit der vorhandenen Ablaufdatumsspalte verbinden: ```powershell diff --git a/config/package-solution.json b/config/package-solution.json index 9f4b83f..0c3d78b 100644 --- a/config/package-solution.json +++ b/config/package-solution.json @@ -3,7 +3,7 @@ "solution": { "name": "expiry-indicator-client-side-solution", "id": "68bb6d2d-9895-45b4-88e8-b98835faa981", - "version": "1.0.0.0", + "version": "1.0.1.0", "includeClientSideAssets": true, "skipFeatureDeployment": false, "features": [ @@ -11,7 +11,7 @@ "title": "ExpiryIndicator command set registration", "description": "Registers ExpiryIndicator commands for modern lists and document libraries. Does not provision ExpiryDate.", "id": "913402af-ab9a-4974-9f86-5c2159ae41db", - "version": "1.0.0.0", + "version": "1.0.1.0", "assets": { "elementManifests": [ "elements.xml" @@ -24,4 +24,3 @@ "zippedPackage": "solution/expiry-indicator.sppkg" } } - diff --git a/package.json b/package.json index b087739..1ba50dc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "expiry-indicator", - "version": "1.0.0", + "version": "1.0.1", "private": true, "engines": { "node": ">=6.9.0 <9.0.0" diff --git a/src/extensions/expiryIndicator/ExpiryIndicatorFieldCustomizer.manifest.json b/src/extensions/expiryIndicator/ExpiryIndicatorFieldCustomizer.manifest.json index e1f5232..59e6605 100644 --- a/src/extensions/expiryIndicator/ExpiryIndicatorFieldCustomizer.manifest.json +++ b/src/extensions/expiryIndicator/ExpiryIndicatorFieldCustomizer.manifest.json @@ -4,7 +4,7 @@ "alias": "ExpiryIndicatorFieldCustomizer", "componentType": "Extension", "extensionType": "FieldCustomizer", - "version": "1.0.0", - "manifestVersion": 2 + "version": "1.0.1", + "manifestVersion": 2, + "requiresCustomScript": false } - diff --git a/src/extensions/expiryIndicatorCommandSet/ExpiryIndicatorCommandSet.manifest.json b/src/extensions/expiryIndicatorCommandSet/ExpiryIndicatorCommandSet.manifest.json index 888d3cf..f00d361 100644 --- a/src/extensions/expiryIndicatorCommandSet/ExpiryIndicatorCommandSet.manifest.json +++ b/src/extensions/expiryIndicatorCommandSet/ExpiryIndicatorCommandSet.manifest.json @@ -4,8 +4,9 @@ "alias": "ExpiryIndicatorCommandSet", "componentType": "Extension", "extensionType": "ListViewCommandSet", - "version": "1.0.0", + "version": "1.0.1", "manifestVersion": 2, + "requiresCustomScript": false, "items": { "EXTEND_ONE_YEAR": { "title": { @@ -23,4 +24,3 @@ } } } -