亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

列出聯接和投影

系統 1697 0

http://msdn.microsoft.com/zh-cn/library/ee539975.aspx

本主題介紹協作應用程序標記語言 (CAML) 定義的視圖和查詢中的列表聯接和字段投影。

列表視圖可包括來自其他列表、已經聯接到主列表的字段。CAML? View 元素通過其子元素 Joins ProjectedFields 實現此功能,這兩個元素是在對象模型中通過 SPView 對象的 Joins ProjectedFields 屬性來表示的。( SPQuery 對象具有同名的屬性。有關詳細信息,請參閱 查詢中的聯接和投影 。)

視圖中的列表聯接

Joins 元素包含一個或多個 Join 元素。這些元素中的每個元素都創建一個內部聯接或兩個列表之間的左外部聯接。這些聯接中至少有一個聯接必須來自視圖的父列表,稱為主列表,另外的那個列表稱為外列表。但從該外列表到另一個外列表之間可以有額外的聯接,等等。對于聯接鏈中可以有多少鏈接沒有限制,但 Join 元素的總數,無論是否在鏈中,都不能超出包含主列表的 SPWebApplication 對象的 MaxQueryLookupFields 屬性的值。系統默認值為 8。列表可以直接或作為聯接鏈聯接到它本身。

創建列表聯接時要記住一些要求。您不能只是聯接任何兩個列表而不考慮類型。如果可以聯接兩個列表,就不僅僅是任何主字段和外字段可用作字段的聯接對。 主列表中的字段必須是 Lookup 類型的字段,它必須查找外列表中的字段。 出于此原因,所有聯接都鏡像列表之間的現有查閱關系。

下面的示例標記假設有一個 SharePoint Foundation 網站,網站上的父母們組成一個俱樂部,相互銷售孩子們的舊衣服。其中需要有一個 Orders 列表的視圖,該列表顯示購買成員(客戶)所在的城市和州,銷售成員(發貨人)所在的城市。若要實現此目的,需有兩個左外部聯接的鏈:

Orders Members Cities States

Orders Members Cities

注意以下內容與 Joins 標記有關:

每個 Join 元素的 Type 屬性可以是“LEFT”或“INNER”。

因為從 Orders Members 有兩個聯接,這兩個聯接必須區分開來。此目的是通過 ListAlias 屬性來實現的,該屬性在第一個聯接中向 Members 列表分配別名“customer”,但在第二個聯接中向該列表分配“shipper”。

Members Cities 也有兩個聯接,它們使用同一種方式區分。

在任何地方,任何列表別名都不會明確映射到列表。映射也是不必要的,因為每個聯接與現有查閱字段關系并行,查閱字段的定義標識了外列表。

“join on”字段是通過 FieldRef 元素對標識的。第一個表示主列表中的查閱字段,并用內部名稱標識它。它必須具有設置為“ID”的 RefType 屬性。如果聯接的主列表不是視圖的父列表,則它也通過設置為其別名的 List 屬性來標識。每個元素對的第二個 FieldRef 元素再次通過別名標識外列表,也標識必須始終為 ID 字段的外鍵字段。

<Joins> <Join Type='LEFT' ListAlias='customer'> <Eq> <FieldRef Name='CustomerName' RefType='Id'/> <FieldRef List='customer' Name='ID'/> </Eq> </Join> <Join Type='LEFT' ListAlias='customer_city'> <Eq> <FieldRef List='customer' Name='CityName' RefType='Id'/> <FieldRef List='customer_city' Name='Id'/> </Eq> </Join> <Join Type='LEFT' ListAlias='customer_city_state'> <Eq> <FieldRef List='customer_city' Name='StateName' RefType='Id'/> <FieldRef List='customer_city_state' Name='Id'/> </Eq> </Join> <Join Type='LEFT' ListAlias='shipper'> <Eq> <FieldRef Name='ShipperName' RefType='Id'/> <FieldRef List='shipper' Name='ID'/> </Eq> </Join> <Join Type='LEFT' ListAlias='shipper_city'> <Eq> <FieldRef List='shipper' Name='CityName' RefType='Id'/> <FieldRef List='shipper_city' Name='Id'/> </Eq> </Join></Joins>
視圖中的投影字段

