1

SharePoint 2007 を使用しています

プログラムでアラートを作成するためのカスタム ページを作成しました。

私たちが直面している問題は、ログインしているユーザーがサイト コレクションの管理者である場合、電子メールのみがトリガーされることです。

サイト コレクション管理者以外のユーザーがフル コントロールを持っているか、サイトへのアクセスに貢献している場合、アクセス拒否エラーが発生します。

SPSecurity.RunWithElevatedPrivileges を使用してみましたが、その場合も Access Denied エラーが発生しています。

以下のコードでは、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);
}
}
});

これに対する解決策、または実行時にプログラムでサイト コレクション管理者にユーザーを追加/削除する方法を教えてください。

4

2 に答える 2

0

宣言と割り当てをusingステートメントの上に移動します。アラートは正常に作成されたと思いますが、アカウントが間違っていたため、メールが届きませんでした。これらすべてがイベントレシーバー内にある場合は、次の行を使用して実際のユーザーを取得できます。

SPUser user = oWeb.Users.GetByID(properties.CurrentUserId);
于 2012-08-10T15:11:40.477 に答える
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);
}
}
});
于 2012-08-14T12:51:27.293 に答える