Michael's Blog

罗马不设防

博客园 首页 新随笔 联系 订阅 管理

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的使用.

posted on 2009-02-10 15:54  Michael Zhang  阅读(1112)  评论(2编辑  收藏  举报