- Bump version in package.json to 1.3.0 - Add new properties for field mapping in DynamicPollWebPart.manifest.json - Enhance DynamicPollWebPart.ts to support dynamic field mapping for polls and answers - Implement field loading and default application logic in PollDataService.ts - Update PollTypes.ts to include new interfaces for field mapping - Modify DynamicPollCollection.tsx to display configurable web part title - Update styles in DynamicPoll.module.scss for improved UI - Add localization strings for new properties in en-us.js and de-de.js - Update tests to reflect changes in data structure and functionality - Validate project structure and ensure all new features are accounted for
91 lines
4.7 KiB
Markdown
91 lines
4.7 KiB
Markdown
# Dynamic Poll
|
|
|
|
Ein eigenstaendiges, mit SharePoint Server Subscription Edition kompatibles SPFx-1.4.1-WebPart fuer einfache Umfragen. Die Funktion orientiert sich am PnP-Beispiel `react-dynamic-poll`, ist aber fuer die vorhandene Legacy-Toolchain und klassische SharePoint-REST-Endpunkte umgesetzt.
|
|
|
|
## Funktionen
|
|
|
|
- alle aktiven Umfragen anhand von Aktiv-Flag sowie optionalem Start- und Enddatum
|
|
- umschaltbare Darstellung mehrerer aktiver Umfragen als Accordion oder Slider mit Punktenavigation
|
|
- konfigurierbarer WebPart-Titel
|
|
- vollstaendige Spaltenzuordnung im Property Pane
|
|
- Content-Type-Hub-taugliche Verbindung zwischen Umfragen und Antworten ueber einen stabilen Textschluessel
|
|
- genau eine Antwort je angemeldetem Benutzer und Umfrage
|
|
- unmittelbare Ergebnisanzeige mit Stimmen und Prozentwerten
|
|
- optional sichtbare Ergebnisse vor der eigenen Abstimmung
|
|
- konfigurierbares Aktualisierungsintervall
|
|
- barrierearme Radio-Auswahl, Statusmeldungen und Ergebnisbalken
|
|
- SharePoint-Theme-Farben statt fest verdrahteter Portal-Farben
|
|
|
|
## Voraussetzungen
|
|
|
|
- SharePoint Server Subscription Edition mit SPFx 1.4.1
|
|
- Node.js 8.17.0 und npm 6.x fuer den Build
|
|
- SharePoint Management Shell fuer die Listenbereitstellung
|
|
|
|
## Listen bereitstellen
|
|
|
|
In der SharePoint Management Shell auf einem SharePoint-Server ausfuehren:
|
|
|
|
```powershell
|
|
.\deployment\Initialize-DynamicPollLists.ps1 `
|
|
-SiteUrl 'http://portal.contoso.local/sites/DEINE-SITE'
|
|
```
|
|
|
|
Das Skript ist idempotent und legt standardmaessig diese Listen an:
|
|
|
|
- `Polls`: `PollKey`, `Title`, `Question`, `Options` (mehrzeiliger Nur-Text), `StartDate`, `EndDate`, `IsActive`
|
|
- `Poll Answers`: `PollKey` (Text), `UserKey` (Text), `Answer`
|
|
|
|
Die Benutzer des WebParts benoetigen Leserechte auf `Polls` sowie Lese- und Hinzufuegerechte auf `Poll Answers`. Fuer die Ergebnisberechnung muessen sie die vorhandenen Antworten lesen koennen.
|
|
|
|
## Umfrage anlegen
|
|
|
|
In `Polls` ein Element mit Frage anlegen und in `Options` jede Antwortmoeglichkeit in eine eigene Zeile schreiben, zum Beispiel:
|
|
|
|
```text
|
|
Ja
|
|
Nein
|
|
Anderer Termin
|
|
```
|
|
|
|
Leerzeilen und doppelte Eintraege werden ignoriert. `IsActive` aktivieren; Start- und Enddatum koennen leer bleiben. Sind mehrere Umfragen gleichzeitig aktiv, werden sie nach Startdatum sortiert und entsprechend dem im Property Pane gewählten Accordion- oder Slider-Modus angezeigt.
|
|
|
|
Danach das WebPart auf einer modernen Seite einfuegen, im Property Pane die Listen `Polls` und `Poll Answers`
|
|
auswaehlen und die Spalten zuordnen. Bekannte Standardnamen werden automatisch vorbelegt.
|
|
|
|
## Verwendung mit dem Inhaltstyp-Katalog
|
|
|
|
Die beiden Listen duerfen aus zentral verteilten Inhaltstypen und Websitespalten aufgebaut werden. Fuer die
|
|
Beziehung wird absichtlich kein Lookup verwendet: Der Poll-Schluessel enthaelt einen eindeutigen, dauerhaften
|
|
Textwert und derselbe Wert wird beim Abstimmen in die zugeordnete Textspalte der Antwortliste geschrieben. Ein Lookup verweist
|
|
auf die ID einer konkreten Liste und kann deshalb nicht verlaesslich ueber den Content Type Hub auf andere
|
|
Websitesammlungen verteilt werden.
|
|
|
|
Im Inhaltstyp-Katalog sollten dafuer zwei getrennte Websitespalten angelegt werden: eine eindeutige/indexierte
|
|
Schluesselspalte fuer die Poll-Liste und eine nicht eindeutige Verweisspalte fuer die Antwortliste. Die
|
|
Verweisspalte darf nicht eindeutig sein, weil mehrere Benutzer dieselbe Umfrage beantworten. Interne Namen
|
|
wie `PollDefinitionKey` und `PollReferenceKey` sind daher ebenso moeglich und werden im Property Pane zugeordnet.
|
|
|
|
Die internen Spaltennamen duerfen abweichen. Im Property Pane lassen sich Umfrageschluessel, Titel, Frage,
|
|
Antwortoptionen, Zeitfenster, Aktiv-Flag sowie Umfrageschluessel, Benutzer und Antwort der Antwortliste frei
|
|
zuordnen. Fuer vorhandene Installationen bleibt ein bestehendes `Poll`-Lookup lesbar: In diesem Fall muss als
|
|
Umfrageschluessel `ID` und als Antwortschluessel das Lookup `Poll` ausgewaehlt werden. Empfohlen ist die
|
|
Migration auf die beiden Textspalten `PollKey`.
|
|
|
|
## Paket bauen
|
|
|
|
```powershell
|
|
npm install
|
|
npm run package
|
|
```
|
|
|
|
Das fertige Paket liegt unter `sharepoint/solution/dynamic-poll-web-part.sppkg`.
|
|
|
|
## Hinweise
|
|
|
|
Der Benutzerschluessel wird in der zugeordneten Spalte (standardmaessig `UserKey`) gespeichert. Die doppelte Stimmabgabe wird vor dem Schreiben geprueft. Zwei exakt gleichzeitige Requests desselben Benutzers lassen sich ohne serverseitige Eindeutigkeitsregel dennoch nicht vollstaendig ausschliessen.
|
|
|
|
Nach einem Upgrade muss das Provisionierungsskript erneut ausgefuehrt werden. Es legt `PollKey`, `UserKey` und
|
|
das mehrzeilige `OptionsText` an, uebernimmt vorhandene Werte und blendet das alte Poll-Lookup sowie die alte
|
|
Choice-Spalte in den Formularen aus. Das Skript legt bei neuen Installationen kein Lookup mehr an.
|