unable to get value of a global variable
문제
I have created one function GetUserInfo
which is calling another function GetUserId
.
I want value of txtAppArchitectId
variable to be stored globally so that I can access that after the function is called. But I am unable to retain its value due to some scope issue.
Please assist.
I have already declared txtAppArchitectId
variable in $(document).ready()
.
function getUserInfo(peoplePickerElementId) {
try{
var toSpanKey = peoplePickerElementId+ "_TopSpan";
var peoplePicker = null;
var ClientPickerDict = this.SPClientPeoplePicker.SPClientPeoplePickerDict;
for (var propertyName in ClientPickerDict) {
if (propertyName == toSpanKey) {
peoplePicker = ClientPickerDict[propertyName];
break;
}
}
if (peoplePicker != null) {
// Get information about all users.
var users = peoplePicker.GetAllUserInfo();
var userInfo = '';
for (var i = 0; i < users.length; i++) {
var user = users[i];
for (var userProperty in user) {
userInfo += userProperty + ': ' + user[userProperty] + '<br>';
}
}
// Get user keys.
var keys = peoplePicker.GetAllUserKeys();
if(users[0].Key != null && users[0].Key != '')
{
// $('#userKeys').html(keys);
var u=users[0].Key;
// Get the first user's ID by using the login name.
var x = getUserId(users[0].Key,peoplePickerElementId);
alert(x[1]);
}
}
}
catch(err){}
}
// Get the user ID.
function getUserId(loginName,peoplePickerElementId) {
debugger;
var deferred = $.Deferred();
var context = new SP.ClientContext.get_current();
var user = context.get_web().ensureUser(loginName);
context.load(user);
try
{
debugger;
context.executeQueryAsync(function(){
debugger;
var pepuserid = peoplePickerElementId+"?"+ user.get_id();
var UniqueID = pepuserid.split("?")[1];
var UniquedivID = pepuserid.split("?")[0];
var RequestorDiv ='txtAppArchitect';
if(RequestorDiv == UniquedivID)
{
txtAppArchitectId = UniqueID;
//alert("hello" +txtAppArchitectId);
}
},
function(sender, args){
alert(args.get_message());
});
}
catch(err){}
return [deferred.promise(),txtAppArchitectId];
}
해결책
Modify the code as below.
function getUserInfo(peoplePickerElementId) {
try{
var toSpanKey = peoplePickerElementId+ "_TopSpan";
var peoplePicker = null;
var ClientPickerDict = this.SPClientPeoplePicker.SPClientPeoplePickerDict;
for (var propertyName in ClientPickerDict) {
if (propertyName == toSpanKey) {
peoplePicker = ClientPickerDict[propertyName];
break;
}
}
if (peoplePicker != null) {
// Get information about all users.
var users = peoplePicker.GetAllUserInfo();
var userInfo = '';
for (var i = 0; i < users.length; i++) {
var user = users[i];
for (var userProperty in user) {
userInfo += userProperty + ': ' + user[userProperty] + '<br>';
}
}
// Get user keys.
var keys = peoplePicker.GetAllUserKeys();
if(users[0].Key != null && users[0].Key != '') {
// $('#userKeys').html(keys);
var u=users[0].Key;
// Get the first user's ID by using the login name.
var userId = getUserId(users[0].Key);
alert(userId);
}
}
}
catch(err){}
}
function getUserId(loginName){
var userId=-1;
/// get the site url
var siteUrl = _spPageContextInfo.siteAbsoluteUrl;
var payload = { 'logonName': loginName};
/// make an ajax call to get the site user
$.ajax({
url: siteUrl + "/_api/web/ensureuser",
method: "POST",
async:false,
contentType: "application/json;odata=verbose",
data: JSON.stringify(payload),
headers: {
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"accept": "application/json;odata=verbose"
},
success: function (data) {
userId=data.d.Id;
},
error: function (data) {
}
});
return userId;
}
If you allow multiple users, modify the code as below.
function getUserInfo(peoplePickerElementId) {
try{
var toSpanKey = peoplePickerElementId+ "_TopSpan";
var peoplePicker = null;
var ClientPickerDict = this.SPClientPeoplePicker.SPClientPeoplePickerDict;
for (var propertyName in ClientPickerDict) {
if (propertyName == toSpanKey) {
peoplePicker = ClientPickerDict[propertyName];
break;
}
}
if (peoplePicker != null) {
// Get information about all users.
var users = peoplePicker.GetAllUserInfo();
var userInfo = '';
var userIds=[];
for (var i = 0; i < users.length; i++) {
var user = users[i];
for (var userProperty in user) {
userInfo += userProperty + ': ' + user[userProperty] + '<br>';
}
var userId=GetUserId(users[i].Key);
if(userId!=-1){
userIds.push(userId);
}
}
alert(userIds.toString());
}
}
catch(err){}
}
다른 팁
instead of $(document).ready() function, declare a variable above to it.
Example:
var txtAppArchitectId = "";
$(document).ready(function(){
//Do your stuff
});
function getUserInfo(peoplePickerElementId) {
try{
var toSpanKey = peoplePickerElementId+ "_TopSpan";
var peoplePicker = null;
var ClientPickerDict = this.SPClientPeoplePicker.SPClientPeoplePickerDict;
for (var propertyName in ClientPickerDict) {
if (propertyName == toSpanKey) {
peoplePicker = ClientPickerDict[propertyName];
break;
}
}
if (peoplePicker != null) {
// Get information about all users.
var users = peoplePicker.GetAllUserInfo();
var userInfo = '';
for (var i = 0; i < users.length; i++) {
var user = users[i];
for (var userProperty in user) {
userInfo += userProperty + ': ' + user[userProperty] + '<br>';
}
}
// Get user keys.
var keys = peoplePicker.GetAllUserKeys();
if(users[0].Key != null && users[0].Key != '')
{
// $('#userKeys').html(keys);
var u=users[0].Key;
// Get the first user's ID by using the login name.
var x = getUserId(users[0].Key,peoplePickerElementId);
alert(x[1]);
}
}
}
catch(err){}
}
// Get the user ID.
function getUserId(loginName,peoplePickerElementId) {
debugger;
var deferred = $.Deferred();
var context = new SP.ClientContext.get_current();
var user = context.get_web().ensureUser(loginName);
context.load(user);
try
{
debugger;
context.executeQueryAsync(function(){
debugger;
var pepuserid = peoplePickerElementId+"?"+ user.get_id();
var UniqueID = pepuserid.split("?")[1];
var UniquedivID = pepuserid.split("?")[0];
var RequestorDiv ='txtAppArchitect';
if(RequestorDiv == UniquedivID)
{
txtAppArchitectId = UniqueID;
return [deferred.promise(),txtAppArchitectId];
//alert("hello" +txtAppArchitectId);
}
},
function(sender, args){
alert(args.get_message());
});
}
catch(err){}
}
제휴하지 않습니다 sharepoint.stackexchange