日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

列出聯(lián)接和投影

系統(tǒng) 2036 0

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

本主題介紹協(xié)作應(yīng)用程序標(biāo)記語(yǔ)言 (CAML) 定義的視圖和查詢中的列表聯(lián)接和字段投影。

列表視圖可包括來(lái)自其他列表、已經(jīng)聯(lián)接到主列表的字段。CAML? View 元素通過(guò)其子元素 Joins ProjectedFields 實(shí)現(xiàn)此功能,這兩個(gè)元素是在對(duì)象模型中通過(guò) SPView 對(duì)象的 Joins ProjectedFields 屬性來(lái)表示的。( SPQuery 對(duì)象具有同名的屬性。有關(guān)詳細(xì)信息,請(qǐng)參閱 查詢中的聯(lián)接和投影 。)

視圖中的列表聯(lián)接

Joins 元素包含一個(gè)或多個(gè) Join 元素。這些元素中的每個(gè)元素都創(chuàng)建一個(gè)內(nèi)部聯(lián)接或兩個(gè)列表之間的左外部聯(lián)接。這些聯(lián)接中至少有一個(gè)聯(lián)接必須來(lái)自視圖的父列表,稱為主列表,另外的那個(gè)列表稱為外列表。但從該外列表到另一個(gè)外列表之間可以有額外的聯(lián)接,等等。對(duì)于聯(lián)接鏈中可以有多少鏈接沒(méi)有限制,但 Join 元素的總數(shù),無(wú)論是否在鏈中,都不能超出包含主列表的 SPWebApplication 對(duì)象的 MaxQueryLookupFields 屬性的值。系統(tǒng)默認(rèn)值為 8。列表可以直接或作為聯(lián)接鏈聯(lián)接到它本身。

創(chuàng)建列表聯(lián)接時(shí)要記住一些要求。您不能只是聯(lián)接任何兩個(gè)列表而不考慮類型。如果可以聯(lián)接兩個(gè)列表,就不僅僅是任何主字段和外字段可用作字段的聯(lián)接對(duì)。 主列表中的字段必須是 Lookup 類型的字段,它必須查找外列表中的字段。 出于此原因,所有聯(lián)接都鏡像列表之間的現(xiàn)有查閱關(guān)系。

下面的示例標(biāo)記假設(shè)有一個(gè) SharePoint Foundation 網(wǎng)站,網(wǎng)站上的父母?jìng)兘M成一個(gè)俱樂(lè)部,相互銷(xiāo)售孩子們的舊衣服。其中需要有一個(gè) Orders 列表的視圖,該列表顯示購(gòu)買(mǎi)成員(客戶)所在的城市和州,銷(xiāo)售成員(發(fā)貨人)所在的城市。若要實(shí)現(xiàn)此目的,需有兩個(gè)左外部聯(lián)接的鏈:

Orders Members Cities States

Orders Members Cities

注意以下內(nèi)容與 Joins 標(biāo)記有關(guān):

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

因?yàn)閺? Orders Members 有兩個(gè)聯(lián)接,這兩個(gè)聯(lián)接必須區(qū)分開(kāi)來(lái)。此目的是通過(guò) ListAlias 屬性來(lái)實(shí)現(xiàn)的,該屬性在第一個(gè)聯(lián)接中向 Members 列表分配別名“customer”,但在第二個(gè)聯(lián)接中向該列表分配“shipper”。

Members Cities 也有兩個(gè)聯(lián)接,它們使用同一種方式區(qū)分。

在任何地方,任何列表別名都不會(huì)明確映射到列表。映射也是不必要的,因?yàn)槊總€(gè)聯(lián)接與現(xiàn)有查閱字段關(guān)系并行,查閱字段的定義標(biāo)識(shí)了外列表。

