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

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

SharePoint 2010中新增的GetItemByIdSelectedFields方法

2019-11-17 03:49:53
字體:
來源:轉載
供稿:網友
唔……事先聲明,其實這篇文章沒有太多實際的使用意義,所以想了解某個東東怎么用的同學可以按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
日韩电影大全免费观看2023年上| 中文字幕成人在线| 色琪琪综合男人的天堂aⅴ视频| 亚洲欧洲国产精品| 日本久久91av| 91精品国产高清自在线看超| 羞羞色国产精品| 欧美视频中文在线看| 91大神在线播放精品| 久久久精品久久久久| 国产欧美在线看| 一道本无吗dⅴd在线播放一区| 久久精品99无色码中文字幕| 日韩在线播放视频| 中文字幕日韩视频| 国产精品入口日韩视频大尺度| 亚洲欧美日韩一区在线| 欧美精品免费在线| 欧美久久精品一级黑人c片| 亚洲女人被黑人巨大进入al| 国产日韩精品视频| 三级精品视频久久久久| 国产一区二区久久精品| 国产精品夫妻激情| 国产一区深夜福利| 成人动漫网站在线观看| 国产精品igao视频| 亚洲a∨日韩av高清在线观看| 亚洲国产精品久久久久秋霞不卡| 亚洲人成电影网站色…| 亚洲精品国产拍免费91在线| 8x海外华人永久免费日韩内陆视频| 国产精品va在线播放| 国产精品va在线| 亚洲欧美综合图区| 成人黄色片在线| 91亚洲国产成人精品性色| 成人伊人精品色xxxx视频| 人体精品一二三区| 国产精品视频区1| 91精品国产91久久久久久不卡| 欧美综合第一页| 欧美激情精品在线| 久久久中精品2020中文| 日韩电影免费观看在线观看| 亚洲精品免费一区二区三区| 精品亚洲国产视频| 日韩av在线一区二区| 国产亚洲人成网站在线观看| 136fldh精品导航福利| 岛国av午夜精品| 91禁国产网站| 日本19禁啪啪免费观看www| 亚洲电影免费观看高清完整版在线观看| 国产精品海角社区在线观看| 国产一区红桃视频| 亚洲japanese制服美女| 高清亚洲成在人网站天堂| 久久人体大胆视频| 国产日韩欧美在线看| 国产精品亚洲视频在线观看| 成人在线视频福利| 在线日韩欧美视频| 亚洲天天在线日亚洲洲精| 91高清视频在线免费观看| 81精品国产乱码久久久久久| 亚洲天堂第二页| 国产一区二区丝袜高跟鞋图片| 国产精品久久久久久久久借妻| 久久夜色精品国产| 亚洲国产精品久久| 国产婷婷97碰碰久久人人蜜臀| 国产精品免费一区二区三区都可以| 日韩有码在线电影| 日韩av中文在线| 992tv成人免费视频| 91精品视频专区| 日韩高清电影免费观看完整| 欧美亚州一区二区三区| 成人h视频在线观看播放| 亚洲免费精彩视频| 日韩精品日韩在线观看| 成人国产亚洲精品a区天堂华泰| 国产精品日韩在线观看| 38少妇精品导航| 午夜精品蜜臀一区二区三区免费| 欧美成人在线免费视频| 亚洲精品一区中文字幕乱码| 亚洲天堂一区二区三区| 亚洲精品国产精品国产自| 在线午夜精品自拍| 亚洲色图色老头| 日韩av综合网| 亚洲免费一在线| 一区二区欧美久久| 午夜精品一区二区三区在线| 亚洲精品国产综合区久久久久久久| 国产精品九九九| 亚洲国产日韩精品在线| 亚洲国产精品va在看黑人| 欧美成人精品在线| 欧美疯狂性受xxxxx另类| 亚洲激情 国产| 欧美性猛交xxxx富婆| 亚洲欧美第一页| 亚洲欧美色图片| 久久久精品亚洲| 日韩成人中文字幕在线观看| 日韩欧美在线观看视频| 在线视频欧美日韩| 国产一区二区免费| 中国china体内裑精亚洲片| 这里只有精品丝袜| 91网站在线看| 欧美成人免费播放| 国产精品久久久| 国内精品久久久久久中文字幕| 色系列之999| 日本久久久久久久久久久| 亚洲视频在线观看视频| 亚洲专区中文字幕| 日本亚洲精品在线观看| 亚洲欧洲日韩国产| 最新91在线视频| 日本一区二区不卡| 欧美三级欧美成人高清www| 人人爽久久涩噜噜噜网站| 午夜精品久久久久久久男人的天堂| 98精品国产高清在线xxxx天堂| 亚洲欧美资源在线| 免费97视频在线精品国自产拍| 美女999久久久精品视频| 亚洲精品456在线播放狼人| 欧美色欧美亚洲高清在线视频| 国产精品国产亚洲伊人久久| 久久久久久久影视| 国产小视频91| 精品日韩美女的视频高清| 在线一区二区日韩| 亚洲伊人一本大道中文字幕| 欧美精品激情blacked18| 亚洲成人久久网| 成人久久久久久久| 日韩av免费观影| 国产精品福利小视频| 欧美极品xxxx| 美日韩精品免费视频| 亚洲精品久久7777777| 欧美视频在线观看免费| 亚洲精品丝袜日韩| 亚洲激情视频网站| 国产欧美婷婷中文| 精品国产一区二区三区四区在线观看| 亚洲xxxx做受欧美| 久久综合国产精品台湾中文娱乐网| 亚洲欧美日韩久久久久久| 国产拍精品一二三| 国产精品99蜜臀久久不卡二区| 亚洲欧美在线看| 欧美国产在线视频| 亚洲欧美日韩一区二区三区在线| 懂色av影视一区二区三区| 久久露脸国产精品| 一本色道久久综合亚洲精品小说|