使用SharePoint 2013 Online中的JSOM通过电子邮件获取用户配置文件

时间:2014-09-29 06:07:55

标签: office365 sharepoint-online

我正在使用JSOM在SP 2013 Online中使用SharePoint托管应用。我的要求是使用电子邮件ID获取用户配置文件属性。 我知道我们可以使用输入作为帐户名称来获取任何用户个人资料,例如

userProfileProperty = peopleManager.getUserProfilePropertyFor(accountName, propertyName)

但是可以使用用户的电子邮件ID进行相同操作吗?

1 个答案:

答案 0 :(得分:3)

SP.UserProfiles.PeopleManager.getUserProfilePropertyFor方法需要以声明格式提供accountName参数

关于身份声明格式

SharePoint 2013和SharePoint 2010使用以下编码格式显示标识声明:

<IdentityClaim>:0<ClaimType><ClaimValueType><AuthMode>|<OriginalIssuer (optional)>|<ClaimValue>

请按照这篇文章进行解释。

对于SharePoint Online(SPO),帐户使用以下格式:

i:0#.f|membership|username@tenant.onmicrosoft.com 

索赔可以通过电子邮件地址构建:

function toClaim(email)
{
    return String.format('i:0#.f|membership|{0}',email);
}

实施例

var email = 'username@tenant.onmicrosoft.com'; 
var profilePropertyName = "PreferredName";
var accountName = toClaim(email);


function getUserProfilePropertyFor(accountName,profilePropertyName,success,failure)
{
   var context = SP.ClientContext.get_current();
   var peopleManager = new SP.UserProfiles.PeopleManager(context);
   var userProfileProperty = peopleManager.getUserProfilePropertyFor(accountName,profilePropertyName);

   context.executeQueryAsync(
   function(){
      success(userProfileProperty);
   }, 
   failure);
}

用法

getUserProfilePropertyFor(accountName,profilePropertyName,
   function(property){
      console.log(property.get_value());
   }, 
   function(sender,args){
      console.log(args.get_message());    
   });

参考

SharePoint 2013: Claims Encoding