Populate people picker during PreSaveAction in Sharepoint online
-
07-02-2021 - |
Frage
I want to auto populate user manager name from employee column which is a people picker column. I am able to get all properties and able to fetch user profile properties as well using below code but how to populate base on employee name which is people picker
<script>
$( document ).ready(function() {
getItems();
});
function getItems() {
//alert("djdj")
var siteUrl = _spPageContextInfo.siteAbsoluteUrl;
$.ajax({
url: siteUrl + "/_api/SP.UserProfiles.PeopleManager/GetMyProperties",
type: "GET",
headers: {
"accept": "application/json;odata=verbose",
},
success: function (data) {
console.log(data);
var Manager = data.d.UserProfileProperties.results[17].Value;
console.log(Manager);
},
error: function (error) {
alert(JSON.stringify(error));
}
});
}
</script>
Lösung
Below is working fine, Inspired by answer from @Hellofiano_MSFT
<script>
function PreSaveAction() {
GetValuePeoplePicker();
return true;
}
function getUserManager(username){
var manager="";
var requestUri = _spPageContextInfo.webAbsoluteUrl + "/_api/SP.UserProfiles.PeopleManager/GetUserProfilePropertyFor(accountName=@v,propertyName='Manager')?@v='"+username+"'";
$.ajax({
url: requestUri,
method: "GET",
async:false,
headers: { "Accept": "application/json; odata=verbose" },
success: function (data) {
manager = data.d.GetUserProfilePropertyFor;
SetAndResolvePeoplePicker("Manager", manager)
},
error: function (data) {
}
});
return manager;
}
function SetAndResolvePeoplePicker(fieldName, userName) {
var _PeoplePicker = $("div[title='" + fieldName + "']");
var _PeoplePickerTopId = _PeoplePicker.attr('id');
var _PeoplePickerEditer = $("input[title^='" + fieldName + "']");
_PeoplePickerEditer.val(userName);
var _PeoplePickerOject = SPClientPeoplePicker.SPClientPeoplePickerDict[_PeoplePickerTopId];
_PeoplePickerOject.AddUnresolvedUserFromEditor(true);
}
function GetValuePeoplePicker(fieldName) {
var _PeoplePicker = $("div[title='" + fieldName + "']");
var _PeoplePickerTopId = _PeoplePicker.attr('id');
var _PeoplePickerEditer = $("input[title^='" + fieldName + "']");
var _PeoplePickerOject = SPClientPeoplePicker.SPClientPeoplePickerDict[_PeoplePickerTopId];
var userinfo = _PeoplePickerOject.GetAllUserInfo();
console.log(userinfo);
console.log(userinfo[0].EntityData.Email);
getUserManager(userinfo[0].EntityData.Email)
}
</script>
Andere Tipps
Try to use the script as below:
<script src="//code.jquery.com/jquery-3.1.0.min.js" type="text/javascript"></script>
<script type="text/javascript">
function PreSaveAction() {
PopulateManager();
return true;
}
function PopulateManager() {
var nominees = $(".sp-peoplepicker-userSpan[id*='Nomination_x0028_s_x0029']");
$.each(nominees, function(index,value){
var username = $(value).attr("sid").split("|")[1];
var manager=getUserManager(username);
SetAndResolvePeoplePicker("Managers", manager);
});
}
function getUserManager(username){
var manager="";
var requestUri = _spPageContextInfo.webAbsoluteUrl + "/_api/SP.UserProfiles.PeopleManager/GetUserProfilePropertyFor(accountName=@v,propertyName='Manager')?@v='"+username+"'";
$.ajax({
url: requestUri,
method: "GET",
async:false,
headers: { "Accept": "application/json; odata=verbose" },
success: function (data) {
manager = data.d.GetUserProfilePropertyFor;
},
error: function (data) {
}
});
return manager;
}
function SetAndResolvePeoplePicker(fieldName, userName) {
var _PeoplePicker = $("div[title='" + fieldName + "']");
var _PeoplePickerTopId = _PeoplePicker.attr('id');
var _PeoplePickerEditer = $("input[title^='" + fieldName + "']");
_PeoplePickerEditer.val(userName);
var _PeoplePickerOject = SPClientPeoplePicker.SPClientPeoplePickerDict[_PeoplePickerTopId];
_PeoplePickerOject.AddUnresolvedUserFromEditor(true);
}
</script>
Reference: Populate people picker during PreSaveAction
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange