天天看点

使用对象模型创建SharePoint2010列表并使用Feature部署

使用可视化页面创建SharePoint2010列表是件很简单的事,只需要使用鼠标通过点击即可实现创建一个完整的列表,可以在创建窗口上选择列表模板来创建不同类型的列表实例,以实现存储不同类型的数据。如图1所示的创建窗口:

使用对象模型创建SharePoint2010列表并使用Feature部署

图1

图1是SharePoint2010所有列表模板,当然我们也可以开发自己的列表模板存放在图1中。一般情况下没有特殊需要都以“自定义列表”模板来创建列表实例,基于“自定义列表”模板创建的列表默认情况下只有一个“标题”字段可供用户输入数据,用户也可以添加自己的栏来存储其他类型的数据。也就是说在SharePoint2010中要想创建列表必须基于某个模板来创建,使用对象模型创建列表也是如此。

下面是在VS2010中使用对象模型创建列表的例子,并使用Feature部署,如图2所示:

使用对象模型创建SharePoint2010列表并使用Feature部署

图2

在图2的VS2010解决方案资源管理器中右击“Features”文件夹,并在弹出的菜单中选择“添加功能”,如图3所示:

使用对象模型创建SharePoint2010列表并使用Feature部署

图3

在图3中将创建的功能Feature1的名称修改为“CreateList”并右击它,在弹出的菜单中点击其中的“添加事件接收器”,如图4所示:

使用对象模型创建SharePoint2010列表并使用Feature部署

图4

在图4中创建的CreateListEventReceiver类继承于SPFeatureReceiver基类,此类主要用于处理在激活、停用、安装、卸载和升级功能的过程中引发的事件。

图4的FeatureActivated事件是用来处理在激活Feature时执行的代码,要创建列表首先要实例化一个SPSite对象,代码如下:

view source print ?

1

using

(SPSite site =

new

SPSite(“http:

//develop”))

2

{

3

}

在using中实例化SPSite对象不用手工释放资源,比较安全,建议使用此方法实例化对象。使用SPSite对象用来实例化一个网站集的对象,这也是所有对网站操作的入口。

然后再在SPSite对象上获取一个网站,因为列表是在网站上存在的,所以还需要创建一个SPWeb对象,代码如下:

view source print ?

1

using

(SPSite site =

new

SPSite(“http:

//develop”))

2

{

3

using

(SPWeb web = site.RootWeb)

4

{

5

}

6

}

上面的代码中使用site.RootWeb来获取网站集中的根网站。下面我们在根网站下基于“自定义列表”模板来创建一个列表。完整的代码如下:

view source print ?

01

public

override

void

FeatureActivated(SPFeatureReceiverProperties properties)

02

{

03

//实例化SPSite对象

04

using

(SPSite site =

new

SPSite(“http:

//develop”))

05

{

06

//获取SPWeb对象

07

using

(SPWeb web = site.RootWeb)

08

{

09

//允许在不安全的Get上更新

10

web.AllowUnsafeUpdates =

true

;

11

//在网站中添加基于自定义模板的列表

12

Guid newListId = web.Lists.Add(

"项目总结"

,

"列表描述"

, SPListTemplateType.GenericList);

13

//获取创建好的列表

14

SPList list = web.Lists[newListId];

15

//在快速启动栏上显示此列表

16

list.OnQuickLaunch =

true

;

17

list.Update();

18

}

19

}

20

}

在上面的代码中,在SPWeb对象上使用AllowUnsafeUpdates属性来设置允许在网站中添加列表的操作。创建列表要使用SPWeb对象的Lists.Add()方法,返回的类型为GUID,web.Lists.Add()方法中的三个参数的含义如下:

  1. 第一个参数表示创建列表的标题。
  2. 第二个参数表示对列表的描述。
  3. 第三个参数是使用SPListTemplateType获取要基于那个列表模板创建列表,GenericList表示自定义列表模板。

创建好的列表就可以根据其GUID来获取SPList对象了,获取到SPList对象之后,就可以使用SPList的OnQuickLaunch属性设置此列表是否在快速启动栏上显示。最后使用List.Update()更新以上的所有操作。

上面的代码是在激活Feature时就创建列表的例子,下面我们再写一段代码,当此Feature被停用时就删除创建的列表,这段代码要写在图4的FeatureDeactivating事件中。完整的代码如下:

view source print ?

01

public

override

void

FeatureDeactivating(SPFeatureReceiverProperties properties)

02

{

03

using

(SPSite site =

new

SPSite(“http:

//develop”))

04

{

05

using

(SPWeb web = site.RootWeb)

06

{

07

web.AllowUnsafeUpdates =

true

;

08

SPList list = web.Lists[

"项目总结"

];

09

list.Delete();

10

}

11

}

12

}

在上面的代码中首先按刚才创建的列表名称获取到SPList对象,然后再使用SPList对象的Delete()方法删除此列表。

上面所有代码编写完成之后,就可以使用VS2010的部署功能将此Feature部署到SharePoint2010的根网站上,部署成功之后,我们打开“网站操作”菜单下的“网站设置”页面并点击其中的“管理网站功能”链接,如图5所示:

使用对象模型创建SharePoint2010列表并使用Feature部署

图5

在图5的顶部我们可以看到一个名称为:“Example.SharePoint2010 Feature1”的功能,它就是我们在上面部署的创建列表的Feature。VS2010部署时会自动安装、部署此Feature。因为我们在激活Feature时编写了创建列表的代码,所以我们应该能在根网站下看到创建的新列表,如图6所示:

使用对象模型创建SharePoint2010列表并使用Feature部署

图6

如图6看到的“项目总结”列表就是我们使用SharePoint2010对象模型创建的列表。由于是基于“自定义列表”模板创建的,所以在图6中只能看到此列表的一个“标题”栏。

由于我们在停用此Feature时编写了一段删除“项目总结”列表的代码,所以当我们在图5中点击“Example.SharePoint2010 Feature1”功能的“停用”按钮,则会删除“项目总结”列表,如图7所示:

使用对象模型创建SharePoint2010列表并使用Feature部署

图7

如图7所示在左侧的快速启动栏上已经看不到“项目总结”的列表了,且右侧的“Example.SharePoint2010 Feature1”功能已处于“停用”状态了。也就是我们在停止Feature时编写删除列表的代码已经起作用了。

继续阅读