2011-05-14 46 views
0

我正在嘗試爲使用編程登錄用戶添加警報。這是給「訪問被拒絕」。 我在SPSecurity.RunWithElevatedPrivileges(delegate()下運行此代碼。我在所有地方查看了應用程序池標識權限。他位於Farm Admin組,網站集組和數據庫所有者組中。仍然有相同的錯誤。爲什麼會這樣呢?Alert.update()授予訪問在SharePoint中被拒絕?

protected void ChkBx41_CheckedChanged(object sender, EventArgs e) 
{ 
    SPUser user = SPContext.Current.Web.CurrentUser; 
    SPSecurity.RunWithElevatedPrivileges(delegate() 
    { 
     using (SPWeb eweb = new SPSite(url.Text).OpenWeb()) 
     { 
      SPUser juser = null; 
      eweb.AllowUnsafeUpdates = true; 
      try 
      { 
       juser = eweb.AssociatedMemberGroup.Users[user.LoginName]; 
      } 
      catch (Exception) 
      { 
      } 
      if (ChkBx41.Checked) 
      { 
       if (juser == null) 
       { 
        eweb.AssociatedMemberGroup.AddUser(eweb.EnsureUser(user.LoginName)); 
        createalert(SPAlertFrequency.Daily, eweb, eweb.EnsureUser(user.LoginName),true); 
       } 
       RBList4.SelectedValue = "Daily"; 
       RBList4.Enabled = true; 
      } 
      else 
      { 
       if (juser != null) 
       { 
        eweb.AssociatedMemberGroup.RemoveUser(juser); 
        removealert(eweb, juser); 
        RBList4.SelectedValue = null; 
        RBList4.Enabled = false; 
       } 
      } 

     } 
    }); 
} 
public void createalert(SPAlertFrequency frq, SPWeb pweb, SPUser puser,bool mail) 
    { 
     try 
     { 
      pweb.AllowUnsafeUpdates = true; 
      foreach (SPList lst in pweb.Lists) 
      { 
       if (lst.BaseTemplate == SPListTemplateType.Announcements || lst.BaseTemplate == SPListTemplateType.DiscussionBoard || lst.BaseTemplate == SPListTemplateType.Events) 
       { 
        SPAlert alt = puser.Alerts.Add(); 
        alt.AlertType = SPAlertType.List; 
        alt.List = lst; 
        alt.EventType = SPEventType.All; 
        alt.AlertFrequency = frq; 
        alt.Title = "SPE " + lst.Title; 
        if (frq != SPAlertFrequency.Immediate) 
        { 
         alt.AlertTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 15, 0, 0); 
        } 
        if (mail) 
        {        
         alt.Update(); // Access denied exception 
        } 
        else 
        { 
         alt.Update(false); 
        } 
       } 
       } 
      } 
      pweb.AllowUnsafeUpdates = false; 
     } 
     catch (Exception ee) { 
      throw ee.Message; 
     } 
     pweb.Dispose(); 
    } 

回答

0

我不知道這是否是解決方案。你可以請在更新eweb之前繼續(創建/刪除警報)

eweb.AssociatedMemberGroup.AddUser(eweb.EnsureUser(user.LoginName)); 
eweb.AssociatedMemberGroup.Update(); 
eweb.update(); 
+0

我也試過這個。仍然有相同的錯誤。 – James123 2011-05-16 14:58:11