背景:
最近进在做一个MOSS Farm的管理报表,需要By Farm,By Site,By Web,By Libray,By Document
去检索文件的生命周期。在开发的过程中Farm可以通过手动维护(数据不会超过10笔),site\web可以通过
web表来获取,以及Libray可以通过siteid和webid来写C# Console程式在Web Webserver下周期执行来得到
文件库的数据。
最后,遇到一个问题,如何通过SP对象模型编程,来得到Document的数据。
思路:
1、 利用SPFold模型,Feach遍历SubFolders对象来查询子文件夹下的文档模型对象。
2、 利用spfolder.Files来获取当前文件目录下的文档模型对象。
3、 以上思路的求解,都必须基于由已知的文件库对象SPDocumentLibray,如何Coding来得到此文件库的SPFolder对象。
之前问题的解决办法,
假设我们已经知道该网站的siteid,webid信息,
下面我们就来实现遍历构造此网站下所有文件库的SPFolder对象的方法。
代码测试如下:
namespace TestWeb
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string br = System.Environment.NewLine;
Guid siteid = new Guid("5E601555-DD68-4518-889B-95D162A2A348");
Guid webid = new Guid("5A7EF298-C322-4C41-9360-FE68AC63B23B");
SPSite site = null;
SPWeb web = null;
SPListCollection lists = null;
SPFolder folder = null;
SPFolderCollection folders = null;
string s = "";
try
{
site = new SPSite(siteid);
web = site.OpenWeb(webid);
lists = web.GetListsOfType(SPBaseType.DocumentLibrary);
foreach (SPList list in lists)
{
try
{
folder = list.RootFolder; // web.GetFolder(list.DefaultViewUrl); // 失败:AllItems.aspx
s += folder.Name + " ; " + list.Title + "<br/>";
}
catch (Exception xx)
{
s += xx.Message + " ; " + list.Title + "<br/>";
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
site = null;
web = null;
}
Response.Write(s);
}
}
}
}
测试结果
剩下的事情,就是利用SPForder来遍历收集当前文件的信息
和当前子文件夹下的文件信息。就不在详细说明了。