“join on”字段是通過(guò) FieldRef 元素對(duì)標(biāo)識(shí)的。第一個(gè)表示主列表中的查閱字段,并用內(nèi)部名稱標(biāo)識(shí)它。它必須具有設(shè)置為“ID”的 RefType 屬性。如果聯(lián)接的主列表不是視圖的父列表,則它也通過(guò)設(shè)置為其別名的 List 屬性來(lái)標(biāo)識(shí)。每個(gè)元素對(duì)的第二個(gè) FieldRef 元素再次通過(guò)別名標(biāo)識(shí)外列表,也標(biāo)識(shí)必須始終為 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 字段從外列表創(chuàng)建字段,這樣它們就可以在列表視圖中使用。字段還必須在 View 元素的 ViewFields 子元素中標(biāo)識(shí)。

繼續(xù)演示父母俱樂(lè)部的示例,下面的 ProjectedFields 將為客戶所在城市、客戶所在州和發(fā)貨人所在城市創(chuàng)建字段。注意下面的內(nèi)容與此標(biāo)記有關(guān):

外列表是通過(guò)其別名標(biāo)識(shí)的,如 Joins 元素中所定義的那樣。

ShowField 屬性標(biāo)識(shí)外列表中的哪個(gè)字段在視圖中使用。

Type 屬性始終具有值“Lookup”。出于此原因, Type 屬性不會(huì)像它通常在 Field 元素中所表現(xiàn)的那樣指示字段的數(shù)據(jù)類型。當(dāng) Field 元素為 ProjectedFields 的子級(jí)時(shí), Type 僅僅指示 Join (在 ProjectedFields 元素所依賴的 Joins 元素中)是否基于列表之間的現(xiàn)有查閱關(guān)系。所有聯(lián)接必須基于現(xiàn)有查閱關(guān)系。可作為投影字段的 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 元素中創(chuàng)建的字段也有必要在 ViewFields 元素中指定。以下標(biāo)記繼續(xù)說(shuō)明該示例。

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

聯(lián)接和投影字段還可以在 CAML 查詢中使用。在這種使用情況下,聯(lián)接和投影字段也通過(guò) Joins ProjectedFields 元素來(lái)定義。但是,這些元素不是 Query 元素的子級(jí)。它們是獨(dú)立的 XML 標(biāo)記,構(gòu)成表示查詢的 SPQuery 對(duì)象的 SPQuery . Joins SPQuery . ProjectedFields 屬性的值。

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

如果您要直接創(chuàng)建 CAML 查詢,并明確設(shè)置 SPQuery 對(duì)象的相關(guān)屬性,則應(yīng)該考慮使用工具來(lái)生成查詢。若要找到這樣的工具,請(qǐng)導(dǎo)航到 www.bing.com 并搜索“CAML query tool”(沒(méi)有引號(hào))。在發(fā)布 Microsoft SharePoint Foundation 2010 之后,可能會(huì)經(jīng)過(guò)一段時(shí)間才能獲得支持生成 Joins ProjectedFields 元素的任何工具。

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

查詢需要 Orders Customers Customers Cities 的聯(lián)接,因此 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>

因?yàn)椴樵兊? Where 部分將測(cè)試客戶所在城市,我們需要?jiǎng)?chuàng)建一個(gè) CustomerCity 字段。因此, ProjectedFields 的值如下。

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

接下來(lái),我們需要通過(guò)將對(duì)該字段的引用添加到 ViewFields 元素,使該字段可用。因此, ViewFields 屬性的值如下。

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

最后, Query 屬性設(shè)置如下。

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

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

例如,假設(shè)列表和查閱關(guān)系與前一節(jié)中的相同,您將具有以下查詢和 ViewFields 元素。

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

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

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

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

閱讀全文
類別: moss技術(shù) ? 查看評(píng)論

列出聯(lián)接和投影


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 东乌| 图木舒克市| 获嘉县| 车致| 桂平市| 乡宁县| 凤城市| 铜陵市| 勃利县| 棋牌| 蒙自县| 恭城| 奈曼旗| 盘山县| 吴旗县| 鲁甸县| 江源县| 阿克陶县| 湘潭县| 彩票| 革吉县| 康平县| 五台县| 皮山县| 商水县| 龙岩市| 腾冲县| 库伦旗| 河南省| 沅江市| 铜鼓县| 蒙城县| 繁峙县| 长顺县| 盖州市| 衢州市| 库车县| 安泽县| 东至县| 南涧| 景东|