Find en brugers id på et SharePoint-websted ud fra e-mailen
getByEmail, ensureUser og et filter på siteusers — tre måder at komme fra en e-mailadresse til det tal, personfelter og rettigheder vil have, og hvornår hver af dem fejler.
Personfelter, rettigheder og filtre på personkolonner vil have brugerens id på webstedet. Det er et tal fra webstedets skjulte brugerliste (User Information List), og det er hverken e-mailen, UPN’en eller Entra-objekt-id’et fra Get user profile (V2). Den samme person har et andet id på hvert websted.
Hvordan id’et bruges i et personfelt, står i Opret listeelementer med REST fra Power Automate. Rettigheder på et element står i Bryd og ret rettigheder på et listeelement med Power Automate. Grupper og gæster står i Brugere og grupper på et websted med ensureUser.
| Metode | Kald | Findes brugeren ikke på webstedet |
|---|---|---|
getByEmail | GET | Fejler: “User cannot be found” |
siteusers?$filter | GET | Tomt svar, ingen fejl |
ensureUser | POST | Brugeren lægges på webstedet, og id’et kommer tilbage |
getByEmail#
Til brugere, der allerede er på webstedet. Send an HTTP request to SharePoint:
Site Address: https://[tenant].sharepoint.com/sites/[site-name]
Method: GET
Uri: _api/web/SiteUsers/getByEmail('john.doe@company.com')
Headers:
{
"Accept": "application/json;odata=verbose"
}

Svaret:
1{
2 "d": {
3 "__metadata": {
4 "id": "https://contoso.sharepoint.com/sites/ProjectAlpha/_api/Web/GetUserById(23)",
5 "type": "SP.User"
6 },
7 "Id": 23,
8 "LoginName": "i:0#.f|membership|john.doe@company.com",
9 "Title": "John Doe",
10 "PrincipalType": 1,
11 "Email": "john.doe@company.com",
12 "IsHiddenInUI": false,
13 "IsSiteAdmin": false,
14 "UserId": {
15 "NameId": "<puid>",
16 "NameIdIssuer": "urn:federation:microsoftonline"
17 }
18 }
19}
Id’et:
body('Send_an_HTTP_request_to_SharePoint_-_Get_UserID')?['d']?['Id']
getByEmail slår op på feltet Email i brugerlisten. Er brugerens e-mail en anden end UPN’en, eller står feltet tomt, finder den ikke brugeren.
Et filter i stedet#
Samme opslag uden at handlingen fejler:
Method: GET
Uri: _api/web/siteusers?$filter=Email eq 'john.doe@company.com'
Headers:
{
"Accept": "application/json;odata=verbose"
}
Svaret er en liste i d.results. Er den tom, er brugeren ikke på webstedet:
length(body('Get_Site_User')?['d']?['results'])
first(body('Get_Site_User')?['d']?['results'])?['Id']
Det er også vejen til en gæsts LoginName, som er besværligt at skrive selv.
ensureUser#
Til brugere, der måske ikke er på webstedet endnu. Et nyt websted har en næsten tom brugerliste, og en bruger kommer først på den, når vedkommende har været der, har fået rettigheder eller er blevet lagt der med ensureUser.
Method: POST
Uri: _api/web/ensureUser
Headers:
{
"Accept": "application/json;odata=verbose",
"Content-Type": "application/json;odata=verbose"
}
Body:
{
"logonName": "i:0#.f|membership|john.doe@company.com"
}
Svaret har samme form som getByEmail, og id’et står i d.Id. logonName kan også være e-mailen alene, som SharePoint selv slår op. Resten — grupper, gæster, claims — står i noten om ensureUser.
getByEmail med ensureUser som reserve#
Send HTTP Request: Get User by Email
Method: GET
Uri: _api/web/SiteUsers/getByEmail('@{variables('varUserEmail')}')
Set varUserID (Configure run after: is successful)
Value: @{body('Get_User_by_Email')?['d']?['Id']}
Send HTTP Request: Ensure User (Configure run after: has failed)
Method: POST
Uri: _api/web/ensureUser
Body: {"logonName": "i:0#.f|membership|@{variables('varUserEmail')}"}
Set varUserID (Configure run after: is successful)
Value: @{body('Ensure_User')?['d']?['Id']}
Uden Configure run after på reserven når flowet aldrig så langt: en fejlet getByEmail stopper det. Det røde kryds står stadig i kørselshistorikken og ligner en fejl, når man kigger efter. Filteret på siteusers er den renere vej.
Id’et i brug#
Filtrer elementer på en personkolonne:
GET _api/web/lists/getByTitle('Projects')/items?$filter=ProjectManagerId eq @{variables('varUserID')}
Personfeltet i et MERGE-kald hedder feltets interne navn plus Id: ProjectManagerId for et enkelt, og en samling for flere personer. Formatet står i noten om at oprette listeelementer.
Id’et er også principalid i en rettighedstildeling. Kaldene og tallene for rettighedsniveauerne står i noten om ensureUser.
Mange opslag i ét flow#
Slås de samme personer op igen og igen, kan id’erne gemmes i en objektvariabel undervejs. En variabel kan ikke sættes ud fra sig selv, så det går gennem en Compose:
Compose - Add to cache:
setProperty(variables('varUserIDCache'), variables('varUserEmail'), body('Ensure_User')?['d']?['Id'])
Set variable - varUserIDCache:
outputs('Compose_-_Add_to_cache')
variables('varUserIDCache')?[variables('varUserEmail')]
Er værdien null, er personen ikke slået op endnu.
Det der driller#
_api/web/currentUseri et flow er forbindelsens konto, ikke den, der startede flowet. Den, der har oprettet elementet, står i triggerensAuthor.- Id’et gælder ét websted. Et id fra ét websted i et kald mod et andet giver en anden person eller ingen.
- E-mail og UPN er ikke altid det samme.
getByEmailbruger e-mailen,ensureUsermedi:0#.f|membership|bruger UPN’en. - Get user profile (V2) giver Entra-objekt-id’et. Det kan ikke bruges i et personfelt eller en rettighed.