Aktualisiere Versionsnummer auf 3.2.6 in README.md, package.json, package-lock.json und package-solution.json. Passe Tests an, um die neuen Versionen zu validieren und ändere den HTTP-Header in PortalSettingsDataService für die Speicherung von Root-Web-Eigenschaften.

This commit is contained in:
Torsten Brendgen
2026-08-23 21:46:33 +02:00
parent e8fa3c2924
commit 3cc8364ad4
7 changed files with 19 additions and 10 deletions
+2 -2
View File
@@ -6,7 +6,7 @@ PortalSettings V3 ist ein providerbasiertes SPFx-WebPart für SharePoint Server
| Eigenschaft | Wert |
|---|---|
| Version | 3.2.5 |
| Version | 3.2.6 |
| SharePoint Framework | 1.4.1 |
| Build-Node | 8.17.0 |
| npm | 6.x |
@@ -171,7 +171,7 @@ sharepoint/solution/portal-settings.sppkg
## Installation
1. `portal-settings.sppkg` im App Catalog durch Version `3.2.5.0` ersetzen.
1. `portal-settings.sppkg` im App Catalog durch Version `3.2.6.0` ersetzen.
2. Die App im Root Web der gewünschten Site Collection installieren oder aktualisieren.
3. Die Seite mit dem PnP-PowerShell-Skript erzeugen beziehungsweise reparieren:
+2 -2
View File
@@ -2,7 +2,7 @@
Stand: 21.07.2026
Branch: `dev-3.0`
Zielversion: 3.2.5
Zielversion: 3.2.6
## Architektur
@@ -79,7 +79,7 @@ Zielversion: 3.2.5
- [ ] Per PnP-Skript provisionierte `PortalSettings.aspx` und enthaltenes WebPart prüfen.
- [ ] MegaMenu-Termsets laden und speichern.
- [ ] CustomBranding laden und schemaerhaltend speichern.
- [ ] ExpiryIndicator-Standard speichern.
- [x] ExpiryIndicator-Standard über SharePoint-SE-kompatibles POST ohne MERGE/PATCH speichern.
- [ ] Expiry-Bindung hinzufügen, lokal konfigurieren und wieder auf Vererbung stellen.
- [ ] Bedienung mit Tastatur, 200-Prozent-Zoom und Windows-Hochkontrast prüfen.
- [ ] Alte V2-Seite nach erfolgreicher Parallelabnahme archivieren oder entfernen.
+1 -1
View File
@@ -3,7 +3,7 @@
"solution": {
"name": "portal-settings-client-side-solution",
"id": "1c98e32d-bb7b-43b7-9625-074d6e4ea286",
"version": "3.2.5.0",
"version": "3.2.6.0",
"includeClientSideAssets": true,
"skipFeatureDeployment": false
},
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "portal-settings",
"version": "3.2.5",
"version": "3.2.6",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "portal-settings",
"version": "3.2.5",
"version": "3.2.6",
"private": true,
"main": "lib/index.js",
"engines": {
+3 -1
View File
@@ -302,7 +302,9 @@ export class PortalSettingsDataService {
const body: any = { '__metadata': { 'type': 'SP.PropertyValues' } };
body[this.encodePropertyName(key)] = value;
return this.context.spHttpClient.post(this.siteUrl + '/_api/web/AllProperties', SPHttpClient.configurations.v1, {
headers: this.writeHeaders('MERGE'), body: JSON.stringify(body)
// SP.PropertyValues accepts POST, but SharePoint Server SE rejects the
// MERGE override because it is handled as an unsupported HTTP PATCH.
headers: this.writeHeaders(), body: JSON.stringify(body)
}).then((response: SPHttpClientResponse): Promise<void> => this.ensureOk(response, 'Der Site-Collection-Standard konnte nicht gespeichert werden.'));
}
+9 -2
View File
@@ -21,9 +21,13 @@ var sourceFiles = [
'src/ui/PortalSettingsApp.ts'
].map(read).join('\n');
var dataService = read('src/services/PortalSettingsDataService.ts');
var rootPropertyWriter = dataService.substring(
dataService.indexOf('private saveRootProperty'),
dataService.indexOf('private findAction')
);
assert(packageJson.version === '3.2.5', 'Package-Version ist nicht 3.2.5.');
assert(solution.version === '3.2.5.0', 'Solution-Version ist nicht 3.2.5.0.');
assert(packageJson.version === '3.2.6', 'Package-Version ist nicht 3.2.6.');
assert(solution.version === '3.2.6.0', 'Solution-Version ist nicht 3.2.6.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.');
@@ -36,6 +40,9 @@ assert(dataService.indexOf('/_api/site/rootweb/UserCustomActions') >= 0 &&
'Root-Web-Actions werden nicht für die Provider-Erkennung berücksichtigt.');
assert(dataService.indexOf('body.Sequence = provider.storage.action.sequence') >= 0,
'Bestehende Actions werden nicht auf die Provider-Sequence aktualisiert.');
assert(rootPropertyWriter.indexOf('headers: this.writeHeaders(), body: JSON.stringify(body)') >= 0 &&
rootPropertyWriter.indexOf("writeHeaders('MERGE')") < 0,
'Root-Web-Properties müssen mit POST ohne MERGE/PATCH gespeichert werden.');
['themePrimary', 'neutralPrimary', 'neutralLight', 'white'].forEach(function (slot) {
assert(styles.indexOf('[theme: ' + slot + ', default:') >= 0, 'Themeslot fehlt: ' + slot);
});