Spring til indholdet

Opret et websted med Power Automate og SPSiteManager

Et kommunikationswebsted eller et teamwebsted uden gruppe fra et flow, med et tjek af om adressen er fri, som ikke kræver administratorrettigheder.

Opdateret Power AutomateSharePoint OnlineREST-API 3 min. læsning

SharePoint-connectoren har ingen handling, der opretter et websted. REST-API’et _api/SPSiteManager kan oprette et kommunikationswebsted og et teamwebsted uden Microsoft 365-gruppe, og det kaldes med Send an HTTP request to SharePoint, som ikke kræver Premium. Et teamwebsted med gruppe oprettes gennem gruppen i Graph og står ikke her.

Findes adressen allerede?#

Min metode, som ikke kræver administratorrettigheder: en Get lists mod den nye adresse, med Configure run after sat til også at køre videre, når den fejler. Derefter en Switch på statuskoden, outputs('Get_lists')?['statusCode']:

StatuskodeBetyder
404Webstedet findes ikke. Adressen er fri
403Webstedet findes, men forbindelsens konto har ikke adgang
200 (Default)Webstedet findes, og kontoen har adgang

Hver gren sætter en boolesk variabel, varSiteExists. Ideen er fra en opskrift i Power Automate Cookbook på Power Users-forummet.

Get lists mod den nye adresse og en Switch på statuskoden, med en gren for 403 og en for 404.

SPSiteManager har også et statuskald:

Method: GET
Uri: _api/SPSiteManager/status?url='https%3A%2F%2F<tenant>.sharepoint.com%2Fsites%2F<websted>'
Headers:
{
  "Accept": "application/json;odata.metadata=none",
  "odata-version": "4.0"
}

Adressen i url er URL-kodet. SiteStatus i svaret:

VærdiBetyder
0Findes ikke
1Oprettes lige nu
2Klar
3Fejl under oprettelsen
4Adressen er allerede i brug

Microsofts side siger ikke, hvilke rettigheder statuskaldet kræver. I 2023 skulle adressen tjekkes uden administratorrettigheder, og derfor blev det Get lists.

Opret webstedet#

Site Address: https://<tenant>.sharepoint.com
Method: POST
Uri: _api/SPSiteManager/create
Headers:
{
  "Accept": "application/json;odata.metadata=none",
  "odata-version": "4.0"
}
Body:
{
  "request": {
    "Title": "@{triggerOutputs()?['body/Title']}",
    "Url": "@{variables('varSiteURL')}",
    "Lcid": 1030,
    "ShareByEmailEnabled": false,
    "Description": "",
    "WebTemplate": "SITEPAGEPUBLISHING#0",
    "SiteDesignId": "f6cc5403-0d63-442e-96c0-285923709ffc",
    "Owner": "<ejerens e-mail>"
  }
}

I mit flow er Site Address roden af tenanten. Mange eksempler bruger administrationsadressen, https://<tenant>-admin.sharepoint.com.

Felterne:

FeltIndhold
TitleWebstedets navn
UrlDen fulde adresse, https://<tenant>.sharepoint.com/sites/<websted>
LcidSproget: 1030 dansk, 1033 engelsk. Webstedets sprog kan ikke ændres bagefter
ShareByEmailEnabledDeling via e-mail. Microsofts side beskriver ikke feltet nærmere
WebTemplateSITEPAGEPUBLISHING#0 for kommunikationswebsted, STS#3 for teamwebsted uden gruppe
SiteDesignIdMicrosofts egne designs: 96c933ac-3698-44c7-9f4a-5fd17d71af9e (Topic, eller null), 6142d2a0-63a5-4ba0-aede-d9fefca2c767 (Showcase), f6cc5403-0d63-442e-96c0-285923709ffc (Blank)
WebTemplateExtensionIdEt eget site design. Så skal SiteDesignId være 00000000-0000-0000-0000-000000000000
SensitivityLabelId’et på en følsomhedsmærkat. Classification viser kun en tekst og sætter ingen mærkat
OwnerEjeren. Krævet, når kaldet sker som app. Ellers bliver den, der kalder, ejer

Et eget site designs id står i Get-SPOSiteDesign eller Get-PnPSiteDesign, og en mærkats id i Get-Label efter Connect-IPPSSession.

Svaret#

1{
2  "SiteId": "<site-id>",
3  "SiteStatus": 2,
4  "SiteUrl": "https://<tenant>.sharepoint.com/sites/<websted>"
5}

Med SiteStatus 2 er webstedet klar, og flowet kan fortsætte uden en forsinkelse. Er det 1, kan en Do until spørge statuskaldet, indtil det er 2 eller 3.

Til en hub#

På det nye websted, bagefter:

Site Address: https://<tenant>.sharepoint.com/sites/<websted>
Method: POST
Uri: _api/site/JoinHubSite('<hub-id>')

Svaret er 204. Hub’ens id står i Get-PnPHubSite som SiteId. Er hub’en sat op, så kun bestemte personer må tilknytte websteder, skal forbindelsens konto være en af dem.

Faldgruber#

  • Adressen. Holdes til a-z, tal og bindestreg, uden mellemrum. replace(toLower(…), ' ', '-') klarer mellemrummene, men ikke æ, ø og å.
  • Slettede websteder. En adresse, der tilhører et slettet websted i papirkurven, er ikke fri. Den frigives, når webstedet slettes helt (Remove-SPODeletedSite).
  • Sproget vælges ved oprettelsen og kan ikke ændres.
  • Ejeren skal være en bruger i tenanten.
  • Grupper. Et teamwebsted med Microsoft 365-gruppe kan ikke oprettes her.