Standortverwaltung

PowerPortalsPro liefert eine Site-Admin-Seite, die es einem von SystemUser-Nutzern unterstützten Administrator ermöglicht, serverseitige Caches zu löschen, ohne den Host neu starten zu müssen. Das Framework stellt die Cache-Clear-API bereit (IPowerPortalsProService.ClearAllCachesAsync / ClearCacheAsync); dein Portal stellt die Seite selbst, das Rollengatter und den Navigationslink bereit.

Verkabeln

Drei Dinge, die man anschließen sollte: den Rollenbeanspruchungstransformator, die Seite selbst und einen Navigationseintrag. Die Portal-Vorlagen (powerportalspro-csharp mit den Auto, WebAssembly, oder Server Interaktivitätsoptionen) liefern alle drei direkt aus der Box – die darunterliegenden Ausschnitte spiegeln das wider, was die Vorlagen aussenden, sodass du sie in ein Portal heben kannst, das nicht aus einer Vorlage generiert wurde.

1. Konfigurieren Sie, welche Dataverse-Rollen Verwaltung gewähren

SystemAdminClaimsTransformer stempelt einen synthetischen SystemAdmin Rollenanspruch auf jeden Hauptverantwortlichen, der entweder die integrierte System Administrator Dataverse-Rolle oder eine benutzerdefinierte Rolle über PortalIdentityOptions.SystemAdminRoleNamehält. Die eingebaute Rolle wird immer als Verwaltung behandelt; Die konfigurierte Rolle ist optional und legt Schichten darüber. UI-Autorisierung ([Authorize(Roles = "SystemAdmin")] und <AuthorizeView Roles="SystemAdmin">) prüft den synthetischen Anspruch, sodass einer benutzerdefinierten Dataverse-Rolle Administratorzugriff gewährt werden kann, ohne den Razor Code zu berühren.

2. Hinzufügen der Seite zur Website-Verwaltung

Das Attribut [Authorize(Roles = "SystemAdmin")] wird durch AuthorizeRouteViewgeachtet; das innere <AuthorizeView Roles="SystemAdmin"> ist Defense-in-Depth, falls ein Host den Router tauscht. Die ganze Seite (mit dem Löschen-Button, der Pro-Cache-Liste mit lokalisierten Beschreibungen und dem Toast-Feedback) befindet sich in den Vorlagen. SiteAdmin.razor

3. Tauche es im Navigationssystem an

Packe die Admin-Navigationsgruppe in und verpacke <AuthorizeView Roles="SystemAdmin"> , damit Nicht-Administratoren keinen Link sehen, dem sie nicht folgen können. Das Link-Ziel ist die Route, auf der sich die Seite registriert.

Was wird zwischengespeichert

Das Framework registriert neun Caches als IClearableCache; die Site Admin-Seite stellt sie alphabetisch sortiert mit ihren lokalisierten Beschreibungen neben jedem dar. Die Beschreibungen liefern sich im Rahmen ppp-server.defaults.en.json app.cache-descriptionsunter .

  • TableMetadata — Metadaten pro Tabelle (Spalten, Typen, Auswahloptionen, Beziehungen). Aktualisieren Sie nach Schemaänderungen.
  • ViewMetadata — Zwischengespeicherte Dataverse-Ansichten (FetchXML, Spalten, Sortieren). Aktualisieren Sie nach der Bearbeitung einer Ansicht in Dataverse.
  • EntityMetadata — Rohe Dataverse-Entitätsmetadaten, die von Framework-Code auf niedrigerer Ebene verwendet werden. Gleiche Quelle wie TableMetadata in einer anderen Form – typischerweise zusammen zurückgesetzt.
  • StringLocalizer — Alle lokalisierten Strings – Dataverse-Tabellen-/Spaltenlabels, Webressourcen und Ordner-JSON-Dateien. Aktualisieren Sie nach der Bearbeitung einer beliebigen Lokalisierungsquelle.
  • UserPrivileges — Per Benutzer wurde Sicherheitsrechte gelöst (welche Rollen welche Berechtigungen gewähren). Aktualisieren Sie nach Änderung der Rollenzuweisungen eines Benutzers.
  • TablePermissions — Die CRUD-Berechtigungen pro Benutzer wurden über die Tabellen-Recht-Handler-Kette gelöst. Meistens abgeleitet von UserPrivileges for SystemUsers.
  • PrivilegeMetadata — Organisationsweite Berechtigungsdefinitionen aus der Dataverse-Privilegientabelle. Fast nie ändert sich – nur Updates der Dataverse-Plattform führen neue Beiträge ein.
  • OrganizationFileSettings — Datei-Upload-Einstellungen auf Org-Ebene (maximale Größe, erlaubte Erweiterungen). Aktualisieren Sie diese nach Änderungen in Dataverse.
  • Currency — Organisationsweite Transaktionswährungs-Snapshot plus die Basiswährung der Organisation. Aktualisieren Sie, nachdem Administratoren Währungen in Dataverse hinzugefügt oder aktualisiert haben.
  • EmailSender — Absendereintrag für ausgehende E-Mails gelöst (Abfrage der konfigurierten Absenderadresse auf deren Dataverse-Entitätsreferenz).

Der StringLocalizer-Rebuild ist der langsame

Das Löschen des StringLocalizer-Caches durchläuft die Metadaten jeder Dataverse-Tabelle + jede Webressource + jede Ordnerdatei und baut das In-Memory-Wörterbuch neu auf. Rechnen Sie mit 20–30 Sekunden gegen eine reale Umgebung. Der atomare Neuaufbau garantiert, dass die Leser die vorherigen Werte während des gesamten Rebuilds weiterhin sehen – es gibt keine Phase, in der der Cache leer ist.

