Spring til indholdet

Den første godkender som claims i Power Automate

Hvem der svarede på en godkendelse, hentet ud af svaret fra Start and wait for an approval og skrevet som et SharePoint-claim til rettigheder og personfelter.

Opdateret AdgangsstyringSharePoint Online 3 min. læsning

Start and wait for an approval giver ikke en e-mailadresse tilbage, men et objekt med et array af svar. Skal den, der godkendte, have rettigheder til elementet bagefter eller stå i en personkolonne, skal personen hentes ud af arrayet og ofte skrives som et SharePoint-claim. Handlingen hører til connectoren Approvals, som er Standard og ikke kræver Premium.

Hvad claimet bruges til bagefter, står i andre noter: Brugere og grupper på et websted med ensureUser giver id’et, Bryd og ret rettigheder på et listeelement med Power Automate giver rettighederne, og Ret Oprettet af og Ændret af med validateUpdateListItem skriver personfelter med claims.

Expression#

Koden:

@concat('i:0#.f|membership|',first(body('Start_and_wait_for_an_approval')?['responses'])['responder/email'])

first() tager det første svar i responses, ['responder/email'] er e-mailen i svarets responder-objekt, og concat sætter præfikset for en bruger i Microsoft 365 foran.

Et claim for en bruger bygger på UPN’en, ikke på e-mailen. De to er ofte ens, men ikke altid (se Find en brugers id på et SharePoint-websted ud fra e-mailen). Svaret har begge dele, så UPN’en er det sikre valg:

concat('i:0#.f|membership|', first(body('Start_and_wait_for_an_approval')?['responses'])?['responder/userPrincipalName'])

Navnet i body('…') er handlingens navn med understregning i stedet for mellemrum. Omdøbes handlingen, skal udtrykket rettes.

Svaret#

Felterne i hvert svar i responses:

IndholdSti
E-mailresponder/email
UPNresponder/userPrincipalName
Navnresponder/displayName
Entra-objekt-idresponder/id
Svaret (Approve/Reject)approverResponse
Kommentarcomments
Tidspunkt for svaretresponseDate

På selve godkendelsen: outcome, requestDate og completionDate. Navnene er fra connectorens reference på Microsoft Learn, hvor de står under tekstgodkendelsen. For Start and wait for an approval er output dynamisk og ikke beskrevet, så feltnavnene bør tjekkes i en kørsel, før et flow bygger på dem.

Navn, svar og kommentar for den første:

first(body('Start_and_wait_for_an_approval')?['responses'])?['responder/displayName']
first(body('Start_and_wait_for_an_approval')?['responses'])?['approverResponse']
first(body('Start_and_wait_for_an_approval')?['responses'])?['comments']

Minutter fra anmodningen til det første svar (et tick er 100 nanosekunder, så et minut er 600.000.000 ticks):

div(sub(ticks(first(body('Start_and_wait_for_an_approval')?['responses'])?['responseDate']), ticks(body('Start_and_wait_for_an_approval')?['requestDate'])), 600000000)

Typen af godkendelse#

  • Approve/Reject – First to respond. Der er ét svar, så first() er den, der svarede.
  • Approve/Reject – Everyone must approve. Der er et svar pr. godkender. At arrayet står i den rækkefølge, svarene kom i, står ikke i dokumentationen. Betyder rækkefølgen noget, sorteres der på responseDate.

Alle godkenderes e-mails i én tekst: der findes ingen select()-funktion i udtryk, så det er handlingen Select over responses med værdien item()?['responder/email'], og bagefter join(body('Select'), ', ').

Claimet i brug#

Rettigheder på elementet. roleassignments/addroleassignment vil have brugerens id på webstedet, ikke claimet. Id’et kommer fra ensureuser:

Method: POST
Uri: _api/web/ensureuser
Headers:
{
  "Accept": "application/json;odata=nometadata",
  "Content-Type": "application/json;odata=nometadata"
}
Body:
{
  "logonName": "@{outputs('Compose_-_Claims')}"
}

Id i svaret er principalid i tildelingen, og arven på elementet skal være brudt først, som i noten om rettigheder på et listeelement. Rettighedsniveauernes id’er (roledefid) står i ensureUser-noten.

Personkolonne med Update item. SharePoint-connectoren viser kolonnen med Claims efter navnet (fx Godkendt af Claims), og e-mailen alene er nok. Claimet skal kun bygges til REST-kald.

Mail til godkenderen. E-mailen direkte i To.

Intet svar#

Annulleres godkendelsen, er responses tom, og first() giver ingenting. En betingelse først:

length(body('Start_and_wait_for_an_approval')?['responses'])
is greater than
0

Det der driller#

  • UPN, ikke e-mail. Et claim med e-mailen virker kun, så længe e-mail og UPN er ens.
  • Gæster. En gæsts UPN har formen navn_domæne.dk#ext#@<tenant>.onmicrosoft.com, og claimet er samme præfiks foran den. At godkendelsens userPrincipalName er netop den form for en gæst, har jeg ikke efterprøvet.
  • SharePoint Server med Windows-login bruger i:0#.w|<domæne>\<bruger>, ikke membership.
  • Handlingsnavnet i udtrykket følger omdøbninger ikke af sig selv.
  • Ikke Premium. Både Approvals og Send an HTTP request to SharePoint er Standard.

Alle noter