最近花了大把的时间做了一个sharepoint 2007文档库,文件批理下载的功能。思路是:
1.在文档库的视图页面添加一个有checkbox的自定义字段.(用来确定用户要下载的文件)。
2..添加一个CustomAction到listviewtoolbar(下载按钮)
3.点击CustomAction,通过AJAX请求服务器端的一个文件(DownloadZipRequest.aspx),并专递要下载的item的ID,在服务器端的DownloadZipRequest.aspx页面根据传过的item的id,生成压缩包并将路径发给客户端,此压缩包中包含所有的子文件。
自定义字段的xml文件:
DownLoadDocumentFiles/FiledXML/fldtypesCACheckbox.xml 此XML定义了自定义字段显示的样式,并绑定item的ID
DownLoadDocumentFiles/CACheckBoxField.cs 和DownLoadDocumentFiles/CACheckBoxControl.cs是该字段的处理类
自定义字段的布暑: fldtypesCACheckbox.xml 拷到C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\XML目录下。重启IIS就可看到该字段。
CustomAction配置文件:
DownLoadDocumentFiles/CADownloadDocumentAction.cs
此文件向页面中注册了downloaddocument.css和downloaddocument.js,css和js用来控制下载的样式和请求异步处理。
CustomAction 部署
将 CA.WorkFlow.Common.CustomAction.dll拖入到GAC,在webconfig中配置如下节点:
<SafeControl Assembly="CA.WorkFlow.Common.CustomAction, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cefca58d1946b8ca" Namespace="CA.WorkFlow.Common.CustomAction.DownLoadDocumentFiles" TypeName="CADownloadDocumentAction" Safe="True" />
此CustomAction 是个feature.激活此feature。就以在listviewtoolbar中看到此customactoin。
DownloadZipRequest.aspx用来响应异步请求详细 见源码。
注:
将多个文件写一入一个压缩包内,需要引用一个第三方dll.“ICSharpCode.SharpZipLib.dll“,但是这个dll在处理中文的文件时,文件名会乱码,需要将此dll改写(此项目中己经改并重使命名为”NewICSharpCode.SharpZipLib.dll“)
最终效果图: