top of page

Maak automatisch de publicatie van nieuwsberichten op je SharePoint intranet ongedaan

Wie binnen SharePoint Online ‘Sitepagina’s’ benadert en Scheduling/Plannen (eenmalig) inschakelt, maakt het mogelijk voor eindgebruikers om nieuwsberichten gepland te publiceren. De Nieuwspost is dan wel volledig afgerond, maar deze bereikt pas de publicatiestatus op het vooraf ingestelde moment.


Onlangs kreeg ik de vraag of het omgekeerd ook mogelijk is. Oftewel: de wens om de publicatie van een nieuwsbericht op een vooraf aangegeven moment in te trekken. De vraag komt vanuit een organisatie die gebruik maakt van SharePoint Online als intranet. Het intranet is opgezet via een hubconstructie. De hoofdsite in de Hub bevat op de pagina het nieuwswebpart en is ingesteld om nieuws van alle gekoppelde Hubsites te tonen. Met deze opzet verdwijnen Nieuwsposts vanzelf naar de achtergrond wanneer er genoeg nieuwe posts zijn verschenen. Maar soms hoeft een nieuwsbericht slechts een beperkt moment zichtbaar te zijn. Na dit moment hoeft het bericht niet verwijderd te worden, maar mag het naar de achtergrond. Bijvoorbeeld om zo weer ruimte te geven aan andere berichten. Een duidelijk verzoek, maar helaas niet zo eenvoudig op te lossen als het uitgesteld publiceren.


Soortgelijke vragen komen op diverse Microsoftforums voor, waardoor het lijkt alsof er voldoende vraag naar is. Maar ondanks dat oplossingsrichtingen worden beschreven, ben ik er geen tegengekomen die volledig voldoet. Een mooie kans dus om zelf aan een oplossing te werken. En ondanks wat uitdagingen lukt dit met behulp van PowerAutomate. De werking deel ik graag. En heb je zelf nog tips/ideeën, dan zijn deze zeer welkom!


Samenvatting werking:

  1. Een extra kolom Verloopdatum wordt aan de bibliotheek Sitepagina's toegevoegd en zorgt dat voor iedere nieuwspost (optioneel) een datum kan worden meegegeven waarop de publicatie ongedaan wordt gemaakt.

  2. Een Flow in PowerAutomate controleert dagelijks of er nieuwsposts zijn met een Verloopdatum die gelijk is aan de betreffende dag.

  3. Is er een match, dan zorgt de Flow in PowerAutomate dat de publicatie van de betreffende nieuwspost ongedaan wordt gemaakt.

  4. De nieuwspost blijft bestaan, maar is nu niet meer zichtbaar in het nieuwswebpart op SharePoint.

 

Is dit waar je naar zoekt, dan helpen we je met de onderstaande uitgebreide stappen graag op weg om dit zelf te realiseren:


Stap 1: Kolom ‘Verloopdatum’ toevoegen

Aangezien Nieuwsposts terecht komen onder Sitepagina’s, is dit de plek waar je de kolom Verloopdatum aanmaakt. Het type kolom is Datum en tijd. Aangezien het alleen om een datum gaat, neem ik de tijd niet op.


Direct na het aanmaken van de kolom is deze zichtbaar in de weergave van de bibliotheek en kunnen medewerkers een waarde invoeren tijdens het opstellen van een Nieuwspost via ‘Details voor de pagina’.


Stap 2: Aanmaken van de Flow in PowerAutomate

Een Flow in PowerAutomate van het type ‘Geplande Cloudstroom’ is aangemaakt en ingesteld op de interval van een dag. Op die manier zorgen we dat PowerAutomate straks dagelijks controleert op verlopen nieuwsposts.


Stap 3: Verlopen nieuwsberichten ophalen

De actie ‘Bestanden ophalen’ voeg je als eerste toe. Dit biedt de mogelijkheid om verlopen nieuwsberichten naar voren te halen. Houd wel rekening dat, na het invoeren van het Siteadres, de bibliotheek Sitepagina’s Niet standaard gekozen kan worden! Het is daarom van belang om het ID van de bibliotheek op te halen en deze als aangepaste waarde in te voeren.


Vervolgens gebruiken we een Odata filterquery om de juiste resultaten naar voren te halen. Is de kolomnaam Verloopdatum, dan ziet dit er uit zoals het voorbeeld:

Verloopdatum gt ‘<Expressie: addDays(utcNow(),-7)>’ and Verloopdatum lt ‘Expressie: utcNow()

Het is een bewuste keuze om een breder bereik aan te houden en niet alleen te controleren op de huidige dag. Mocht PowerAutomate een keer een run overslaan, dan lost de run van een dag later dit vanzelf op. Met de twee filters wordt dus het tijdsbereik van de afgelopen 7 dagen aangehouden.



Stap 4: De geavanceerde eigenschappen van de Nieuwspost ophalen

Automatisch volgt na de vorige stap een ‘For each’, omdat er mogelijk meerdere verlopen nieuwsberichten gevonden worden. Voor iedere gevonden Nieuwspost (for each) voeren we een http-actie uit van het type ‘Get’ om meer informatie over het gevonden item op te halen.

