Origin esatto
event.origin ed event.source sono verificati. I messaggi che possono trasportare token non usano targetOrigin="*".
Il runtime SharePoint rimane nel browser, la logica applicativa resta in .NET. Il Bridge scambia solo contratti semantici e dati, con origin verificato e routing esplicito.
La pagina SharePoint usa una sola Web Part Bridge e può ospitare uno o più Host Wisej, affiancati opzionalmente da una Microsoft ListView e dal Command Set dedicato.
| Componente | Nome | Responsabilità |
|---|---|---|
| Bridge singleton | GDG-SPFx-Bridge | Contesto SharePoint, token, servizi SPFx, routing e distribuzione cross-host. |
| Host WebPart | GDG Wisej Host | Ospita l’iframe Wisej e registra applicationId, instanceName e webPartInstanceId. |
| Libreria .NET | GDGSPFxBridge.dll | Public API session-scoped consumata dal codice Wisej. |
| Applicazione consumer | WisejSPFX / app reale | UI, CRUD, routing locale e logica business. |
| List integration | GDG Wisej ListView Command Set | Stato ListView, selezione, List Actions e route applicative. |

Il protocollo browser/SPFx v3 usa window.postMessage. La comunicazione con l’Host è correlata e prevede timeout, deduplica e completamento end-to-end.
Una List Action, un deep link, la browser history o un’invocazione applicativa produce una route semantica e i suoi valori.
Il dispatch può essere diretto a tutti gli Host, a una applicationId o a una specifica coppia applicationId/instanceName.
SPFx non conosce Page, classi o metodi C#. È il router Wisej a mappare il nome semantico della route sulla logica applicativa.
ApplicationRouteCompleted restituisce un outcome: Handled, NotHandled, Failed, TimedOut o HostUnavailable.

Il token utente è ottenuto da SPFx tramite AadTokenProvider e consegnato alla sessione Wisej; non sono richiesti ClientSecret, password, certificati o un secondo login nel percorso production.
event.origin ed event.source sono verificati. I messaggi che possono trasportare token non usano targetOrigin="*".
Il token rimane server-side nella sessione Wisej e non deve essere scritto in storage browser, database, cookie applicativi o log.
Le route remote sono semantiche e registrate esplicitamente. URL esterni, route ambigue e input non convertibili vengono rifiutati fail-closed.
Diagnostics.GetSnapshot() non espone mai AccessToken; i log tecnici usano timestamp UTC ISO-8601 con millisecondi.
Il Bridge distingue ciò che espone come contratto pubblico da ciò che Microsoft ListView consente realmente con le API SPFx supportate.
| Capability | Microsoft ListView source | Nota |
|---|---|---|
| readState | Supportata e validata | Restituisce lo stato live della source originaria. |
| refresh | Non esposta | ListViewAccessor pubblico non offre un refresh dati programmatico supportato. |
| selectItems | Non esposta | Nessuna selezione/focus programmatica supportata tramite API pubblica corrente. |
| DOM/private API | Non usate | Il core resta su API pubbliche e supportate. |
Dopo New/Edit/Delete la List WebPart può restare visivamente non aggiornata finché l’utente non esegue un refresh manuale. La demo evita il reload completo della pagina per non ricreare Host/ListView e non interrompere temporaneamente le List Actions.