然后继承Microsoft.Sharepoint.WebPartPages.WebPart这个类,重写里面的RenderWebPart(System.Web.UI.HtmlTextWriter output)方法,然后编译,就OK了。
编译完后,就生成一个dll,下面就是部署的问题了,确切的说,Sharepoint2007里面的webpart部署还是值得研究的。
第一种部署方式是部署到bin目录里面,这种方式部署的webpart只能归当前的虚拟服务器使用;第二种方式则是部署到GAC里面,这样部署的webpart则可以在所有的虚拟服务器中使用,并且还具有较高的效率。我们先说第一种方式:
第一步拷贝dll文件:在打开虚拟服务器的根目录,比如c:\inetpub\www,然后新建一个bin目录,和Sharepoint2003不同,默认的时候bin目录不存在。然后将dll拷贝到bin下。
第二步是修改web.config,加上你的程序集的描述。本例就是“
第三步是建立描述文件:描述文件的建立有着很大的学问,在Sharepoint2007中,存在两种webpart的描述文件,一种扩展名为.webpart,另一种扩展名为.dwp,.dwp的使用方法和Sharepoint2003的dwp相同。.dwp的出现主要是为了能够和上一版本兼容,现在建议使用.webpart描述文件。
描述文件你可以放在两个地方(实际上应该还有第三个地方可放,暂不述),第一个地方是webpart gallery,第二个地方是虚拟服务器根目录下的wpcatalog目录。.dwp和.webpart两种文件的使用方法完全一样。
当加入到wpcatalog时,需要重启一下应用(随便修改一下web.config就可以重启应用)。当重启应用后,Sharepoint2007会读取wpcatalog中的文件,然后加载到内存以供我们选择。这时webpart就部署好了。这种方式的最大问题是你必须自己写描述文件,而不能自动生成,所以我还要介绍另一种方式。就是放在webpart gallery中。
第二种方式放在webpart gallery中,这是sharepoint2007内置的一个文档库,放在这里面的一个好处是不用重启应用,当你将描述文件加入到这里面是,你就可以直接在添加webpart的列表中看到新增加的webpart了。除了手工的上传.dwp或者.webpart描述文件到webpart gallery中,还可以自动生成。自动生成取决于两个条件,第一个是你的dll已经拷贝到正确的位置,第二个是web.config中已经加入了描述,缺一不可。当这两个条件满足后,选择webpart gallery上的New按钮,就会列出你新部署的webpart。webpart gallery的位置在主页的action下来菜单中,选择Site Settings -> Modify All Settings,然后选择webpart,就会进入到webpart gallary。
选中后,点击上面的Populate Gallery按钮,就会把自动生成的描述文件添加到webpart gallery中。
这里要注意的是,如果你的dll是sharepoint2003的webpart(也即.NET1.1的程序集),会自动生成.dwp描述文件。如果你是.NET2.0的程序集,也即Sharepoint2007的webpart,则会生成.webpart描述文件。
另外一个问题,即强签名的程序集,如果你要部署到GAC中,则只要把dll拷贝到GAC里面即可,其它步骤都相同,不同的仅仅是dll放的位置。当你要放入到GAC中时,你必须对程序集进行签名,也即制作一个强签名程序集。使用sn -k outfile来生成key。但是如果你把强签名的程序集放入到bin目录中而不是放入到GAC里面的时候,你有时就会发现出现这么一个对话框:
这是因为程序集被安装在了一个被部分信任的区域,如何解决这一个问题呢?有两个方法,一是使用dwp文件描述,当你使用dwp文件描述的时候,无论dwp文件在webpart gallery中还是在wpcatalog中,都不会有这个对话框出现,webpart可以正常使用。第二种则是对程序集进行一个声明,在AssemblyInfo.cs文件中加上一句“[assembly: System.Security.AllowPartiallyTrustedCallers()]”,然后使用.webpart描述文件就没有问题了,无论这个文件放在webpart gallery中还是wpcatalog中,所以这个声明也仅对.webpart的描述文件才有效。这里你还会发现一个有趣的现象,当你使用了强签名后,无论是自动生成的.webpart文件还是直接上传到webpart gallery中的.webpart文件,里面的PublicKeyToken都会变成null,这点很奇怪。我也没有想明白是怎么回事,但是这个不影响webpart的使用。
另外还有一点要注意的是,当部署到GAC里面的时候,在webpart gallery中New的时候,无法自动生成.webpart文件,所以需要手写。在你下载的sample里面,包含了所有的代码及.dwp和.webpart的描述文件各一个以供参考。部署完的webpart应该是这个样子: