文档章节

SharePoint CAML In Action——Part II

 木宛城主
发布于 2015/03/02 19:42
字数 880
阅读 4
收藏 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开发常用开发工具,希望能够对大家有所帮助。如果您有更好的工具,没有...

冷秋寒
2018/06/29
0
0
SharePoint中CAML使用的一些总结

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

科技小毛
2017/08/08
0
0
sharepoint 工作流文章

三个工作流配置文章 SharePoint Designer 2010 部署工作流实例 http://wenku.baidu.com/link?url=go4wGc9CFD5mtSmMiGKkmLjk1JOkpZxI2-tt8nWXSknxModuRL-z-ATMOVeOF9swhver05YEJTl8EtnX3tYB8j......

yuxye
2016/02/22
0
0
独立模式安装sharepoint 2013,配置向导报错解决方案

本文转自:http://blog.sina.com.cn/s/blog_6a8dae300101h11f.html 使用独立模式安装Sharepoint Server 2013,允许配置向导到第8步创建示例数据时,出错了! Exception: System.ArgumentExce...

yuxye
2016/02/19
0
0
Onenote Class Notebook Ctreator,协作教学的利器

OneNote Class Notebook Creator是一个帮助您建立班级笔记的SharePoint 在线程序,这个应用程序可以创建一个班级笔记本,其中包括三种类型的子笔记本。 1、 学生笔记本 — — 每个老师和学生...

dhqlx
2018/06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

20个使用 Java CompletableFuture的例子

https://colobu.com/2018/03/12/20-Examples-of-Using-Java%E2%80%99s-CompletableFuture/

lemos
32分钟前
1
0
Apache 流框架 Flink,Spark Streaming,Storm对比分析

1.Flink架构及特性分析 Flink是个相当早的项目,开始于2008年,但只在最近才得到注意。Flink是原生的流处理系统,提供high level的API。Flink也提供 API来像Spark一样进行批处理,但两者处理...

hblt-j
36分钟前
1
0
什么是公网IP、内网IP和NAT转换?

搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么? 1、引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网I...

linuxprobe16
42分钟前
1
0
Spring Cloud搭建微服务架构----流量回放

前言 系统微服务化后,传统的自测/测试方式都变得比较困难: 依赖的服务可能不稳定。 服务无法提供期望的响应数据。 缺少场景构造标准。 随着整体业务越来越复杂,微服务依赖的越来越多,测试...

春哥大魔王的博客
今天
4
0
记一次springboot模块配置问题导致读取Apollo配置中心配置文件始终错误的问题

现在正在做的一个项目采用的是微服务,主框架是spring cloud,配置中心用的是携程的Apollo。 项目下有多个服务,在测试服务器上启动用户服务的时候发现在eureka中心另一个服务被启动了,尝试...

zcqshine
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部