1

在 EventReceiver 中,我在添加的项目上调用此方法GetPernNr

public override void ItemAdded(SPItemEventProperties properties)
{
        SPSite site = properties.Web.Site;
        using (SPWeb currentWeb = site.OpenWeb(properties.Web.ID))
        {
             .....

             perNr = UserProfileUtils.GetPernNr(currentWeb, assignedTo.ToString());
             .....
        }
}

其中assignedTo 是SPUser。

public static string GetPernNr(SPWeb web, string accountName)
{
        string perNr = string.Empty;
        UserProfile upUser = null;
        try
        {
            PermissionSet ps = new PermissionSet(System.Security.Permissions.PermissionState.Unrestricted);
            ps.Assert();

           SPSecurity.RunWithElevatedPrivileges(delegate()
           {
               using (SPSite siteColl = new SPSite(web.Site.ID))
               {
                   SPServiceContext serviceContext = SPServiceContext.GetContext(siteColl);
                   UserProfileManager upm = new UserProfileManager(serviceContext);
                   if (upm.UserExists(accountName))
                   {
                       upUser = upm.GetUserProfile(accountName);
                       if (upUser["PersonNumber"] != null)
                       {
                           perNr = upUser["PersonNumber"].Value.ToString();
                       }
                   }
               }
           });
        }
        catch (Exception ex)
        {
            ..
        }
        finally { System.Security.CodeAccessPermission.RevertAssert(); }
        return perNr;
    }

奇怪的是,当我尝试从 UserProfile (办公室、经理等)的默认字段中获取值时,此代码有效。当我在 EventReceiver 之外调用此方法时也有效,但在我的情况下,upUser["PersonNumber"].Value返回 null。任何帮助都感激不尽

4

2 回答 2

2

您是否在中央管理员中检查了自定义属性权限。

管理中心 -> 编辑用户配置文件属性 -> 策略设置

为每个人制定默认隐私政策,然后尝试。

于 2013-08-30T10:39:38.100 回答
1

以下是 SharePoint Server 2013 的步骤:

Central Admin >应用程序管理>管理服务应用程序>您的用户配置文件应用程序>管理用户属性

从属性菜单中选择编辑选项。

现在在“策略设置”下:
设置默认隐私设置: 所有人

于 2013-09-19T12:21:49.947 回答