Here is a small function I whipped up for React web parts that need the user id.
/**
* Fetches the user ID for the specified user
* @param email the email for the user
* @returns a promise containing the user ID in the site collection
* example:
* var userID = await this.getUserIDByEmail(this.props.wpContext.pageContext.user.email);
*/
private async getUserIDByEmail(email:string):Promise<number>
{
var url = `${this.props.wpContext.pageContext.site.absoluteUrl}/_api/web/siteusers?$filter=Email eq '${email}'`;
var userData:any = await Query.GetQueryData(this.props.wpContext,url);
return userData.value[0].Id;
}
export default class Query {
public static async GetQueryData(context: WebPartContext, url: string) {
var deferred = $.Deferred();
console.log(`running query '${url}'`);
let _nometaOpt: ISPHttpClientOptions = {
headers: { 'Accept': 'application/json;odata=nometadata', 'odata-version': '', 'Content-type': 'application/json;odata=verbose' }
};
context.spHttpClient.get(url, SPHttpClient.configurations.v1, _nometaOpt).then(
(response: SPHttpClientResponse) => {
if (response.status == 200) {
console.log("got query results");
if (response.headers.get("content-type").indexOf("atom") > -1) {
console.log("Got xml instead of json on " + url);
response.text().then((text:string) => {
deferred.resolve(text);
});
}
else {
response.json().then((jsondata: JSON) => {
deferred.resolve(jsondata);
});
}
}
else {
console.log("error getting query results!");
console.log(response.status);
}
}, (err: any) => {
debugger;
console.log("error getting query results!");
console.log(err);
});
return deferred;
}
}
No comments:
Post a Comment