博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在 Visual Studio 2010 中创建 SharePoint 2010 事件接收器
阅读量:5884 次
发布时间:2019-06-19

本文共 7422 字,大约阅读时间需要 24 分钟。

概述

Microsoft Visual Studio 2010 提供了一个可用于生成事件接收器的项目类型,事件接收器会在 Microsoft SharePoint 2010 网站上选择事件之前或之后执行操作。此示例演示如何将事件添加到自定义列表项的添加和更新操作中。

 

编码

此 SharePoint 直观操作方法介绍了用于在 Visual Studio 2010 中创建和部署事件接收器的以下步骤:

  1. 重写 itemAdding 事件和 itemUpdating 事件。
  2. 验证正在将项目添加到的列表是否为“Open Position”列表。
  3. 提升权限,使此代码能访问安全网站以检索批准的职务。
  4. 将批准的“Job Titles”与在“Open Position”列表中创建的新项的职位进行比较。
  5. 在“Job Title”未获得批准时取消此事件。

在此示例中,安全子网站包含一个名为“Job Definitions”的列表,此列表为组织中的角色指定允许的职务。除职务之外,此列表还包含有关职务的工资机密信息,因此应阻止用户获取此信息。主网站中有一个名为“Open Positions”的列表,该列表将跟踪组织中的空缺。您为 itemAddingitemUpdating 事件创建两个事件接收器,它们将验证开放职位是否匹配“Job Definitions”列表中批准的职位之一。

先决条件

开始之前,创建子网站和所需列表。

创建“Job Definitions”子网站

  1. 在主网站的“网站操作”菜单上,单击“新建网站”。

  2. 在“新建网站”对话框中,单击“空白网站”。

  3. 在该对话框的右侧,单击“更多选项”。

  4. 在“标题”框中,键入 Job Definitions

  5. 在“网站地址”框中键入 JobDefinitions

  6. 在“权限”部分,单击“使用独有权限”,然后单击“创建”。

  7. 在“此网站的访问者”部分,选择“使用现有用户组”,然后选择“工作组网站所有者”。单击“确定”。

创建“Job Definitions”列表

  1. 在“Job Definitions”网站中,创建一个名为“Job Definitions”的自定义列表,此列表包含以下列:

    • Title(默认列)
    • MinSalary(货币)
    • MaxSalary(货币)
    • Role Type(选项:“Permanent”、“Contract”)
  2. 向此列表添加多个工作。请记下为创建的每个工作指定的职务,因为您稍后需要用到它们。

创建“Open Positions”列表

  • 在父网站中,创建一个名为“Open Positions”的自定义列表,此列表包含以下列:

    • Title(默认列)
    • Location(单行文本)

创建事件接收器

紧接着,在 Visual Studio 2010 中创建一个“事件接收器”项目,然后向事件接收器文件添加代码。

在 Visual Studio 2010 中创建 SharePoint 2010 事件接收器

  1. 启动 Visual Studio 2010。

  2. 在“文件”菜单上,单击“新建”,然后单击“项目”。

  3. 在“新建项目”对话框中的“已安装的模板”部分,展开“Visual Basic”或“Visual C#”,展开“SharePoint”,然后单击“2010”。

  4. 在模板列表中,单击“事件接收器”。

  5. 在“名称”框中键入 VerifyJob

  6. 保留其他字段的默认值不变,然后单击“确定”。

  7. 在“要使用哪个本地站点进行调试?”列表中,选择您的网站。

  8. 选择“部署为场解决方案”选项,然后单击“下一步”。

  9. 在“选择事件接收器设置”页的“需要哪种类型的事件接收器?”列表中,选择“列表项事件”。

  10. 在“哪个项应为事件源?”列表中,选择“自定义列表”。

  11. 在“处理以下事件”下,选中“正在添加项”和“正在更新项”复选框。单击“完成”。

