亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

SharePoint 2010中新增的GetItemByIdSelectedFields方法

2019-11-17 03:49:41
字體:
來源:轉載
供稿:網友
唔……事先聲明,其實這篇文章沒有太多實際的使用意義,所以想了解某個東東怎么用的同學可以按Alt + F4(或者Ctrl + W)了。想了解SharePoint里面是怎么工作的同學可以繼續往下翻。

最近正在和KB一起寫關于SharePoint 2010開發方面的一本書,在研究2010新增加的對象模型的時候,偶然發現了這個方法。我們都知道在2003/2007里面,根據ID獲取列表條目使用的是SPList的GetItemById方法(什么,沒聽說過這個方法?那恐怕你不是一個合格的SharePoint開發人員……)。新增加的這個方法名字叫GetItemByIdSelectedFields(同時也增加了一個GetItemByIdAllFields的方法與之作伴,不過這個和GetItemById是完全等效的,就不再廢話了),方法的定義是這樣的:

   1: public SPListItem GetItemByIdSelectedFields(int id, params string[] fields)
當我第一眼看到這個的時候,立刻就想到了SPQuery的那個ViewFields屬性,獲取某個列表條目的時候,只返回某些指定的字段,來提高效率??墒钱斘覍懥藗€Console程序試驗的時候,發現并不是我想象中的樣子,比如我寫成(這個方法要求寫內部名稱):

   1: SPListItem item = spList.GetItemByIdSelectedFields(1, "Title", "Created");   2: Console.WriteLine(item["Modified"]);

這段程序居然沒有報錯,而且Modified的值也正常返回了,于是我試了試,一個自定義列表里面居然有50來個字段的值都正常返回了,但是所有的查閱項、用戶和用戶組(其實這個本質上也是查閱項)都沒有返回。

在好奇驅使下(暫時還害不死我),我Reflector了一下這個方法的源代碼:

   1: if(field == null)   2: {   3:   throw new ArgumentNullException("fields");   4: }   5:     6: StringBuilder builder = new StringBuilder();   7: foreach (string str in fields)   8: {   9:   if (str != null)  10:   {  11:     builder.Append("<FieldRef Name=/"" + str + "/"/>");  12:   }  13: }  14:    15: foreach (SPField field in this.Fields)  16: {  17:   bool flag = false;  18:   foreach (string str2 in fields)  19:   {  20:     if (str2 == field.InternalName)  21:     {  22:       flag = true;  23:       break;  24:     }  25:   }  26:   if (!flag && field.MustFetchByDefault)  27:   {  28:     builder.Append("<FieldRef Name=/"");  29:     builder.Append(field.InternalName);  30:     builder.Append("/"/>");  31:   }  32: }  33:    34: return this.GetItemById(id, null, false, builder.ToString());
關于最后那個GetItemById是怎么回事,暫時先不用再去深究了,只要知道它是一個GetItemById的重載,目的就是查找條目用的就行了,最后一個參數把需要獲取的字段以CAML的形式放進去。

第7行那個foreach很好理解,把我們需要的字段加進去;但是第15行的那個foreach一開始就有點讓人摸不著頭腦了,還要把其他字段也放進去?而且SPField的這個MustFetchByDefault是什么東西?再挖挖看看:

   1: internal bool MustFetchByDefault   2: {   3:   get   4:   {   5:     string fieldAttributeValue = this.GetFieldAttributeValue("List");   6:     if(!string.IsNullOrEmpty(fieldAttributeValue) &&   7:        (fieldAttrbuteValue != GlobalList.Docs.ToString()))   8:     {   9:       return false;  10:     }  11:     return true;  12:   }  13: }


如何判斷一個字段是不是要取呢?通過判斷字段的一個List屬性,至于GetFieldAttributeValue方法就不再往上貼了(否則有騙字數的嫌疑),總之它是從Field的類似Schemaxml屬性(字段描述)的Xml結點中,去找一個List的屬性。如果找到了,而且不是GlobalList.Docs(某個特殊的東東)的話,那么這個字段就不是必須的,換句話說這個字段我就不用返回給用戶。

那什么字段的SchemaXml里會有List屬性?一個字段里有一個和列表的屬性?查閱項!哈,真的是回避掉了所有的查閱項。(Docs這個東西是“路徑”這個字段的List屬性,估計有某些特殊的來源)

