SharePoint的Document Library是存储数据的好地方,我们的项目在里面存了很多图纸,图纸之间有引用关系,所以我做了一个页面来显示图纸的引用关系,工作过程如下:
点击某个图纸文件, 弹出菜单,选择-->查看引用, 这时跳转到自己做的页面,同时通过url传入了文件路径, Source和RootFolder参数.
利用文件路径获得与之有引用关系的图纸,并显示他们.
代码如下(省略生成Query的业务代码):
using (SPSite site = new SPSite(source))
{
SPWeb web = site.OpenWeb();
web.AllowUnsafeUpdates = true;
SPListItem item = web.GetListItem(fileUrl);
SPList list = item.ParentList;
string listGuid = HttpUtility.ParseQueryString(SPEncode.UrlDecodeAsUrl(source))["ShowWebPart"];
source = source.Substring(0, source.IndexOf(".aspx") + 5);
SPView my = source.Contains("PersonalViews.aspx") ? list.Views[new Guid(listGuid)] : web.GetViewFromUrl(source);
//根据是Personal还是Public,分别获得SPView对象
my.Scope = SPViewScope.Recursive;//搜索范围是整个library的文件
SPQuery myq = new SPQuery(my);
myq.Query = query;
refContent.Text = list.RenderAsHtml(myq);//显示结果=SPView的样式和定义+自己的查询
web.AllowUnsafeUpdates = false;
}
其中当引用的图纸文件在同级或下一级文件夹中时,正常显示, 如果是在上一级中, 就不显示,
而通过调用list.GetItems(myq).Count.ToString()发现,Query确实能查询到有符合条件的文件存在.
在经历了4个小时左右的摸索后,突然想到是不是地址栏中RootFolder在作怪,
因为代码中并没有用到RootFolder,直接去掉,显示正常!
原来甚至通过list.RenderAsHtml(myq)获得的结果还是会受到地址栏里RootFolder的影响.
估计没有人会遇上我这个问题了,不过还是记录一下吧,提醒自己和大家以后注意sharepoint对地址URL的使用.