修改事件接收器文件

  1. 在事件接收器文件中,向类添加以下代码。

    VB
    Public Function CheckItem(ByVal properties As SPItemEventProperties) As BooleanDim jobTitle As String = properties.AfterProperties("Title").ToString()    Dim allowed As Boolean = False    Dim jobDefWeb As SPWeb = Nothing    Dim jobDefList As SPList    Dim privilegedAccount As SPUser = properties.Web.AllUsers("SHAREPOINT\SYSTEM")   Dim privilegedToken As SPUserToken = privilegedAccount.UserToken    Try        Using elevatedSite As New SPSite(properties.Web.Url, privilegedToken)            Using elevatedWeb As SPWeb = elevatedSite.OpenWeb()                jobDefWeb = elevatedWeb.Webs("JobDefinitions")                jobDefList = jobDefWeb.Lists("Job Definitions")                For Each item As SPListItem In jobDefList.Items                    If item("Title").ToString() = jobTitle Then                        allowed = True                        Exit For                    End If                Next            End Using        End Using        Return (allowed)    Finally        jobDefWeb.Dispose()    End TryEnd Function

     

    C#
    bool checkItem(SPItemEventProperties properties)  {      string jobTitle = properties.AfterProperties["Title"].ToString();      bool allowed = false;      SPWeb jobDefWeb = null;      SPList jobDefList;      SPUser privilegedAccount = properties.Web.AllUsers[@"SHAREPOINT\SYSTEM"];      SPUserToken privilegedToken = privilegedAccount.UserToken;      try      {          using (SPSite elevatedSite = new SPSite(properties.Web.Url, privilegedToken))          {              using (SPWeb elevatedWeb = elevatedSite.OpenWeb())              {                  jobDefWeb = elevatedWeb.Webs["JobDefinitions"];                  jobDefList = jobDefWeb.Lists["Job Definitions"];                  foreach (SPListItem item in jobDefList.Items)                  {                      if (item["Title"].ToString() == jobTitle)                      {                          allowed = true;                          break;                      }                  }              }          }          return (allowed);      }      finally      {          jobDefWeb.Dispose();      }  }
  2. 在“EventReceiver1”文件中,将 ItemAdding 方法替换为以下代码。

    VB
    Public Overrides Sub ItemAdding(properties as SPItemEventProperties)    Try        Dim allowed As Boolean = True        If properties.ListTitle = "Open Positions" Then            allowed = CheckItem(properties)        End If        If allowed = False Then            properties.Status = SPEventReceiverStatus.CancelWithError            properties.ErrorMessage = _              "The job you have entered is not defined in the Job Definitions List"            properties.Cancel = True        End If    Catch ex As Exception        properties.Status = SPEventReceiverStatus.CancelWithError        properties.ErrorMessage = ex.Message        properties.Cancel = True    End TryEnd Sub

     

    C#
    public override void ItemAdding(SPItemEventProperties properties)    {      try        {            bool allowed = true;            if (properties.ListTitle == "Open Positions")            {             allowed = checkItem(properties);            }                       if (!allowed)            {               properties.Status = SPEventReceiverStatus.CancelWithError;               properties.ErrorMessage =                 "The job you have entered is not defined in the Job Definitions List";               properties.Cancel = true;            }        }        catch (Exception ex)        {            properties.Status = SPEventReceiverStatus.CancelWithError;            properties.ErrorMessage = ex.Message;            properties.Cancel = true;        }    }
  3. 在“EventReceiver1”文件中,将 ItemUpdating 方法替换为以下代码。

    VB
    Public Overrides Sub ItemUpdating(properties as SPItemEventProperties)        Try            Dim allowed As Boolean = True            If properties.ListTitle = "Open Positions" Then                allowed = CheckItem(properties)            End If            If allowed = False Then                properties.Status = SPEventReceiverStatus.CancelWithError                properties.ErrorMessage = _                  "The job you have entered is not defined in the Job Definitions List"                properties.Cancel = True            End If        Catch ex As Exception            properties.Status = SPEventReceiverStatus.CancelWithError            properties.ErrorMessage = ex.Message            properties.Cancel = True        End TryEnd Sub

     

    C#
    public override void ItemUpdating(SPItemEventProperties properties)    {                   bool allowed = true;        if (properties.ListTitle == "Open Positions")        {            allowed = checkItem(properties);        }                try        {                        if (!allowed)            {                properties.Status = SPEventReceiverStatus.CancelWithError;                properties.ErrorMessage =                  "The job you have entered is not defined in the Job Definitions List";                properties.Cancel = true;            }        }        catch (Exception ex)        {            properties.Status = SPEventReceiverStatus.CancelWithError;            properties.ErrorMessage = ex.Message;            properties.Cancel = true;        }    }

部署项目

  1. 在解决方案资源管理器中,右键单击该项目,然后单击“部署”

  2. 在 SharePoint 网站的“Open Positions”列表中,单击“添加新项”。

  3. 在“Title”字段中,为未包含在安全子网站中的“Job Definitions”列表中的工作说明提供职务。

  4. 单击“保存”。您将收到一条来自事件接收器的消息。

  5. 在“Title”字段中,为包含在安全子网站中的“Job Definitions”列表中的工作说明提供职务。

  6. 单击“保存”。这将创建此职位。

读取

  • 此解决方案将重写 ItemAddingItemUpdating 方法,并验证正在将项目添加到的列表是否为“Open Positions”列表。如果是,则调用 CheckItem 方法,以传入与此事件关联的属性。
  • CheckItem 方法中,提升权限以确保成功访问安全子网站。将批准的列表中的职务和此事件所关联的 properties.AfterProperties 属性的职务进行比较。如果任何职务匹配,则将 allowedBoolean 变量设置为 true,并且此方法将返回。
  • 根据 allowed 变量的值,调用方法将允许此事件或设置 properties.ErrorMessage 属性,然后使用 properties.cancel 取消此事件。

转载于:https://www.cnblogs.com/TNSSTAR/p/3262291.html

你可能感兴趣的文章
ASP.NET 免费开源控件
查看>>
面向对象葵花宝典阅读思维导图(二)
查看>>
volatile关键字与线程间通信
查看>>
优秀大数据GitHub项目一览
查看>>
TCP/IP详解学习笔记(8)-DNS域名系统
查看>>
通过维基API实现维基百科查询功能
查看>>
bootstrap 2
查看>>
Annotation研究的一些学习资料
查看>>
webpack资料
查看>>
DotNet加密方式解析--散列加密
查看>>
OpenSSL使用2(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12概念说明)(转)
查看>>
win 下 apache 虚拟主机配置方式
查看>>
第十一篇:基于TCP的一对回射客户/服务器程序及其运行过程分析( 下 )
查看>>
【HDU1219】AC Me(水题)
查看>>
【前端】:HTML
查看>>
从JDBC程序看为什么需要Mybatis
查看>>
ZOJ 1403&&HDU 1015 Safecracker【暴力】
查看>>
更新软件
查看>>
Windows10锁屏壁纸提取
查看>>
SSM框架——使用MyBatis Generator自动创建代码
查看>>