Aktualisiere Versionsnummer auf 3.2.2 in README.md, package.json, package-lock.json und package-solution.json. Entferne inkompatibles Seiten-Provisioning-Feature und passe Tests entsprechend an.

This commit is contained in:
Torsten Brendgen
2026-08-18 22:03:55 +02:00
parent 84307cd078
commit 094f0933e7
6 changed files with 17 additions and 51 deletions
+7 -11
View File
@@ -6,14 +6,14 @@ PortalSettings V3 ist ein providerbasiertes SPFx-WebPart für SharePoint Server
| Eigenschaft | Wert |
|---|---|
| Version | 3.2.1 |
| Version | 3.2.2 |
| SharePoint Framework | 1.4.1 |
| Build-Node | 8.17.0 |
| npm | 6.x |
| Gulp | lokal 3.9.1 |
| Komponente | Client-Side WebPart |
Die Oberfläche wird vollständig vom WebPart erzeugt und verwendet kein `innerHTML`. Ein schlankes SharePoint-Feature provisioniert beim Installieren der App im Root-Web automatisch die moderne `SitePages/PortalSettings.aspx` und platziert dort genau eine Instanz des WebParts.
Die Oberfläche wird vollständig vom WebPart erzeugt und verwendet kein `innerHTML`. Die moderne `SitePages/PortalSettings.aspx` wird bewusst per PnP-PowerShell provisioniert, damit das SPFx-WebPart auf SharePoint Server zuverlässig registriert bleibt.
## Unterstützte Solutions
@@ -165,12 +165,9 @@ sharepoint/solution/portal-settings.sppkg
## Installation
1. `portal-settings.sppkg` im App Catalog durch Version `3.2.1.0` ersetzen.
1. `portal-settings.sppkg` im App Catalog durch Version `3.2.2.0` ersetzen.
2. Die App im Root Web der gewünschten Site Collection installieren oder aktualisieren.
3. Die App provisioniert automatisch die veröffentlichte Seite `SitePages/PortalSettings.aspx` mit dem WebPart.
4. Eine bereits vorhandene `PortalSettings.aspx` wird nicht überschrieben.
Optional kann eine Seite per PnP PowerShell erzeugt werden:
3. Die Seite mit dem PnP-PowerShell-Skript erzeugen beziehungsweise reparieren:
```powershell
.\deployment\Add-PortalSettingsPage.ps1 `
@@ -178,7 +175,7 @@ Optional kann eine Seite per PnP PowerShell erzeugt werden:
-Publish
```
Das Skript bleibt als Reparaturweg erhalten und verwendet standardmäßig ebenfalls `PortalSettings.aspx`.
Das Skript verwendet standardmäßig `PortalSettings.aspx` und platziert dort das Portal-Settings-WebPart.
## Migration von V2
@@ -191,9 +188,8 @@ V3 liest die vorhandenen Konfigurationsorte direkt weiter:
Es ist keine Datenmigration in eine neue Liste erforderlich. Empfohlenes Vorgehen:
1. Paket aktualisieren und die App im Root-Web aktualisieren.
2. Fehlt `PortalSettings.aspx`, wird sie durch das Feature angelegt. Eine vorhandene Seite bleibt unverändert.
3. Falls eine vorhandene Seite das WebPart noch nicht enthält, das PnP-Skript als Reparaturweg ausführen.
4. Alle Provider laden, Konfigurationen testweise speichern und Root Web sowie Subwebs prüfen.
2. Das PnP-Skript ausführen, wenn `PortalSettings.aspx` fehlt oder das WebPart noch nicht enthält.
3. Alle Provider laden, Konfigurationen testweise speichern und Root Web sowie Subwebs prüfen.
## Diagnose
+3 -3
View File
@@ -2,7 +2,7 @@
Stand: 21.07.2026
Branch: `dev-3.0`
Zielversion: 3.2.1
Zielversion: 3.2.2
## Architektur
@@ -53,7 +53,7 @@ Zielversion: 3.2.1
- [x] Versionen auf 3.0.0 angehoben.
- [x] Node-Engine auf SPFx-1.4.1-Buildumgebung begrenzt.
- [x] Alte monolithische Seiten-, Copy- und Azure-Assets entfernt.
- [x] Schlankes Feature zur automatischen Provisionierung der modernen PortalSettings.aspx ergänzt.
- [x] Automatisches Feature-Provisioning wegen fehlender WebPart-Registrierung auf SharePoint Server zurückgenommen.
- [x] Altes Gulp-Copy-Task entfernt.
- [x] Serve-Konfiguration auf WebPart Workbench umgestellt.
- [x] Tests laufen vor der Paketierung.
@@ -76,7 +76,7 @@ Zielversion: 3.2.1
- [ ] Ship-Paket mit Node.js 8.17.0 erstellen.
- [ ] App im Root Web aktualisieren.
- [ ] Automatisch provisionierte `PortalSettings.aspx` und enthaltenes WebPart prüfen.
- [ ] Per PnP-Skript provisionierte `PortalSettings.aspx` und enthaltenes WebPart prüfen.
- [ ] MegaMenu-Termsets laden und speichern.
- [ ] CustomBranding laden und schemaerhaltend speichern.
- [ ] ExpiryIndicator-Standard speichern.
+2 -15
View File
@@ -3,22 +3,9 @@
"solution": {
"name": "portal-settings-client-side-solution",
"id": "1c98e32d-bb7b-43b7-9625-074d6e4ea286",
"version": "3.2.1.0",
"version": "3.2.2.0",
"includeClientSideAssets": true,
"skipFeatureDeployment": false,
"features": [
{
"title": "Portal Settings Page",
"description": "Provisioniert die moderne PortalSettings.aspx im Root-Web.",
"id": "71841e33-8bbd-4007-83a6-d950453226a2",
"version": "3.2.0.0",
"assets": {
"elementManifests": ["elements.xml"],
"elementFiles": ["PortalSettings.aspx"],
"upgradeActions": ["upgrade-actions.xml"]
}
}
]
"skipFeatureDeployment": false
},
"paths": {
"zippedPackage": "solution/portal-settings.sppkg"
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "portal-settings",
"version": "3.2.1",
"version": "3.2.2",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "portal-settings",
"version": "3.2.1",
"version": "3.2.2",
"private": true,
"main": "lib/index.js",
"engines": {
+3 -20
View File
@@ -15,9 +15,6 @@ var config = json('config/config.json');
var copyAssets = json('config/copy-assets.json');
var manifest = json('src/webparts/portalSettings/PortalSettingsWebPart.manifest.json');
var styles = read('src/webparts/portalSettings/PortalSettings.scss');
var pageAsset = read('sharepoint/assets/PortalSettings.aspx');
var elements = read('sharepoint/assets/elements.xml');
var upgradeActions = read('sharepoint/assets/upgrade-actions.xml');
var sourceFiles = [
'src/ui/Dom.ts',
'src/ui/DynamicFormRenderer.ts',
@@ -25,27 +22,13 @@ var sourceFiles = [
].map(read).join('\n');
var dataService = read('src/services/PortalSettingsDataService.ts');
assert(packageJson.version === '3.2.1', 'Package-Version ist nicht 3.2.1.');
assert(solution.version === '3.2.1.0', 'Solution-Version ist nicht 3.2.1.0.');
assert(solution.features && solution.features.length === 1, 'Das Seiten-Provisioning-Feature fehlt.');
assert(solution.features[0].assets.elementManifests.indexOf('elements.xml') >= 0 &&
solution.features[0].assets.elementFiles.indexOf('PortalSettings.aspx') >= 0 &&
solution.features[0].assets.upgradeActions.indexOf('upgrade-actions.xml') >= 0,
'Die Provisioning-Assets sind nicht vollständig registriert.');
assert(packageJson.version === '3.2.2', 'Package-Version ist nicht 3.2.2.');
assert(solution.version === '3.2.2.0', 'Solution-Version ist nicht 3.2.2.0.');
assert(!solution.features, 'Das inkompatible Seiten-Provisioning-Feature darf nicht paketiert werden.');
assert(!!config.bundles['portal-settings-web-part'], 'WebPart-Bundle fehlt.');
assert(copyAssets.deployCdnPath === 'temp/deploy', 'Ship-Assets werden nicht nach temp/deploy geschrieben.');
assert(manifest.componentType === 'WebPart', 'Komponente ist kein WebPart.');
assert(!fs.existsSync(path.join(root, 'src/assets/PortalSettings.aspx')), 'Alte ASPX-Seite ist noch vorhanden.');
assert(pageAsset.indexOf('Microsoft.SharePoint.WebControls.ClientSidePage') >= 0,
'Das provisionierte Asset ist keine moderne SharePoint-Seite.');
assert(elements.indexOf('Url="PortalSettings.aspx"') >= 0 && elements.indexOf('RootWebOnly="TRUE"') >= 0 &&
elements.indexOf('IgnoreIfAlreadyExists="TRUE"') >= 0 && elements.indexOf('Level="Published"') >= 0,
'PortalSettings.aspx wird nicht sicher im Root-Web provisioniert.');
assert(elements.indexOf('CanvasContent1') >= 0 &&
elements.indexOf('c41d05ec-0682-4af0-b807-649806ed56b3') >= 0,
'Das PortalSettings-WebPart fehlt im provisionierten Canvas.');
assert(upgradeActions.indexOf('71841e33-8bbd-4007-83a6-d950453226a2\\elements.xml') >= 0,
'Die Upgrade-Provisionierung fehlt.');
assert(!fs.existsSync(path.join(root, 'src/extensions/portalSettings/PortalSettingsApplicationCustomizer.ts')), 'Alter Application Customizer ist noch vorhanden.');
assert(sourceFiles.indexOf('innerHTML') < 0, 'UI darf innerHTML nicht verwenden.');
assert(dataService.indexOf('/_api/site/rootweb/UserCustomActions') >= 0 &&