2012-08-08 62 views
1

我們正在使用sharepoint 2007以編程方式創建SPAlert時訪問被拒絕錯誤

我們創建了以編程方式創建警報的自定義頁面。

我們面臨的問題是,如果登錄的用戶是網站集管理員,那麼只有電子郵件被觸發。

網站集管理員以外的用戶擁有完全控制權或訪問權限的網站,他們將獲得訪問被拒絕錯誤。

我們嘗試使用SPSecurity.RunWithElevatedPrivileges,但在這種情況下,Access Denied錯誤也越來越多。

對於下面的代碼,我們沒有得到拒絕訪問錯誤,但在這種情況下,電子郵件沒有得到觸發,

SPSecurity.RunWithElevatedPrivileges(delegate() 
{ 
Guid siteId = SPContext.Current.Site.ID; 
Guid webId = SPContext.Current.Web.ID; 
using (SPSite oSite = new SPSite(siteId)) 
{ 
using (SPWeb oWeb = oSite.OpenWeb(webId)) 
{ 
oWeb.AllowUnsafeUpdates = true; 
SPUser oUser = oWeb.CurrentUser; 
SPUser user = oWeb.EnsureUser(oUser.ToString()); 
SPList oList = oWeb.Lists[strLibraryName]; 
SPAlert oAlert = user.Alerts.Add(); 
oAlert.Filter ="<Eq><FieldRef Name="+strCol+"><Value type='Text'>" + strColValue + "</Value></Eq>"; 
oAlert.Title = "test alert"; 
oAlert.AlertType = SPAlertType.List; 
oAlert.EventType = SPEventType.All; 
oAlert.List = oList; 
oAlert.AlertFrequency = SPAlertFrequency.Immediate; 
oAlert.AlwaysNotify = true; 
oAlert.Update(true); 
} 
} 
}); 

請讓我知道什麼是該解決方案或者我們如何可以添加/刪除用戶網站集合管理員在運行時以編程方式運行

+0

您可能會看到是否需要oWeb.AllowUnsafeUpdates。這取決於您在//代碼中創建警報的情況。 – buck 2012-08-08 16:25:57

+0

嗨,降壓,我更新了創建警報代碼的問題 感謝您花時間瞭解問題 – Rushikesh 2012-08-09 08:11:12

+0

其中一個問題是您的oUser變量。由於您在設置時處於提升的權限塊內部,因此oUser是您的應用程序池帳戶,而不是當前登錄的用戶。也許嘗試移動聲明並將其分配到使用語句之上。這可能是唯一的問題 - 警報正在成功創建,但它是針對錯誤的帳戶,因此該帳戶沒有收到電子郵件。如果所有這些都在事件接收器中,則可以使用以下代碼行來獲取實際用戶:SPUser user = oWeb.Users.GetByID(properties.CurrentUserId); – buck 2012-08-09 22:10:27

回答

0

將聲明和賦值放在using語句之上。我認爲警報正在成功創建,但它是針對錯誤的帳戶,因此您沒有收到電子郵件。如果這一切是一個事件接收器裏面,您可以使用此行來獲取實際的用戶:

SPUser user = oWeb.Users.GetByID(properties.CurrentUserId); 
+0

嗨降壓,問題現在解決。問題是因爲EnsureUser()方法。我剛剛刪除了SPUser用戶= oWeb.EnsureUser(oUser.ToString());行和所有工作正常。 非常感謝.. – Rushikesh 2012-08-13 07:25:30

+0

該行中聲明的變量用於其他行,因此刪除它會導致編譯錯誤。也許您可以發佈工作代碼,以便其他查看此代碼的人可以看到解決方案。 – buck 2012-08-13 18:23:43

0

的問題是與EnsureUser()方法,因此刪除它並張貼下面的工作代碼..

SPSecurity.RunWithElevatedPrivileges(delegate() 
{ 
Guid siteId = SPContext.Current.Site.ID; 
Guid webId = SPContext.Current.Web.ID; 
using (SPSite oSite = new SPSite(siteId)) 
{ 
using (SPWeb oWeb = oSite.OpenWeb(webId)) 
{ 
oWeb.AllowUnsafeUpdates = true; 
SPUser oUser = oWeb.CurrentUser; 
SPList oList = oWeb.Lists[strLibraryName]; 
SPAlert oAlert = oUser.Alerts.Add(); 
oAlert.Filter ="<Eq><FieldRef Name="+strCol+"><Value type='Text'>" + strColValue + "</Value></Eq>"; 
oAlert.Title = "test alert"; 
oAlert.AlertType = SPAlertType.List; 
oAlert.EventType = SPEventType.All; 
oAlert.List = oList; 
oAlert.AlertFrequency = SPAlertFrequency.Immediate; 
oAlert.AlwaysNotify = true; 
oAlert.Update(true); 
} 
} 
});