ProjectedFields 字段從外列表創建字段,這樣它們就可以在列表視圖中使用。字段還必須在 View 元素的 ViewFields 子元素中標識。

繼續演示父母俱樂部的示例,下面的 ProjectedFields 將為客戶所在城市、客戶所在州和發貨人所在城市創建字段。注意下面的內容與此標記有關:

外列表是通過其別名標識的,如 Joins 元素中所定義的那樣。

ShowField 屬性標識外列表中的哪個字段在視圖中使用。

Type 屬性始終具有值“Lookup”。出于此原因, Type 屬性不會像它通常在 Field 元素中所表現的那樣指示字段的數據類型。當 Field 元素為 ProjectedFields 的子級時, Type 僅僅指示 Join (在 ProjectedFields 元素所依賴的 Joins 元素中)是否基于列表之間的現有查閱關系。所有聯接必須基于現有查閱關系。可作為投影字段的 CAML 字段類型的列表如下所示。

<ProjectedFields> <Field Name='CustomerCity' Type='Lookup' List='customer_city' ShowField='Title'/> <Field Name='CustomerCityState' Type='Lookup' List='customer_city_state' ShowField='Title'/> <Field Name='ShipperCity' Type='Lookup' List='shipper_city' ShowField='Title'/></ProjectedFields>

只有以下類型的字段可包括在 ProjectedFields 元素中:

Calculated(視為純文本)

ContentTypeId

Counter

Currency

DateTime

Guid

Integer

Note(只有一行)

Number

Text

如上所述,在 ProjectedFields 元素中創建的字段也有必要在 ViewFields 元素中指定。以下標記繼續說明該示例。

<ViewFields> <FieldRef Name='CustomerCity'/> <FieldRef Name='CustomerCityState'/> <FieldRef Name='ShipperCity'/></ViewFields>

聯接和投影字段還可以在 CAML 查詢中使用。在這種使用情況下,聯接和投影字段也通過 Joins ProjectedFields 元素來定義。但是,這些元素不是 Query 元素的子級。它們是獨立的 XML 標記,構成表示查詢的 SPQuery 對象的 SPQuery . Joins SPQuery . ProjectedFields 屬性的值。

通常最好使用 LINQ to SharePoint 提供程序 來查詢具有服務器代碼的 SharePoint Foundation 列表。因為 CAML 具有 Joins ProjectedFields 元素,LINQ to SharePoint 提供程序可將 LINQ 查詢轉換為 CAML 查詢,完全支持 LINQ join (在 Visual Basic 中為 Join )和 select (在 Visual Basic 中為 Select )運算符。如果您的代碼要在客戶端運行,建議您使用 使用 ADO.NET 數據服務查詢 SharePoint Foundation 進行查詢。

如果您要直接創建 CAML 查詢,并明確設置 SPQuery 對象的相關屬性,則應該考慮使用工具來生成查詢。若要找到這樣的工具,請導航到 www.bing.com 并搜索“CAML query tool”(沒有引號)。在發布 Microsoft SharePoint Foundation 2010 之后,可能會經過一段時間才能獲得支持生成 Joins ProjectedFields 元素的任何工具。

下面的示例顯示了從客戶所在城市為倫敦的 Orders 列表返回所有訂單的查詢。該示例假設 Orders 列表具有 CustomerName 字段,它查找 Customers 列表,后者具有 CityName 字段,它查找 Cities 列表。

查詢需要 Orders Customers Customers Cities 的聯接,因此 Joins 屬性的值如下。

<Joins> <Join Type=’LEFT’ ListAlias=’customers’> <Eq> <FieldRef Name=’CustomerName’ RefType=’Id’ /> <FieldRef List=’customers’ Name=’ID’ /> </Eq> </Join> <Join Type=’LEFT’ ListAlias=’customerCities’> <Eq> <FieldRef List=’customers’ Name=’CityName’ RefType=’Id’ /> <FieldRef List=’customerCities’ Name=’ID’ /> </Eq> </Join></Joins>

