Sharepoint - SPSiteDataQuery(想要获取文档列表)

时间:2010-02-19 22:48:16

标签: sharepoint

我使用以下代码来获取具有SPSiteDataQuery的站点中的所有文档的列表,但是它返回了用户未上载的各种文档。将列表过滤为仅用户上传的文档的最佳方法是什么?

我怀疑有一个查询我可以使用,但我不确定我应该使用什么FieldRef来查找用户上传的文件(不是隐藏文件或系统类型文档文件)。

见方法

中的***

感谢

        protected DataTable GetListDataSPSiteDataQuery(string siteUrl, bool recursive, ref string error) {
            DataTable results = null;

            using (SPSite site = new SPSite(siteUrl)) {
                SPWeb web = site.OpenWeb();
                SPSiteDataQuery query = new SPSiteDataQuery();

                //query.Webs = "<Webs Scope='SiteCollection' />"; //query all web sites in site collection
                if (recursive)
                    query.Webs = "<Webs Scope='Recursive' />";


                query.Lists = "<Lists ServerTemplate='101' Hidden='FALSE' MaxListsLimit='0' />";
                //query.Lists = "<Lists BaseType='1' MaxListsLimit='0' />"; //document library only (0=generic list, 1=doc library,3=discussino forum,4-vote or survey,5=issues list)

                // *** can i provide a query here to filter for the documents i am interested in?
                query.Query = string.Empty; 

                //query.Query = "<Where>" + 
                //                    "<Gt>" +
                //                        "<FieldRef Name='File_x0020' />" +
                //                        "<Value Type='Number'>0</Value>" +
                //                    "</Gt>" +
                //                "</Where>";

                query.ViewFields = _viewFields;


                results = web.GetSiteData(query);
            }
            return results;
        }

3 个答案:

答案 0 :(得分:1)

CAML query builder之类的功能可以帮助您构建有效的查询。

答案 1 :(得分:1)

我现在不在办公室进行测试,但尝试在结果中添加以下字段(这样您就可以看到它们是否创建了可过滤的模式)

  • ContentType (寻找令人讨厌的内容,如_Hidden)
  • CreatedBy (作者应为非用户文件的SHAREPOINT \ system)

如果这没有帮助,我会尝试进行测试,但我不认为除了这些属性之外,房间里还有大象说ONLY_USER_CREATED。如果“用户未上传的各种文档”只是/ forms /文件夹文件(AllItems.aspx,EditItem.aspx等),那么可以使用一些Contains测试来解决它。

答案 2 :(得分:0)

尝试:

query.Query = @"<Where>
      <Eq>
         <FieldRef Name='Author' />
         <Value Type='User'>Bob Smith</Value>
      </Eq>
   </Where>";