文档章节

SharePoint CAML In Action——Part II

 木宛城主
发布于 2015/03/02 19:38
字数 880
阅读 9
收藏 0

 在SharePoint中,相对于Linq to SharePoint而言,CAML是轻量化的。当然缺点也是显而易见的,"Hard Code"有时会让你抓狂。在实际场景中,经常会根据某些并不复杂的要求从List中取出相关的ListItemCollection,所以用Linq to SharePoint这把牛刀就显得笨拙了,往往用CAML会显得便捷多了。所以本篇博客将对CAML查询进行快速指导。

  对于List而言,我们对常见的Column进行讲解,常见的Column Type有Single Line Of Text、Multiple Lines of Text、Number、Boolean、Date and Time、Lookup、Person of Group,所以接下来将用CAML语言对这些常见的Column Type在查询时进行描述。

Single Line Of Text

Value Type

Text

Example

<Where><Eq><FieldRef Name=\"FirstName\"/><Value Type=\"Text\">Eyes</Value></Eq></Where>

Notes

这是一个最简单查询,查询将会返回当FirstName等于Eyes时所匹配的所有的ListItems

 

Multiple Lines of Text

Value Type

Text

Example

<Where><Contains><FieldRef Name=\"Description\"/><Value Type=\"Text\">Scrum</Value></Contains></Where>

Notes

这是一个最简单查询,查询将会返回当Description包含Scrum时所匹配的所有的ListItems

 

Person or Group(By Name)

Value Type Text
Example <Where><Eq><FieldRef Name=\"Editor\"/><Value Type=\"Text\">Tom</Value></Eq></Where>
Notes

这个CAML查询Modified By为 Eyes的所有ListItems,如果AD中所有的Employees的DisplayName=Tom的人员有多个,

那么则将返回多个符合条件的结果。

Person or Group(By ID)

Value Type       Integer
Example

<Where><Eq><FieldRef Name=\"Editor\" LookupId="\TRUE\"/><Value Type=\"Integer\"><UserID/></Value></Eq></Where>

Or

<Where><Eq><FieldRef Name=\"Editor\" LookupId="\TRUE\"/><Value Type=\"Integer\">5</Value></Eq></Where>

Notes

当添加了LookupId="TRUE"到<FieldRef/>并且将<UserID/>作为Value,这个查询将基于当前用户ID进行查询过滤,

当然也可以手动指定ID来替换<UserID/>(e.g.<Value Type="Interge">5</Value>,即指定了一个ID为5的Person)。

因为ID是唯一的,所以这个查询确保了条件的唯一(只有一个User是Valid Value)

Lookup(By Text)

Value Type Lookup
Example <Where><Contains><FieldRef Name=\"Specialization\" /><Value Type=\"Lookup\">SharePoint</Value></Contains></Where>
Notes 通过Text的值去过滤,有可能DisplayName相同,所以以Text值当条件可能或造成查询条件不唯一.

Lookup(By ID)

Value Type Lookup
Example <Where><Eq><FieldRef Name=\"Specialization\" LookupId="\TRUE\"/><Value Type=\"Lookup\">5</Value></Eq></Where>
Notes

当添加了LookupId="TRUE"到<FieldRef/>,这个查询将基于Lookup的ID而不是Text值去过滤筛选,

ID是唯一的,所以这个查询将确保了查询条件的唯一性。

Date(Day only)

Value Type       Date Or DateTime
Example

<Where><Gt><FieldRef Name=\"EntryTime\" /><Value Type=\"DateTime\">2008-01-01</Value></Gt></Where>

Or

<Where><Gt><FieldRef Name=\"EntryTime\" /><Value Type=\"DateTime\"><Today/></Value></Gt></Where>

Notes


这个类型的查询Value Type设置了DateTime或者Date即可,但需要注意的是Value格式为(yyyy-mm-dd)。

当然Value也可以是<Today/>即代表当天(你也可以offset 当前天,比如:<Today OffsetDays="-7"/>)



Boolean

Value Type         Interge Or Boolean Or Bool
Example

<Where><Eq><FieldRef Name=\"IsMale\"/><Value Type=\"Interge\">1</Value></Eq></Where>

