1

状況は次のとおり
です。サブサイト(SPWeb)htp://servername/subsitename/
を持っています。CrossListQueryInfoを使用してすべてのリストでアイテムを見つける必要がありますが、このサブサイト(SPWeb)でのみ行います:

 var query = new CrossListQueryInfo
                            {
                                Lists = "<Lists ServerTemplate=\"100\" />",
                                ViewFields =  "...",
                                Webs = "<Webs Scope=\"Recursive\" />",
                                WebUrl = web.ServerRelativeUrl,
                                UseCache = true,
                                Query =  "..."
                            };
var cache = new CrossListQueryCache(query);
var dataTable = cache.GetSiteData(web.Site, CrossListQueryCache.ContextUrl()))

しかし、サイトコレクション全体でこの検索を使用する正しい方法は何ですか? 私は何が恋しいですか?

4

1 に答える 1

0

特定のサイトのみのアイテムを取得するには、Websプロパティに空の値を指定します。

MSDNによると:

Websプロパティは、クエリに含める Web サイトを指定します。既定では、クエリは GetSiteData メソッドが呼び出された Web サイトのみを考慮します。

Webs プロパティをWebsタグと Scope属性を含む文字列に設定することにより、クエリの範囲を広げることができます。Scope 属性の可能な値には、Recursive と SiteCollection があります。

<Webs Scope="Recursive" />

<Webs Scope="SiteCollection" />

Scope 属性が Recursive に設定されている場合、クエリは現在の Web サイトと現在の Web サイトのすべてのサブサイトを考慮します。

Scope 属性が SiteCollection に設定されている場合、クエリは、現在の Web サイトと同じサイト コレクションにあるすべての Web サイトを考慮します。2 つの属性値のうち、これはより包括的です


したがって、更新されたコードは次のとおりです。

var query = new CrossListQueryInfo
                            {
                                Lists = "<Lists ServerTemplate=\"100\" />",
                                ViewFields =  "...",
                                Webs = string.Empty,  // considers only the Web site from which the GetSiteData method was invoked
                                WebUrl = web.ServerRelativeUrl,
                                UseCache = true,
                                Query =  "..."
                            };
var cache = new CrossListQueryCache(query);
var dataTable = cache.GetSiteData(web.Site, CrossListQueryCache.ContextUrl()))
于 2013-05-08T15:12:09.900 に答える