I need to get user properties such as email, id, account name, department, and job title using JavaScript. I can successfully pull someone's display name from a people picker field, however, trying to get the properties back has been a chore. Below is the code I'm using to try to bring back the properties. I'm receiving two errors from this code.
function getUserInfo(displayName, successCallback, errorCallback) {
var context = new SP.ClientContext.get_current();
var userInfoList = context.get_web().get_siteUserInfoList();
var query = new SP.CamlQuery();
query.set_viewXml("<View><Query><Where><Eq><FieldRef Name='Name' /><Value Type='Text'>" + displayName + "</Value></Eq></Where></Query></View>");
var userInfoItems = userInfoList.getItems(query);
context.load(userInfoItems);
context.executeQueryAsync(
function() {
if (userInfoItems.get_count() > 0) {
var userInfoItem = userInfoItems.itemAt(0);
var userProperties = {
"ID": userInfoItem.get_item("ID"),
"Name": userInfoItem.get_item("Name"),
"Department": userInfoItem.get_item("Department"),
"WorkPhone": userInfoItem.get_item("WorkPhone"),
"Email": userInfoItem.get_item("EMail"),
"JobTitle": userInfoItem.get_item("Title")
};
successCallback(userProperties);
} else {
errorCallback("No user found with the display name '" + displayName + "'"); [Error #2]
}
},
errorCallback
);
}
Here is my calling function:
getUserInfo(
"Smoe, Joe",
function(userProperties) {
console.log(userProperties);
},failure);
Error Function:
// ON FAILURE
function failure(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace()); [Error #1]
}
Error #1: Uncaught TypeError: Cannot read properties of undefined (reading 'get_message')
Error #2 at Array. (Functions2.js:165:17) <-- This line points back to the errorcallback function called above.
The hard-coded examples I've been using for display names are 100% users in SharePoint, and I can view their names in the user information list. Is there an easier or better way of doing this using code?