Or

<Where><Eq><FieldRef Name=\"IsMale\"/><Value Type=\"Boolean\">1</Value></Eq></Where>

Or

<Where><Eq><FieldRef Name=\"IsMale\"/><Value Type=\"Bool\">TRUE</Value></Eq></Where>

Notes

这儿列举了当Field类型为Boolean时的Value Type的多种可能性。值得注意的是 :

<Where><Eq><FieldRef Name=\"IsMale\"/><Value Type=\"Boolean\">TRUE</Value></Eq></Where>",

这种写法是不妥的,即使Boolean=True,但返回的结果还是Boolean=False时的结果。

总结

这篇相对于上一篇而言,没有具体的分析怎样结合CAML进行查询,而是一篇对CAML语法的一个快速导读。意在帮助Developer快速查询Field对应的Value Type。

参考文章:http://joshmccarty.com/2012/06/a-caml-query-quick-reference/

© 著作权归作者所有

共有 人打赏支持
粉丝 2
博文 222
码字总数 199010
作品 0
黄浦
SharePoint 2013常用开发工具分享

众所周知,一款好的开发工具不仅能提高项目开发效率,而且能够协助开发人员简化开发流程。本文汇总几款SharePoint 2013开发常用开发工具,希望能够对大家有所帮助。如果您有更好的工具,没有...

冷秋寒
06/29
0
0
Visual Studio 11开发指南(3)Visual Studio 11开发SharePoint 2011程序

Visual Studio 11 Developer Preview版本在几个月之前就发布了出来,通过这个预览版,SharePoint开发人员可以了解Visual Studio 11中内置的有关SharePoint开发的新功能。Visual Studio 11内置...

junwong
2012/03/09
0
0
SharePoint中CAML使用的一些总结

协作应用程序标记语言 (CAML) 是一种基于 XML 的语言,用于在 Windows SharePoint Services 中定义在网站和列表中使用的字段和视图。CAML 还用于在网站设置过程中定义 Windows SharePoint S...

科技小毛
2017/08/08
0
0
配置SharePoint门户网站的基本思路

以下内容摘自笔者编著的最新图书——《网管员必读——网络应用》(第2版) 9.1.4 配置SharePoint门户网站的基本思路 对于像这类比较复杂的应用,在具体部署前掌握其基本的部署和配置思路是非...

第三方那块
2017/11/21
0
0
福昕阅读器被微软指定为RMS首选PDF阅读器

近日,福昕PDF阅读器(Foxit Reader)被微软指定为AD RMS 2.0、SharePoint® 2013及SharePoint Online在Office 365环境中的首选PDF阅读器. 福昕软件开发的福昕阅读器和福昕PDF电子文档处理套...

harp
2012/11/23
373
0

没有更多内容

加载失败,请刷新页面

加载更多

play framework 如何支持多数据源

有段时间没有写博客了,但今天又写一篇了,主要是因为这事有一丝自己的思考和动手实践,所以就记录下来了。 现有的问题: play 1.2.4 两台数据库服务器,但是play1.2.4 并不支持同时连接两台...

tuerqidi
14分钟前
0
0
Mysql only_full_group_by解析

查看当前数据库模式: select @@sql_mode; 原因: mysql 5.7中的sql_mode的值中包含'ONLY_FULL_GROUP_BY'; 处理:执行以下SQL set GLOBAL sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,N......

bug_404
16分钟前
0
0
防止表单重复提交

1:前端方式(治标不治本) $("#admin-role-save").click(function(){//admin-role-save为submit的idvar ts=$(this);var ts_old_val=ts.val();ts.val("提交中....");ts.att...

uug
16分钟前
0
0
保持屏幕常亮

getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 在act的created方法中调用即可,一般是播放视频的时候......

Carbenson
16分钟前
0
0
智能合约实施指南

与区块链技术一样,智能合约在商业领域也非常有价值。 为了让我们的读者彻底了解智能合约是什么以及它们如何影响现代商业的交易方式,我们准备了本指南。 集中商业模式正在给去中心化的模式让...

geek12345
19分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部