文档章节

SharePoint CAML In Action——Part II

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

冷秋寒 ⋅ 2014/04/01 ⋅ 0

SharePoint中CAML使用的一些总结

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

科技小毛 ⋅ 2017/08/08 ⋅ 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

SharePoint2013问题与解决(一)——图表web部件默认不支持

SharePoint2013正式版已经出来好几个月了。总体来说,SharePoint 2013在界面上做了很大的变化,并且设计方式上也做了很大的变化。功能上也做了很大的更改,其中最大的更改莫过于提出了app的概...

lhan ⋅ 2013/01/09 ⋅ 1

Office 2010 SP1新增功能一览

日前,微软已经宣布Officer 2010 SP1将于6月底发布。届时用户可以通过微软下载中心下载或者通过更新手动升级SP1,根据以往经验,微软自动推送升级可能要到在3个月内。Office 2010 SP1将包括大...

Midnight ⋅ 2011/05/23 ⋅ 2

sharepoint 工作流文章

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

yuxye ⋅ 2016/02/22 ⋅ 0

福昕阅读器被微软指定为RMS首选PDF阅读器

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

harp ⋅ 2012/11/23 ⋅ 0

独立模式安装sharepoint 2013,配置向导报错解决方案

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

yuxye ⋅ 2016/02/19 ⋅ 0

配置SharePoint门户网站的基本思路

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

第三方那块 ⋅ 2017/11/21 ⋅ 0

SQL Server 2008 SP1和Feature Pack CTP提供了新的特性和工具

微软最近宣布提供了SQL Server 2008 R2 SP1 CTP的下载,其中不仅包括了所有累积的更新,还有SQL Server 2008 R2 SP1 Feature Pack CTP1,其中包含了很多单独的工具,这些工具为SQL Server 20...

墙头草 ⋅ 2011/05/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 昨天 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 昨天 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 昨天 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 昨天 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 昨天 ⋅ 0

监控各项服务

比如有三个服务, 为了减少故障时间,增加监控任务,使用linux的 crontab 实现. 步骤: 1,每个服务写一个ping接口 监控如下内容: 1,HouseServer 是否正常运行,所以需要增加一个ping的接口 ; http...

黄威 ⋅ 昨天 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 昨天 ⋅ 0

nodejs __proto__跟prototype

前言 nodejs中完全没有class的这个概念,这点跟PHP,JAVA等面向对象的语言很不一样,没有class跟object的区分,那么nodejs是怎么样实现继承的呢? 对象 对象是由属性跟方法组成的一个东西,就...

Ai5tbb ⋅ 昨天 ⋅ 0

Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库

Q: Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库 A: 执行以下2条命令解决: apt-get install php-mysql service apache2 restart php -m 执行后会多以下4个模块: mysqli mysqlnd...

SamXIAO ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部