
SPFx Series: Een nadere blik op belangrijke stukken code
Een nadere blik op belangrijke stukken code
Het belangrijkste verschil tussen een SPFx-webonderdeel en een extensie is dat een webonderdeel een component is waarmee de inhoud van een pagina kan worden bekeken of bewerkt, terwijl een extensie de gebruikersinterface van SharePoint of Microsoft Teams aanpast of uitbreidt.
Een SPFx-webonderdeel is een op maat gebouwd component dat aan een SharePoint-pagina kan worden toegevoegd om extra functionaliteit te bieden. Het kan bijvoorbeeld worden gebruikt om een diagram, een kalender of een lijst met items weer te geven. Webonderdelen worden meestal gebruikt om de inhoud van de pagina te wijzigen of uit te breiden.
Een SPFx-extensie, daarentegen, is een op maat gebouwd stuk code dat draait in de context van SharePoint of Microsoft Teams en kan worden gebruikt om de SharePoint- of Teams-gebruikersinterface aan te passen of uit te breiden. Het kan bijvoorbeeld worden gebruikt om een aangepaste opdracht aan de opdrachtbalken toe te voegen, een aangepaste kop- of voettekst toe te voegen, of de kleuren van de gebruikersinterface aan te passen. Extensies worden gebruikt om de gebruikersinterface van SharePoint of Teams aan te passen en functionaliteit uit te breiden.
Er zijn drie soorten SPFx-extensies:
Het implementeren van een extensie omvat een XML, een clientSideInstance.xml of een elements.xml. Je kunt dit XML vinden in de map SharePoint/assets van je oplossing in Visual Studio Code. Deze xml-bestanden zijn opgenomen in de feature van je oplossing (zie features in het bestand package-solution.json).

Het verschil tussen de 2 xml-bestanden ligt in het feit dat de clientSideInstance.xml wordt gebruikt om je extensie tenantbreed te implementeren. Dit gebeurt wanneer je app wordt geïmplementeerd in de app-catalogus. Als een clientSideInstance.xml-bestand wordt gevonden tijdens de implementatie van je app, wordt je extensie geïmplementeerd in de verborgen lijst Tenant Wide Extensions. Dit betekent dat elke keer dat je extensie ergens binnen SharePoint wordt geladen, de configuratie voor deze extensie wordt gelezen uit deze lijst met tenantbrede extensies.
Als we kijken naar de verschillende eigenschappen in een dergelijk xml van een clientSideInstance, kunnen we het volgende onderscheiden:
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<ClientSideComponentInstance
Title="ListItemDetailsDialog"
Location="ClientSideExtension.ListViewCommandSet.CommandBar"
ListTemplateId="100"
Properties="{"sampleTextOne":"One item is selected in the list.", "sampleTextTwo":"This command is always visible."}"
ComponentId="acddd824-662e-47a5-a80e-6586b25c810a"
/>
</Elements>
Wanneer een elements.xml wordt gevonden, wordt dit xml gebruikt voor de implementatie op siteverzamelingsniveau. Met deze implementatie wordt je extensie alleen geconfigureerd op siteverzamelingsniveau. Als we kijken naar het xml van het bestand elements.xml, kunnen we de volgende eigenschappen onderscheiden:
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<CustomAction
Title="ListItemDetailsDialog"
RegistrationId="100"
RegistrationType="List"
Location="ClientSideExtension.ListViewCommandSet.CommandBar"
ClientSideComponentId="acddd824-662e-47a5-a80e-6586b25c810a"
ClientSideComponentProperties="{"sampleTextOne":"One item is selected in the list.", "sampleTextTwo":"This command is always visible."}">
/>
</Elements>
Deze 2 bestanden zijn ingebakken in je app, maar wanneer wordt er beslist welk xml er gebruikt wordt? Dit gebeurt wanneer je app wordt geïmplementeerd in de app-catalogus. Wanneer we dit gaan implementeren, zien we het volgende scherm verschijnen:

Als je “Make this solution available to all sites in the organization” aanvinkt, wordt het bestand clientSideInstance.xml gebruikt en wordt de extensie geïmplementeerd in de lijst met tenantbrede extensies. Als je deze optie niet aanvinkt, wordt het bestand elements.xml gebruikt wanneer je specifiek een app toevoegt aan een siteverzameling.