現在我們知道為什么會包含其他所有字段,并且不包含查閱項了。但是為什么要這樣?如果我們對SharePoint的內容數據庫有所了解的話,我們會知道其實查閱項在內容數據庫里只存了一個ID值在AllUserData表里面(但是用對象模型取出來的時候,是包含查閱那個條目相應字段的內容的),這也就意味著,如果要返回查閱項的值,就需要多做一些額外的數據庫操作(比如再去找到被查閱的那個條目,把相應字段的值返回來,拼裝成“1;#Administrator“這種鬼樣子)。更重要的是,如果這個查閱項是一個多值的,那么這個查閱項本身都是保存在另外一個表中的(AllUserDataJunctions),這樣要返回起來還真是要費不少功夫。所以2010里面新增加了這么一個東西,如果我們的列表中包含好多個查閱項,而我們可能暫時只用到其中一兩個(或者一個都不用)的話,看來用這個方法確實能提高不少效率。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品国偷自产在线99热| 久久理论片午夜琪琪电影网| 欧美激情在线一区| 久久久免费电影| 国产精品久久久久久久久借妻| 91高清在线免费观看| 久久久久久久久久久久久久久久久久av| 精品视频偷偷看在线观看| 中文字幕久热精品在线视频| 91在线无精精品一区二区| 中文字幕在线亚洲| 九九九久久国产免费| 成人久久久久爱| 亚洲美女激情视频| 成人免费观看49www在线观看| 国产精品久久久久久久久久三级| 国产精品流白浆视频| 国产精品亚洲网站| 国产手机视频精品| 57pao成人永久免费视频| 国产午夜精品免费一区二区三区| 久久亚洲精品毛片| 国产一区深夜福利| 久久久久一本一区二区青青蜜月| 欧美丰满少妇xxxxx| 久久精品国产2020观看福利| 亚洲精品在线视频| 日韩中文在线中文网在线观看| 久久777国产线看观看精品| 国产美女精品视频免费观看| 亚洲精品白浆高清久久久久久| 亚洲精品视频网上网址在线观看| 日韩中文字幕在线观看| 欧美老肥婆性猛交视频| 久热99视频在线观看| www.午夜精品| 91视频8mav| 日本一欧美一欧美一亚洲视频| 欧美午夜视频一区二区| 亚洲精品福利视频| 久久久97精品| 91视频国产精品| 日本国产高清不卡| 国产日韩换脸av一区在线观看| 日韩在线观看免费高清| 久久久久久久久久久91| 亚洲精品短视频| 国产精品∨欧美精品v日韩精品| 欧美黑人xxxⅹ高潮交| 精品久久久久久久久久久| 欧美视频免费在线观看| 亚洲欧美精品中文字幕在线| 在线看国产精品| 成人午夜小视频| 最近2019中文字幕一页二页| 欧美另类xxx| 欧美日韩国产二区| 欧美性极品少妇精品网站| 国产精品久久一| 日韩禁在线播放| 最新69国产成人精品视频免费| 日韩中文字在线| 亚洲精品动漫久久久久| 97在线观看视频国产| 久久久精品国产| 久久久爽爽爽美女图片| 国产精品视频免费在线| 国产精品白嫩美女在线观看| 成人黄色av免费在线观看| 国产精品成av人在线视午夜片| 国产午夜精品全部视频播放| 欧美性猛交xxxx乱大交蜜桃| 91精品国产91久久久久久久久| 日韩欧美高清在线视频| 大伊人狠狠躁夜夜躁av一区| 国产精品va在线播放我和闺蜜| 最新日韩中文字幕| 97超碰国产精品女人人人爽| 亚洲成年人在线播放| 久久中国妇女中文字幕| 亚洲sss综合天堂久久| 国产一区二区丝袜| 97精品一区二区视频在线观看| 欧美成人精品xxx| 欧美色道久久88综合亚洲精品| 欧美极品少妇xxxxⅹ裸体艺术| 热久久视久久精品18亚洲精品| 日韩在线免费高清视频| 国产精品免费电影| 久久精品国产久精国产思思| 91麻豆国产精品| 久久成人精品电影| 4438全国亚洲精品在线观看视频| 成人黄在线观看| 欧美电影在线播放| 在线观看日韩欧美| 尤物yw午夜国产精品视频| 国产成人精品视频在线| 国产亚洲欧洲高清一区| 久久久久久久久网站| 亚洲第一黄色网| 在线国产精品视频| 91精品91久久久久久| 国产成人一区二区三区电影| 欧美日韩爱爱视频| 亚洲视频综合网| 九九热99久久久国产盗摄| 亚洲精品美女视频| 亚洲人成在线观看网站高清| 日韩亚洲成人av在线| 亚洲第一黄色网| 91久久久久久久久久久| 中文字幕亚洲综合久久筱田步美| 久久精品人人爽| 乱亲女秽乱长久久久| 欧美激情国产日韩精品一区18| 夜夜嗨av色综合久久久综合网| 国产精品女视频| 国产福利成人在线| 国自产精品手机在线观看视频| 超碰日本道色综合久久综合| 久久精品99久久久香蕉| 亚洲热线99精品视频| 啊v视频在线一区二区三区| 精品国产31久久久久久| 国产盗摄xxxx视频xxx69| 成人深夜直播免费观看| 日韩麻豆第一页| 欧美精品久久久久| 亚洲天堂一区二区三区| 日韩电影在线观看永久视频免费网站| 最近2019好看的中文字幕免费| 中文字幕不卡av| 国产成人一区二区在线| 国产成人亚洲综合91| 高清日韩电视剧大全免费播放在线观看| 成人午夜小视频| 福利一区福利二区微拍刺激| 久久香蕉频线观| 久久久视频精品| 国产精品丝袜一区二区三区| 亚洲欧美在线x视频| 亚洲www在线| 性色av香蕉一区二区| 麻豆国产va免费精品高清在线| 一区二区三区在线播放欧美| 成人免费午夜电影| 深夜精品寂寞黄网站在线观看| 亚洲欧美色婷婷| 日韩av电影在线免费播放| 欧美日韩另类在线| 久久久久久午夜| 久久精品最新地址| 这里只有精品在线播放| 日本一区二区在线播放| 成人性生交大片免费看视频直播| 日韩中文在线观看| 亚洲国产日韩欧美在线99| 91精品国产综合久久久久久蜜臀| 久久久久亚洲精品成人网小说| 欧美激情视频一区二区三区不卡| 福利一区视频在线观看| 国产成人激情小视频| 国产乱人伦真实精品视频|