feat: add ExpiryIndicatorClassic functionality with configuration and rendering
- Implemented ExpiryIndicatorClassic.js for managing expiry dates in SharePoint lists. - Created classic-elements.xml to define the module for ExpiryIndicator assets. - Added upgrade-actions-v2.xml to apply the new element manifests. - Introduced ExpiryModels.test.ts for unit testing the expiry configuration and rules validation.
This commit is contained in:
113
README.md
113
README.md
@@ -1,13 +1,15 @@
|
||||
# ExpiryIndicator
|
||||
|
||||
SPFx-1.4.1-Solution für moderne Listen und Dokumentbibliotheken in SharePoint Server Subscription Edition.
|
||||
SPFx-1.4.1-Solution für moderne und klassische Listen und Dokumentbibliotheken in SharePoint Server Subscription Edition.
|
||||
|
||||
## Funktionen
|
||||
|
||||
- Farbliche Anzeige einer vorhandenen, frei wählbaren Ablaufdatumsspalte.
|
||||
- Fallback-Berechnung aus einem konfigurierbaren Erstellungsfeld und `defaultLifetime`.
|
||||
- Priorisierte Regeln mit eigener Laufzeit und eigenen Farbschwellen anhand vorhandener Feldwerte.
|
||||
- Verschachtelte V2-Bedingungsgruppen mit den logischen Verknüpfungen `AND` und `OR`.
|
||||
- Command-Bar-Befehl zum Verlängern eines oder mehrerer Elemente um ein Kalenderjahr.
|
||||
- CSR/JSLink-Darstellung und Ribbon-Befehl für klassische SharePoint-Ansichten.
|
||||
- Pro Liste/Bibliothek gespeicherte Konfiguration.
|
||||
|
||||
Die Solution provisioniert ausdrücklich keine fachliche Ablaufdatumsspalte und keinen Content Type.
|
||||
@@ -210,6 +212,77 @@ In **Feldwertregeln** wird nur das JSON-Array für `rules` eingetragen. Folgende
|
||||
]
|
||||
```
|
||||
|
||||
Das bisherige Format mit `columnName` und `columnValue` bleibt in Version 2.0 vollständig kompatibel.
|
||||
|
||||
### Verkettete Regeln mit AND und OR (Version 2.0)
|
||||
|
||||
Neue Regeln verwenden `condition`. Eine Gruppe enthält `operator` mit `and` oder `or` sowie ein Array
|
||||
`conditions`. Jeder Eintrag ist entweder eine Feldbedingung oder eine weitere Gruppe. Dieses Beispiel gilt,
|
||||
wenn `eGovPersDat` dem angegebenen Taxonomy-Term entspricht **und** der Status `Freigegeben` oder `Genehmigt` ist:
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"condition": {
|
||||
"operator": "and",
|
||||
"conditions": [
|
||||
{
|
||||
"columnName": "eGovPersDat",
|
||||
"columnValue": "0d19386a-ebe1-4955-ad12-164d7846bca6"
|
||||
},
|
||||
{
|
||||
"operator": "or",
|
||||
"conditions": [
|
||||
{
|
||||
"columnName": "Status",
|
||||
"columnValue": "Freigegeben"
|
||||
},
|
||||
{
|
||||
"columnName": "Status",
|
||||
"columnValue": "Genehmigt"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"lifeTime": {
|
||||
"value": 1,
|
||||
"unit": "years"
|
||||
},
|
||||
"columnRule": [
|
||||
{
|
||||
"daysUntilExpiry": 0,
|
||||
"operator": "lessOrEqual",
|
||||
"backgroundColor": "#a4262c",
|
||||
"textColor": "#ffffff",
|
||||
"label": "Abgelaufen"
|
||||
},
|
||||
{
|
||||
"daysUntilExpiry": 7,
|
||||
"operator": "lessOrEqual",
|
||||
"backgroundColor": "#ffaa44",
|
||||
"textColor": "#000000",
|
||||
"label": "Läuft bald ab"
|
||||
},
|
||||
{
|
||||
"daysUntilExpiry": 14,
|
||||
"operator": "lessOrEqual",
|
||||
"backgroundColor": "#fff4ce",
|
||||
"textColor": "#000000",
|
||||
"label": "Beobachten"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
- `and`: Alle enthaltenen Bedingungen müssen erfüllt sein.
|
||||
- `or`: Mindestens eine enthaltene Bedingung muss erfüllt sein.
|
||||
- Ein fehlendes Feld erfüllt eine Feldbedingung nicht.
|
||||
- Gruppen dürfen bis zu zehn Ebenen tief verschachtelt werden.
|
||||
- Die erste vollständig passende fachliche Regel gewinnt; andernfalls gilt `default`.
|
||||
- Der Einstellungsdialog lehnt ungültige oder leere Bedingungsgruppen vor dem Speichern ab.
|
||||
|
||||
Die Regeln werden von oben nach unten geprüft. Dabei gilt:
|
||||
|
||||
1. Existiert `columnName` in der Liste oder Bibliothek?
|
||||
@@ -258,6 +331,29 @@ Listenfeld registriert. Der interne Name wird anschließend aus dieser Bindung e
|
||||
nur lesbar angezeigt. Das Command Set wird durch die Installation der App registriert. Danach die Listenansicht
|
||||
neu laden.
|
||||
|
||||
### Klassische SharePoint-Ansichten
|
||||
|
||||
Version 2.0 legt bei der App-Installation `ExpiryIndicatorClassic.js` unter
|
||||
`SiteAssets/ExpiryIndicator` ab. Das Aktivierungsskript registriert standardmäßig für die angegebene Liste:
|
||||
|
||||
- einen listenspezifischen `ScriptLink` für CSR/JSLink,
|
||||
- die Berechnung, Beschriftung und den Zeilenverlauf in der klassischen Ansicht,
|
||||
- den Ribbon-Befehl **Ablaufdatum +1 Jahr**,
|
||||
- den Einstellungsdialog über denselben URL-Parameter `expiryIndicatorSettings=1`.
|
||||
|
||||
Soll nur die moderne Ansicht aktiviert werden, kann die Classic-Registrierung ausgelassen werden:
|
||||
|
||||
```powershell
|
||||
.\scripts\Enable-ExpiryIndicator.ps1 `
|
||||
-SiteUrl 'https://sharepoint/sites/fachbereich' `
|
||||
-ListTitle 'Dokumente' `
|
||||
-ExpiryFieldInternalName 'CustomerExpiryDate' `
|
||||
-SkipClassic
|
||||
```
|
||||
|
||||
Die klassische Laufzeit verwendet dieselbe JSON-Konfiguration aus den
|
||||
`ClientSideComponentProperties` des gebundenen Ablaufdatumsfeldes. Es gibt keine zweite Konfiguration.
|
||||
|
||||
### Ablaufdatum um ein Jahr verlängern
|
||||
|
||||
Ein oder mehrere Elemente markieren und **Ablaufdatum +1 Jahr** auswählen. Ist bereits ein Ablaufdatum
|
||||
@@ -282,7 +378,7 @@ 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 wie im Abschnitt
|
||||
3. Eine moderne oder klassische Liste/Bibliothek öffnen und wie im Abschnitt
|
||||
**Konfiguration über den Application Customizer** beschrieben konfigurieren.
|
||||
4. Den Field Customizer mit der vorhandenen Ablaufdatumsspalte verbinden:
|
||||
|
||||
@@ -295,6 +391,15 @@ Das Paket wird als `sharepoint/solution/expiry-indicator.sppkg` erzeugt.
|
||||
|
||||
Das Skript ist in einer SharePoint Management Shell beziehungsweise auf einem Rechner mit den passenden SharePoint-CSOM-Assemblies und Zugriff auf die Site auszuführen.
|
||||
|
||||
### Upgrade von Version 1.x auf 2.0
|
||||
|
||||
1. Das vorhandene Paket im App Catalog durch Version `2.0.0.0` ersetzen.
|
||||
2. Die App in der Site aktualisieren. Die enthaltene Feature-UpgradeAction provisioniert ausschließlich das
|
||||
neue Classic-Asset und legt keine fachliche Spalte an.
|
||||
3. `Enable-ExpiryIndicator.ps1` für jede bereits angebundene Liste erneut ausführen. Das Skript erhält die
|
||||
vorhandene Feldkonfiguration und ergänzt idempotent die Classic-ScriptLink- und Ribbon-Registrierungen.
|
||||
4. Modern- und Classic-Ansicht mit geleertem Browsercache neu laden und prüfen.
|
||||
|
||||
## Deaktivierung
|
||||
|
||||
```powershell
|
||||
@@ -304,4 +409,6 @@ Das Skript ist in einer SharePoint Management Shell beziehungsweise auf einem Re
|
||||
-ExpiryFieldInternalName 'CustomerExpiryDate'
|
||||
```
|
||||
|
||||
Das Skript entfernt ausschließlich die Field-Customizer-Verknüpfung. Die Spalte und alle fachlichen Daten bleiben erhalten. Die Command-Set-Registrierung wird durch das Entfernen der App aus der Site beseitigt.
|
||||
Das Skript entfernt die Field-Customizer-Verknüpfung sowie die listenspezifischen Classic-ScriptLink- und
|
||||
Ribbon-Registrierungen. Die Spalte und alle fachlichen Daten bleiben erhalten. Die modernen Command-Set- und
|
||||
Application-Customizer-Registrierungen werden durch das Entfernen der App aus der Site beseitigt.
|
||||
|
||||
Reference in New Issue
Block a user