0

我试图确认我对get_fieldValues().NameSharePoint 中结果的理解是正确的。

当我使用以下代码时:

var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml('<View><Query><Where><Eq><FieldRef Name=\'ID\'/>' +'<Value Type=\'Number\'>' + managerId + '</Value></Eq>' +'</Where></Query><RowLimit>1</RowLimit></View>');

var userInfoList = hostweb.get_siteUserInfoList();
var collListItem = userInfoList.getItems(camlQuery);

currentContext.load(collListItem);  
currentContext.executeQueryAsync(onQuerySucceeded,onQueryFailed);

function onQuerySucceeded(sender, args) 
{   
var item = collListItem.itemAt(0);

var userInfo = item.get_fieldValues().Name;
}

结果,我得到一个看起来像这样的字符串:

i:0#.f|会员|example@example.org

据我了解,这分为由条/管道分隔的 3 个部分。

我不知道第一部分i:0#.f是什么,但我没有使用它,所以它不是超级重要的。

第二部分似乎是一个类别或一组用户membership,我也没有使用它。

第三个似乎是用户的电子邮件地址或登录名example@example.org

我的问题是,这第三部分可能不是电子邮件地址吗?对于我的组织来说,这部分似乎始终是一个电子邮件地址。因此,我使用它来查找特定用户的电子邮件地址,并且工作正常。问题是我正在开发的应用程序可能会被其他组织使用,我担心对于其他一些组织,该部分将不包含电子邮件,而是包含其他内容。如果是这种情况,我将检索不是电子邮件地址的内容,并尝试向其发送电子邮件——这将是一个问题,并且会破坏我的代码的某些部分。

4

1 回答 1

1

从 SharePoint 2010 开始,SharePoint 支持基于声明的身份验证。在基于声明的身份验证模式中,帐户名称以以下格式表示:

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

有关声明格式的说明,请参阅SharePoint 2013:声明编码 - 对于 SharePoint 2010 也很有价值一文。

在您的情况下,在以下情况下Forms-based authentication使用索赔类型:

  • i身份声明
  • #声明值的用户登录名格式
  • .对于字符串
  • f用于基于表单的身份验证
  • membership标识身份声明的原始颁发者
  • example@example.org为索赔价值。它不仅可以表示为电子邮件地址

要从User Information List您那里检索电子邮件地址,可以使用相应的Email属性:

var email = item.get_fieldValues().EMail;

参考

SharePoint 2013:声明编码 - 对于 SharePoint 2010 也很有价值

于 2014-07-29T08:39:41.067 回答