/_api/web/lists/getbyid('<ID van Sitepagina's bibliotheek>')/items('<ID van het huidige item in de For each>')/versions


Door de toevoeging /versions krijgen we nu alle versies van de nieuwspost in de response. Met behulp van de actie ‘Filter array’ is het mogelijk om uit de resultaten van de SharePoint http-actie, die we zojuist hebben uitgevoerd, het resultaat van de ‘Current version’ te filteren.



In 'From' voer je een expressie in die zorgt dat uit de complete body van de SharePoint http-actie de daadwerkelijke resultaten uit 'results' worden opgehaald:

body('GetAdvancedProperties')['d']['results']

Vervolgens zorgt een filterquery dat de huidige versie uit de array wordt gefilterd.

item()['IsCurrentVersion']

Tijdens het maken van de Flow merkte ik dat PowerAutomate stopt zodra geprobeerd wordt de publicatie ongedaan te maken van een Nieuwspost die niet gepubliceerd is. Uit de ModerationStatus kun je af herleiden of dit het geval is. Daarom heb ik als volgende stap een actie van het type ‘Voorwaarde’ toegevoegd. De voorwaarde is gericht op de ‘ModerationStatus’ (wel of niet gepubliceerd) en kijkt of de meest recente versie (die zojuist uit het resultaat is gefilterd) de ModerationStatus '0' heeft:




De volgende Expressie is gebruikt om de ModerationStatus van het huidige item op te halen uit de resultaten van de Filter array-actie:

body('FilterCurrentVersion')[0]['OData__x005f_ModerationStatus']

Is het resultaat niet gelijk aan 0, dan is de meest recente versie momenteel niet gepubliceerd. Ik het nu zo opgelost dat ik in dat geval een bericht stuur naar de beheerder om te vermelden dat de publicatie van een nieuwsbericht verloopt waarvan de meest recente versie nog niet gepubliceerd is.


Stap 5: De publicatie van het nieuwsbericht ongedaan maken

Is de meest recente versie wel gepubliceerd, dan kunnen we de publicatie nu ongedaan maken. Met behulp van een SharePoint http-actie van het type ‘Post’ kunnen we dit verzorgen:

/_api/web/lists/getbyid('<ID van Sitepagina's bibliotheek>')/items('<ID van het huidige item in de For each>')/file/unpublish(comment='Publicatiedatum verlopen en publicatie ongedaan gemaakt')

Het is mogelijk een opmerking mee te geven die op het item wordt geregistreerd.



Stap 6: Opruimen van oudere versies

De publicatie van de nieuwspost is nu ongedaan gemaakt. Tot mijn verbazing was mijn testvoorbeeld wel nog zichtbaar in het nieuwswebpart van SharePoint. In dat geval valt, na het ongedaan maken van de publicatie, SharePoint terug op een eerdere primaire versie.



Er is daarom nog een vervolg nodig. Verwijderen we alle oude versies, dan blijft alleen de versie over waarvan we zojuist de publicatie ongedaan hebben gemaakt. Hier is geen standaard actie voor. En omdat de zojuist uitgevoerde SharePoint http-actie ook effect heeft op het versiebeheer, is het belangrijk om eerst nogmaals via een SharePoint http-actie de versies van de nieuwspost op te halen. Dit is dezelfde actie als in stap 4.



Waar we in stap 4 de huidige versie uit het resultaat filterden, is dit nu andersom. Het doel is namelijk om alle versies op te schonen behalve de huidige versie. Nogmaals gebruik ik hiervoor de 'Filter array' actie, alleen dit keer met de tegenovergestelde filter:


In 'From' voer je wederom een expressie in die zorgt dat uit de complete body van de SharePoint http-actie de daadwerkelijke resultaten uit 'results' worden opgehaald:

body('GetVersions')['d']['results']

Vervolgens zorgt een filterquery dat de oude versies uit de array wordt gefilterd.

item()['IsCurrentVersion']

Een nieuwspost kan meerdere oude versies bevatten. Voor iedere versie geldt een eigen verwijderactie. Daarom volgt nu een 'For each' om de gevonden oude versies na te lopen. Binnen de For each zorgt een SharePoint http-actie van het type 'Post' dat de betreffende versie wordt verwijderd.

/_api/web/lists/getbyid('c8712d16-0f04-49ad-9e06-7c6f685fd3f4')/items('<ID van het huidige item in de eerste For each>')/file/versions/DeleteByLabel('<Expressie: item()['VersionLabel']>')

Houd rekening dat je het ID pakt van het item in eerste For each. Daarnaast richt je de verwijderactie tot de betreffende versie (VersionLabel) van het item.


Het resultaat:

Na het doorlopen van de For each, zijn alle oude versies verwijderd. De meest recente versie, waarvan de publicatie ongedaan is gemaakt in stap 5, blijft als enige over. Het nieuwsitem is nu niet meer zichtbaar in het SharePoint nieuwswebpart:



Het resultaat van de totale Flow in PowerAutomate ziet er als volgt uit:



40 weergaven0 opmerkingen
bottom of page