因為查詢的 Where 部分將測試客戶所在城市,我們需要創建一個 CustomerCity 字段。因此, ProjectedFields 的值如下。

<ProjectedFields> <Field Name=’CustomerCity’ Type=’Lookup’ List=’customerCities’ ShowField=’Title’ /></ProjectedFields>

接下來,我們需要通過將對該字段的引用添加到 ViewFields 元素,使該字段可用。因此, ViewFields 屬性的值如下。

<ViewFields> <FieldRef Name='CustomerCity'/></ViewFields>

最后, Query 屬性設置如下。

<Query> <Where> <Eq> <FieldRef Name='CustomerCity'/> <Value Type='Text'>London</Value> </Eq> </Where></Query>

我們建議您在 CAML 查詢涉及列表聯接時使用顯式 Joins 元素,從而最大限度地提高標記的可讀性。這種做法也能盡最大可能提高您的查詢標記與未來版本的 SharePoint Foundation 兼容的機會。但是,有一種方式支持兩個列表的隱式聯接,而不需要使用 Joins 元素。您只要如上所述創建一個 ProjectedFields 元素即可,除了以下例外情況:子級 Field 元素具有 FieldRef 屬性,而不是 List 屬性。 FieldRef 只標識源列表中的 Lookup 列。而且,在 ProjectedFields 元素具有 FieldRef 屬性而不是 List 屬性時,其 Name 屬性應該被賦予不同于源列表中任何列的某個任意值。(再次說明,在此標記中,不需要標識目標列表,因為它在 查閱關系的配置中指定。

例如,假設列表和查閱關系與前一節中的相同,您將具有以下查詢和 ViewFields 元素。

<Query> <Where> <Eq> <FieldRef Name='CustomerName'/> <Value Type='Text'>Hicks, Cassie</Value> </Eq> </Where></Query><ViewFields> <FieldRef Name='CustomerName'/></ViewFields>

注意, Where 元素在“Orders”和“Customers” 列表之間進行隱式聯接。您可以只通過以下 ProjectedFields 元素支持此查詢。您不需要使用 Joins 元素。(注意,已經為 Name 屬性指定不同于通過 FieldRef 屬性指定的實際查閱列名稱的任意名稱。)

<ProjectedFields> <Field Name=’OrderingCustomer’ Type=’Lookup’ FieldRef=’CustomerName’ ShowField=’Title’ /></ProjectedFields>

即使使用此技巧,仍然要求源列與目標列表之間存在查閱關系。另外,通過此技巧,您不能鏈接聯接。例如,您無法支持前一節末尾處顯示的 Query 元素。該查詢創建了從 Orders 到 Customers 到 Cities 的隱式雙聯接。聯接鏈需要顯式 Joins 元素。

閱讀全文
類別: moss技術 ? 查看評論

列出聯接和投影


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品亚洲视频在线 | 成人国产一区二区三区 | 97视频在线观看免费播放 | 日本一级毛片在线看 | 亚洲精品一区亚洲精品 | 日韩精品中文字幕一区二区三区 | 在线观看99 | 久久天天躁狠狠躁夜夜中文字幕 | 日日骑夜夜操 | 国产视频一区二区在线播放 | 视频一区二区在线 | 天天干夜夜爽天天操夜夜爽视频 | 精品久久久久久久中文字幕 | 精品国产午夜久久久久九九 | 4虎影院永久地址www | 国产精品伦理一二三区伦理 | 中国妞xxxx| 精品久久亚洲 | 精品一区亚洲 | 波多野给衣一区二区三区 | 日日操天天 | 亚洲欧美国产中文 | 久久精品国产免费中文 | 久久黄色网址 | 波多野结衣一二三区 | 9999热视频 | 在线综合视频 | 黄片毛片一级 | 婷婷狠狠 | 亚洲精品亚洲人成人网 | 国产视频久久久 | 亚洲五月激情 | 亚洲成人91 | 国产图片亚洲精品一区 | 99久久综合国产精品免费 | 日本不卡在线视频 | 综合国产在线 | 亚洲va欧美va国产va天堂 | 日韩美一区二区 | 露脸真实国产精品自在 | se01国产短视频在线观看 |