在Web上创buildSharepoint警报

我们目前正在开展一个涉及共享点的项目。 我们创build了一个模板网页,其中包含了每次创build新网页时我们都希望重复的特定内容。 我们已经build立了一个在webpart中运行的创buildweb用户控件。 这将从模板创build网页,设置必要的权限并添加一些function。

问题:

我们希望为启用电子邮件的安全组DOMAIN \ sharepoint设置警报。 我们正在使用这个VB.Net代码:

Dim user As SPUser = w.EnsureUser("DOMAIN\sharepoint") Dim alert As SPAlert = w.Alerts.Add() alert.User = user alert.AlertType = SPAlertType.List alert.List = w.Lists("Information") alert.Title = w.Title & " - " & alert.Title alert.Properties("eventtypeindex") = "2" alert.AlertFrequency = SPAlertFrequency.Daily alert.Update(False) 

这适用于域pipe理员的用户,但不适用于只能完全控制本站级别的用户。 但是,他们可以在创build站点后手动添加警报。 使用我自己的login名创build时,我没有任何问题,但我是域pipe理员的成员,因此也是所有SharePoint站点的pipe理员。 具有完全控制此站点的用户只能得到的错误是“拒绝访问”错误。

编辑:我从来没有真正说明我想从这个。 我想知道是否有办法绕过这个,或者如果我可以创build一个什么样的事件接收器,当networking本身创build添加警报。

编辑2:

我已经将代码更改为以下,现在我得到一个错误

 Dim authorizedCode As SPSecurity.CodeToRunElevated = New SPSecurity.CodeToRunElevated(AddressOf AddAlert) SPSecurity.RunWithElevatedPrivileges(authorizedCode) Dim new_site As New SPSite(SPContext.Current.Site.ID, sysToken) Dim web As SPWeb = new_site.AllWebs(w.ID) Dim user As SPUser = web.EnsureUser("DOMAIN\sharepoint") Dim alert As SPAlert = web.Alerts.Add() alert.User = user alert.AlertType = SPAlertType.List alert.List = web.Lists("Information") alert.Title = web.Title & " - " & alert.Title alert.Properties("eventtypeindex") = "2" alert.AlertFrequency = SPAlertFrequency.Daily alert.Update(False) 

sysToken在哪里获得

 Public Sub AddAlert() Dim lolcatKiller As SPSite = New SPSite(SPContext.Current.Site.ID) sysToken = lolcatKiller.SystemAccount.UserToken End Sub 

但我正在得到例外

System.Runtime.InteropServices.COMException: The security validation for this page is invalid.

据我所知,我仍然在systemuser的上下文中

确实有一个规避。 用RunWithElevatedPrivileges包装代码。

对于那个exception使用:web.AllowUnsafeUpdates = true;

对于SP2010,我可以通过确保占位符“PlaceholderFormDigest”不在隐藏的占位符部分

这些需要在页面上工作:

  <asp:ContentPlaceHolder id="PlaceHolderFormDigest" runat="server"> <SharePoint:FormDigest runat="server" /> </asp:ContentPlaceHolder> <input type="text" name="__spText1" title="text" style="display:none;" /> <input type="text" name="__spText2" title="text" style="display:none;" />