문제

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){}                                        
      }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top