检查PeopleManager上是否存在personProperty

时间:2018-02-21 10:12:30

标签: c# sharepoint csom

我有以下代码从AD中的用户检索数据:

PeopleManager peopleManager = new PeopleManager(clientContext);
PersonProperties personProperties = peopleManager.GetPropertiesFor(loginName);
clientContext.Load(personProperties);
clientContext.Load(personProperties, p => p.AccountName, p => p.UserProfileProperties);
clientContext.ExecuteQuery();

var personalUrl=personProperties.PersonalUrl;

最后一行会在某些上引发错误,但不会在所有用户上引发错误:

  

Microsoft.SharePoint.Client.ServerObjectNullReferenceException:对象引用未设置为服务器上对象的实例。该对象与方法GetPropertiesFor相关联。      在Microsoft.SharePoint.Client.ClientObject.CheckUninitializedProperty(String propName)      在Microsoft.SharePoint.Client.UserProfiles.PersonProperties.get_PersonalUrl()

如此简单地说:在尝试检索值之前是否有方法检查该属性是否已设置?

或者try..catch是解决这个问题的唯一(丑陋)方法吗?

1 个答案:

答案 0 :(得分:1)

PersonProperties对象具有IsPropertyAvailable方法,该方法根据属性是否设置返回布尔值。

https://msdn.microsoft.com/en-us/library/ee546589.aspx

所以最后一行需要替换为:

string personalUrl=personProperties.IsPropertyAvailable("PersonalUrl")?personProperties.PersonalUrl:null;