Hinzufügen deines eigenen Caches

Implementiere IClearableCache und registriere es sowohl als deine Betonleistung ALS auch als IClearableCache. Die Site-Admin-Seite nimmt es automatisch auf und stellt es alphabetisch zusammen mit dem Rest dar. Die Eigenschaft Name ist die öffentliche Identifikatorin – das ist das, was auf dem Button pro Cache angezeigt wird.

Lokalisierte Beschreibung

Die Site Admin-Seite schaut im Localizer nach oben app.cache-descriptions.<Name> , um den Beschreibungstext neben dem Button darzustellen. Füge einen Eintrag unter diesem Namensraum in den Dateien deines Portals app.en.json (und aller anderen Sprachen) hinzu; Seiten ohne registrierte Beschreibung geben elegant nur den Button dar.

Alle löschen vs. pro Cache

Clear All führt alle registrierten Caches ClearAsync parallel aus und meldet die Ergebnisse pro Cache (erfolgreich / fehlgeschlagen / abgelaufene MS) in der Antwort. Die Pro-Cache-Buttons lösen sich ClearAsync für einen Cache gleich aus – nützlich, wenn man nur einen Cache ablegen muss (zum Beispiel nach der Bearbeitung einer einzelnen Dataverse-Ansicht).

API-Referenz

Die Cache-Clear-API lebt auf IPowerPortalsProService; die zugrundeliegende Orchestrierung, die jeden Cache parallel ausführt, ClearAsync lebt auf ICacheManager. Die Schnittstellen werden unten zusammengefasst.

IClearableCache Interface

Eigenschaften

Name
Typ
Default
Beschreibung
Namestring
Ein kurzer, stabiler Name für Telemetrie- / UI-Feedback (z. B. 'TableMetadata'). Muss nicht menschenfreundlich sein – es ist eine Maschinenidentifikator, die Admin-Benutzeroberfläche kann auf ein lokalisiertes Label abgebildet werden.
Name: Name
Typ: string
Beschreibung: Ein kurzer, stabiler Name für Telemetrie- / UI-Feedback (z. B. 'TableMetadata'). Muss nicht menschenfreundlich sein – es ist eine Maschinenidentifikator, die Admin-Benutzeroberfläche kann auf ein lokalisiertes Label abgebildet werden.

Methoden

Name
Parameter
Typ
Beschreibung
ClearAsyncCancellationToken cancellationToken
Task
Leert den Inhalt des Caches. Für Caches, die vorgeladene Daten speichern (z. B. StringLocalizerCache) sollten Implementierungen die Daten atomar, damit bestehende Leser die alten Daten weiterhin sehen, bis Der neue Bundesstaat ist vollständig besiedelt. Für faule / On-Demand-Caches, Dropping Die Einträge sind ausreichend – der nächste Anrufer löst eine neue Ladung aus.
Name: ClearAsync
Parameter: CancellationToken cancellationToken
Typ: Task
Beschreibung: Leert den Inhalt des Caches. Für Caches, die vorgeladene Daten speichern (z. B. StringLocalizerCache) sollten Implementierungen die Daten atomar, damit bestehende Leser die alten Daten weiterhin sehen, bis Der neue Bundesstaat ist vollständig besiedelt. Für faule / On-Demand-Caches, Dropping Die Einträge sind ausreichend – der nächste Anrufer löst eine neue Ladung aus.

ICacheManager Interface

Methoden

Name
Parameter
Typ
Beschreibung
ClearAllAsyncCancellationToken cancellationToken
Task<IReadOnlyList<CacheClearResult>>
Löscht alle parallel registrierten Registrierten Services.IClearableCache und liefert zurück Ein Bericht pro Cache. Ein fehlgeschlagener Cache blockiert nicht die anderen – seinen Eintrag in Der Bericht enthält die Ausnahmemeldung statt null.
ClearAsyncstring name
CancellationToken cancellationToken
Task<CacheClearResult>
Löscht einen benannten Cache. Rückkehrt null , wenn nicht registriert ist Cache-Übereinstimmungen name (groß- und kleinschreibungsunempfindlich). Fehlschläge werden verpackt im Ergebnis statt geworfen zu werden, entspricht Threading.CancellationToken).
GetCacheNamesIReadOnlyList<string>
Gibt die Namen aller registrierten Services.IClearableCache, passenden Personen, zurück für eine Admin-Benutzeroberfläche, die pro Cache Lösch-Buttons rendern will.
Name: ClearAllAsync
Parameter: CancellationToken cancellationToken
Typ: Task<IReadOnlyList<CacheClearResult>>
Beschreibung: Löscht alle parallel registrierten Registrierten Services.IClearableCache und liefert zurück Ein Bericht pro Cache. Ein fehlgeschlagener Cache blockiert nicht die anderen – seinen Eintrag in Der Bericht enthält die Ausnahmemeldung statt null.
Name: ClearAsync
Parameter: string name
CancellationToken cancellationToken
Typ: Task<CacheClearResult>
Beschreibung: Löscht einen benannten Cache. Rückkehrt null , wenn nicht registriert ist Cache-Übereinstimmungen name (groß- und kleinschreibungsunempfindlich). Fehlschläge werden verpackt im Ergebnis statt geworfen zu werden, entspricht Threading.CancellationToken).
Name: GetCacheNames
Typ: IReadOnlyList<string>
Beschreibung: Gibt die Namen aller registrierten Services.IClearableCache, passenden Personen, zurück für eine Admin-Benutzeroberfläche, die pro Cache Lösch-Buttons rendern will.