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 (Office、Manager など) の既定のフィールドから値を取得しようとすると機能します。また、EventReceiver の外部でこのメソッドを呼び出した場合にも機能しますが、私の場合upUser["PersonNumber"].Valueは null を返します。どんな助けでも大歓迎です

4

2 に答える 2

2

集中管理でカスタム プロパティのアクセス許可を確認しましたか。

サーバーの全体管理 -> ユーザー プロファイル プロパティの編集 -> ポリシー設定

デフォルトのプライバシーポリシーを全員に設定してから試してください。

于 2013-08-30T10:39:38.100 に答える