【问题标题】:Sharepoint - SPSiteDataQuery (want to get list of documents)Sharepoint - SPSiteDataQuery(想要获取文档列表)
【发布时间】:2010-02-19 22:48:16
【问题描述】:

我正在使用如下代码来使用 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;
        }

【问题讨论】:

    标签: sharepoint


    【解决方案1】:

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

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

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

    【讨论】:

    • 您也可以使用 (不等于)从字段创建的系统帐户中排除。此外,如前所述,使用 0x0101。 (在那里使用任何内容类型 ID,仅查询特定类型的文档,不包括母版页等系统内容)。 CT Hierarchy 可以看这里:msdn.microsoft.com/en-us/library/ms452896.aspx
    【解决方案2】:

    CAML query builder 等功能将帮助您构建有效的查询。

    【讨论】:

    • 该工具是否允许您跨站点进行测试查询? (我知道这将有助于开发很好的查询,但是我正在尝试构建查询以返回跨站点的文档,并且仅返回由任何真实用户(不是共享点)上传/修改的文档。谢谢跨度>
    • 可能不允许跨站点测试查询。但我不确定。如果您想测试您的查询,这并不重要 - 如果您的查询对于 1 个列表是正确的,那么对于该类型的所有列表都是正确的。
    【解决方案3】:

    试试:

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

    【讨论】:

    • 对不起,也许我没有正确解释。我想获取任何用户可能已上传的 sharepoint 文档,而不是 sharepoint 使用的大量隐藏文档和文档。谢谢
    • 是的,因为没有正确解释问题而投反对票是怎么回事?
    • 我只是想把它移到列表中而不是投票。我确实尝试过设置 0 或 1,但现在我无法更改状态,除非您编辑您的回复。
    猜你喜欢
    • 2021-10-31
    • 2018-06-26
    • 1970-01-01
    • 2011-09-28
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多