Spring til indholdet

Hent en indholdstype fra content type hub'en med Power Automate

Siden 2021 skubbes indholdstyper fra hub’en ikke længere ud til alle websteder. addCopyFromContentTypeHub henter dem, med Send an HTTP request to SharePoint og webstedets id.

Opdateret Power AutomateSharePoint Online 2 min. læsning

Indholdstyper, der udgives fra content type hub’en, bliver ikke længere skubbet ud til alle websteder. Microsoft skiftede i 2021 fra “push everywhere” til “pull as needed”: et websted får en udgivet indholdstype, når den hentes. Et websted, der aldrig har brugt den, har den ikke, og så kan en liste heller ikke få den med AddAvailableContentType.

Den hentes med addCopyFromContentTypeHub. Det er et Graph-kald, men SharePoints eget v2.0-API har samme adresse under _api/v2.0, så Send an HTTP request to SharePoint kan kalde det uden en appregistrering og uden Premium. Sådan er mit flow bygget, efter C5 Insights “How to pull custom content types from hub using Power Automate REST API”.

Webstedets id#

v2.0-adressen vil have webstedets id, ikke adressen. Mere om id’et i Find et websteds id i SharePoint.

Site Address: @{variables('varDestinationSite')}
Method: GET
Uri: _api/site?$select=Id
Headers:
{
  "Accept": "application/json;odata=nometadata",
  "Content-Type": "application/json;odata=nometadata"
}

Id’et ligger i body('Send_an_HTTP_request_to_SharePoint_-_Get_SiteID')?['Id'] og sættes i varSiteID.

Hent indholdstypen#

Site Address: @{variables('varDestinationSite')}
Method: POST
Uri: _api/v2.0/sites/@{variables('varSiteID')}/contentTypes/addCopyFromContentTypeHub
Headers:
{
  "Content-Type": "application/json;odata=nometadata"
}
Body:
{
  "contentTypeId": "<indholdstypens id>"
}

Id’et står i adressen, når indholdstypen åbnes i hub’en under Webstedsindstillinger → Webstedsindholdstyper (ctype=0x0101…). Jeg lægger begge kald i et scope.

Scopet med de to kald: webstedets id hentes og sættes i varSiteID, og indholdstypen hentes fra hub’en.

Svaret#

Graph-dokumentationen beskriver to svar:

  • 200 OK med indholdstypen: den er på webstedet nu.
  • 202 Accepted med en Location-header: kopieringen kører i baggrunden og kan tage op til 70 minutter.

Et flow, der lægger indholdstypen på en liste lige bagefter, fejler ved 202. Statuskoden tjekkes derfor, før det næste kald: outputs('…')?['statusCode'].

På en liste#

Når indholdstypen er på webstedet, lægges den på listen med AddAvailableContentType('<id>'), som i Opret en liste og styr indholdstyperne med REST fra Power Automate.

Graph kan også hente direkte til en liste: sites/<site-id>/lists/<liste-id>/contentTypes/addCopyFromContentTypeHub. Den kommer så også på webstedet. Samme vej gennem _api/v2.0 har jeg ikke efterprøvet.

Hvilke kan hentes#

Graph har GET sites/<site-id>/contentTypes/getCompatibleHubContentTypes, som viser de udgivne indholdstyper, webstedet kan hente. Gennem _api/v2.0 har jeg ikke efterprøvet den.

Opdateret i hub’en#

Samme kald igen. Microsoft beskriver det som “add or sync”: findes indholdstypen på webstedet, bliver kopien opdateret fra hub’en.

Det der driller#

  • Id, ikke sti. _api/v2.0/sites/<site-id>/… med id’et fra _api/site. En serverrelativ sti som sites/<websted> efter sites/ er ikke en gyldig adresse i Graph-formen.
  • 202 er ikke en fejl, men indholdstypen er der ikke endnu.
  • Kun udgivne indholdstyper. En indholdstype, der ikke er udgivet i hub’en, kan ikke hentes.
  • Rettigheder. Forbindelsens konto skal kunne administrere indholdstyper på webstedet.
  • Ikke Premium. Send an HTTP request to SharePoint hører til SharePoint-connectoren.

Alle noter