在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/

SharePoint CAML In Action——Part II的更多相关文章

  1. SharePoint CAML In Action——Part I

    在SharePoint中,我们经常要对List进行操作,比如要从List中取出相应的ListItem,利用CAML是个好办法.在没了解CAML之前,我是这样取数据的: MyList.Items.Cas ...

  2. SHAREPOINT - CAML列表查询

    首先要了解的是CAML(Collaboration Application Markup Language)不仅仅是用在对列表.文档库的查询,字段的定义,站点定义等处处使用的都是CAML. 简单的提一 ...

  3. SharePoint 2010/SharePoint 2013 Custom Action: 基于Site Collection 滚动文字的通知.

    应用场景: 有时候我们的站点需要在每个页面实现滚动文字的通知,怎么在不修改Master Page的情况下实现这个功能?我们可以使用Javascript 和 Custom Action 来实现. 创建一 ...

  4. SharePoint CAML Query小结

    CAML的结构. <View Type="HTML" Name="Summary"> <ViewBody ExpandXML="TR ...

  5. Overcoming the List View Threshold in SharePoint CAML queries

    From: https://www.codeproject.com/articles/1076854/overcoming-the-list-view-threshold-in-sharepoint- ...

  6. SharePoint - CAML

    1. CAML是顺序操作,如果要实现类似 “A or B or C or D” 的结果,最好写成 “(((A or B) or C) or D)”的形式,但写成 “((A or B) or (C or ...

  7. Sharepoint CAML 增删改查 List

    Lists.UpdateListItems 方法 (websvcLists) Windows SharePoint Services 3   Adds, deletes, or updates the ...

  8. 深入浅出SharePoint——Caml快速开发

    适用于Visual Studio 2010的Caml智能感知工具 http://visualstudiogallery.msdn.microsoft.com/15055544-fda0-42db-a6 ...

  9. [总结]SHAREPOINT - CAML列表查询(上)

    首先要了解的是CAML(Collaboration Application Markup Language)不仅仅是用在对列表.文档库的查询,字段的定义,站点定义等处处使用的都是CAML. 简单的提一 ...

随机推荐

  1. C# .Net计算函数执行的时间

    C#计算函数执行的时间 protected void StopwatchTest() { System.Diagnostics.Stopwatch stopwatch = new System.Dia ...

  2. 解决IE兼容模式的方案

    在html头 加标签 强制使用最新的ie渲染 <meta http-equiv="X-UA-Compatible" content="IE=edge"&g ...

  3. ZH奶酪:Ionic通过angularJS+tabs-item-hide实现自定义隐藏tab

    参考链接:http://stackoverflow.com/questions/23991852/how-do-i-hide-the-tabs-in-ionic-framework 1.index.h ...

  4. Server Performance Advisor (SPA) 3.0

    http://blogs.technet.com/b/windows-server-china-blog/archive/2013/03/26/server-performance-advisor-s ...

  5. C++ 第七课 标准 C I/O

    clearerr() 清除错误 fclose() 关闭一个文件 feof() 如果到达文件尾(end-of-file)返回"True"(真) ferror() 检查一个文件错误 f ...

  6. scala 基础语法

    文章内容全部来自:http://twitter.github.io/scala_school/zh_cn/index.html 表达式 scala> 1 + 1 res0: Int = 2 值 ...

  7. Mongostat 3.0详解

    可以参考之前写的这篇博客: Mongostat 2.6详解 mapped Changed in version 3.0.0. Only for MMAPv1 Storage Engine. The t ...

  8. 使用 git post-receive 钩子部署服务端代码

    在 git 中提交服务器源码的时候,如果能够直接更新到测试服务器,并且重启服务使其生效,会节省懒惰的程序员们大量的时间. git 的 Server-side hook (服务端钩子/挂钩)可以用来做件 ...

  9. .NET/C#中对自定义对象集合进行自定义排序的方法

    一个集合可否排序,要看系统知不知道排序的规则,像内建的系统类型,int ,string,short,decimal这些,系统知道怎么排序,而如果一个集合里面放置的是自定义类型,比如自己定义了一个Car ...

  10. 【树莓派+.NET MF打造视频监控智能车】控制篇(.NET MF)

    在上一篇<遥控篇>文章中,我们介绍了Sony PS2手柄信号的采集和编程,通过简单的封装,以事件的方式向我们提供按键信息.本篇文章主要介绍.NET Micro Framework系统接受到 ...