入门者必看!SharePoint之CAML总结(实战)
分享人:广州华软 无名

一. 前言
在SharePoint中,不支持直接操作数据库,但开发过程中,避免不了查询数据,那么,在SharePoint中如何查询数据?
当然是使用CAML语法。
二. 目录
1. 什么是CAML
2. 如何使用CAML查询数据
3.1 如何通过知识分享模板创建分享文章
3.2 筛选条件
3.3 逻辑运算
3.4排序条件
3.5返回字段
3.6查询范围
3.7字段类型
3.8完整例子
4.总结
三. 什么是CAML
协作应用程序标记语言 (CAML) 是一种基于 XML 的语言。
在SharePoint使用此语言描述对列表的查询,同时也描述字段类型定义、站点模板定义等。
在SharePoint开发中,基本都包含数据查询,根据某些筛选、排序条件,查询某个列表条目的集合。
四. 如何使用CAML查询数据
4.1 筛选条件
|
操作符 |
备注 |
|
Eq |
等于 |
|
Neq |
不等于 |
|
Lt |
小于 |
|
Leq |
小于等于 |
|
Gt |
大于 |
|
Geq |
大于等于 |
|
Contains |
包含 |
|
BeginsWith |
以某字符串开头 |
|
In |
在集合范围内 |
|
IsNull |
为空, |
|
IsNotNull |
不为空 |
|
Membership |
属于用户组 |
|
User |
用户 |
|
Boolean |
是否,值(1是,0否) |
|
_ModerationStatus |
批准,0已批准,1已拒绝,2待定 |
4.2 逻辑运算
在CAML中也支持多个查询条件的逻辑组合,支持“与”和“或”,但是不支持“非”。通过<And></And>和<Or></Or>标签进行逻辑运算。
不过需要特别声明的是,And标签和Or标签内部,只能使用两个查询条件。
And标签和Or标签内部,只能使用两个查询条件,需要3个条件,则需要改成And嵌套And
<And>
<And>
<Eq><FieldRef Name=”Title”><Value Type=”Text”>Value</Value></Eq>
<Eq><FieldRef Name=”Name”><Value Type=”Text”>Value</Value></Eq>
</And>
<Eq><FieldRef Name=”School”><Value Type=”Text”>Value</Value></Eq>
</And>
4.3 排序条件
使用<OrderBy></OrderBy>指定排序条件。
查询条件中每个字段按照排列的顺序依次为首要查询条件、次要查询条件:
<FieldRef Name='字段名' Ascending='TRUE|FALSE' />
其中的Name属性同样必须使用内部名称,Ascending指定升序或者降序,则默认升序。
<OrderBy>
<FieldRef Name='Title'/>
<FieldRef Name='ID' Ascending='FALSE' />
</OrderBy>
4.4 返回字段
考虑到查询性能,需要指定返回字段,不指定则返回所有字段。指定返回字段的方式使用<FieldRef Name='字段名' />的形式。
例如,如果需要返回标题、ID字段,则写法为:
<FieldRef Name='Title' />
<FieldRef Name='ID' />
4.5 查询范围
ViewAttributes = "Scope='FilesOnly'"
Scope='Default' : 只查询指定文件夾下的项目及子文件夾
Scope='FilesOnly' : 只查询指定文件夾下的项目
Scope='Recursive' : 查询所有项目,不查询文件夾
Scope='RecursiveAll' : 查询所有项目和所有子文件夾
4.6 字段类型
使用CAML语法查询列表数据,需要指定字段类型,不同的字段类型,CAML语法也不一样。下面列出常用的字段类型以及常用的常用类型的查询方式。
|
成员名称 |
说明 |
|
Integer |
正整数或负整数值。 |
|
Text |
单行文本。 |
|
DateTime |
日期和时间值。 |
|
Counter |
内部 ID 字段的整数 |
|
Choice |
选项值。 |
|
Lookup |
其他列表中的值对的引用。 |
|
Boolean |
数据库中存储为1或0的布尔值。。 |
|
Number |
浮点数。 |
|
Currency |
在特定区域设置基于货币值的格式。 |
|
URL |
超链接。 |
|
Calculated |
计算的值。 |
|
User |
SharePoint 网站的用户。 |
|
ModStat |
内容审批状态。 |
4.6.1 Integer
<Eq><FieldRef Name='Age'/><Value Type='Text'>12</Value></Eq>
4.6.2 Text
<Eq><FieldRef Name='Title'/><Value Type='Text'>测试</Value></Eq>
4.6.3 Boolean
True
<Eq><FieldRef Name='IsEnd' /><Value Type='Boolean'>1</Value></Eq>
False
<Eq><FieldRef Name='IsEnd /><Value Type='Boolean'>0</Value></Eq>
4.6.4 Url
例如:http://sp/managedpath/spwebOrSitecollectionname,需要用相对地址
<Where>
<BeginsWith>
<FieldRef Name='URL'/>
<Value Type='URL'>/managedpath/spwebOrSitecollectionname</Value>
</BeginsWith>
</Where>
4.6.5 Calculated
这里的Type取值为SPFieldCalculated.OutputType
<Eq>
<FieldRef Name='FullName' />
<Value Type='Text'>Rafael</Value>
</Eq>
4.6.6 Counter
<Eq><FieldRef Name='ID' /><Value Type='Counter'>66</Value></Eq>
4.6.7 User
根据用户ID查询
<Eq><FieldRef Name='Author' LookupId='True' /><Value Type='Lookup' >31</Value></Eq>"
4.6.8 Folder
如果是文件,则FSObjType的值为0
<Eq>
<FieldRef Name='FSObjType' />
<Value Type='Number'>1</Value>
</Eq>
4.6.9 Date
默认情况下,对于时间和日期类型的查询只精确到日期,如果需要精确到时间:
<Gt> <FieldRef Name='DateTimeField' /> <Value Type='DateTime' IncludeTimeValue='TRUE'> 2009-10-08T17:48:37Z </Value> </Gt>
(其中的日期格式可以通过使用一个静态方法SPUtility.CreateISO8601DateTimeFromSystemDateTime转换得到)
4.6.10 Lookup
如果查询的字段类别是lookup,指定值的时候可以指定具体值也可以指定ID,如果需要指定ID,需要在FieldRef元素里指定LookupId为true
<Eq>
<FieldRef Name='CFRefTitle />
<Value Type='Lookup'>测试</Value>
</Eq>
或者
<Eq><FieldRef Name='Country' LookupId='True' /><Value Type='Lookup'>11</Value></Eq>
4.6.11 IsNull
<IsNull> <FieldRef Name="Status" /></IsNull>
4.6.12 IsNotNull
< IsNotNull> <FieldRef Name="Status" /></ IsNotNull>
4.6.13 ModStat
<Eq><FieldRef Name='_ModerationStatus'/><Value Type='ModStat'>0</Value></Eq>
4.7 完整例子
查询标题为**的数据。

五. 总结
本文主要介绍了如何使用CAML查询数据,只有掌握它,才能更好地进行SharePoint开发。
在编写CAML字符串的时候,需要特别注意Xml标签的大小写是敏感的。
CAML语法,以Xml的形式进行标准化,便于计算机的解析和阅读,相比SQL而言,也更加安全,不用担心SQL注入。
要说CAML的地位就相当于SQL在网站中的地位一样,使你不得不去熟悉它。
觉得本文有用的,可以点一下关注哦!
入门者必看!SharePoint之CAML总结(实战)的更多相关文章
- Springboot 完整搭建快速入门,必看!
前言 手把手教你Springboot微服务项目搭建快速入门,通过本文学习Springboot的搭建快速入门,掌握微服务大致的配置服务,后续将会继续将核心组件引入到项目中,欢迎关注,点赞,转发. Spr ...
- php代码审计入门前必看
首先先介绍什么是代码审计? 代码审计:是指针对源代码进行检查,寻找代码中的bug,这是一项需要多方面技能的技术 包括:对编程的掌握,漏洞形成原理的理解,系统和中间件等的熟悉 2.为什么要进行代码审计, ...
- Python 的映射数据类型有哪些?零基础小白入门学习必看
1 映射类关系 Python 的 collections.abc 模块内拥有 Mapping 和 MutableMapping 这两个抽象基类,它们为 dict 和其他类似的类型提供了接口定义. mu ...
- 想入职阿里的Java开发者必看,阿里巴巴面试官实战经验分享!
最近社区Java技术进阶群的小伙伴总是会问,如何面试阿里Java技术岗,需要什么条件,做哪些准备:小编就这些问题找到了阿里技术团队中在一线真正带Java开发团队并直接参与技术面试的专家,分享了自身在筛 ...
- Java编程学习知识点分享 入门必看
Java编程学习知识点分享 入门必看 阿尔法颜色组成(alpha color component):颜色组成用来描述颜色的透明度或不透明度.阿尔法组成越高,颜色越不透明. API:应用编程接口.针对软 ...
- Liunx新手入门必看
安装CentOS(Linux的一个常用发行版本,互联网公司经常使用这个发行版)用到的软件: VMware_workstation_full_12.5.2.exe 虚拟机软件,虚拟机由这个软件安装.管理 ...
- 学习ios(必看经典)牛人40天精通iOS开发的学习方法
学习ios(必看经典)牛人40天精通iOS开发的学习方法 描述 这是一套从一个对iOS开发感兴趣的学员到iOS开发高手的系统.专业的课程体系.以培养企业开发真正需要的人才为目标,每个知识点都用案例来讲 ...
- Linux网络编程必看书籍推荐
首先要说讲述计算机网络和TCP/IP的书很多. 先要学习网络知识才谈得上编程 讲述计算机网络的最经典的当属Andrew S.Tanenbaum的<计算机网络>第五版,这本书难易适中. &l ...
- iOS开发 iOS10推送必看
iOS10更新之后,推送也是做了一些小小的修改,下面我就给大家仔细说说.希望看完我的这篇文章,对大家有所帮助. 一.简单入门篇---看完就可以简单适配完了 相对简单的推送证书以及环境的问题,我就不在这 ...
随机推荐
- 【转】js 好的程序设计,应该什么时候使用 try catch 呢?
比如在检测浏览器是否支持某些功能的时候 if (!xx) { console.error('此浏览器不支持 xx 功能') } 还是 try { xx; } catch(e) { throw new ...
- macbook 添加快捷启动服务
来至 Mac OS X: Launch Terminal from keyboard shortcut os x 上很多功能都可以通过Apple自家的Automator.app创建,且使用此方法可以为 ...
- Linux下MySQL的数据文件存放位置
http://bbs.csdn.net/topics/390620630mysql> show variables like '%dir%';+------------------------- ...
- Ajax+Spring MVC实现跨域请求(JSONP)(转)
背景: AJAX向后台(springmvc)发送请求,报错:已阻止交叉源请求:同源策略不允许读取 http://127.0.0.1:8080/DevInfoWeb/getJsonp 上的远程资源.可 ...
- 玩转zookeeper命令
zkCli 是 zookeeper 原生的与 zk服务群连接的客户端的程序. 1.如何使用zkCli,sh 连接server 与参数 2.zkCli 下的增删查改指令 与 配额 quota 1.如何使 ...
- 使用Python分析ELF文件优化Flash和Sram空间的案例
1. 背景 Zephyr项目Flash和Ram空间比较紧张,有着非常强烈的优化需求. 优化的前提是量化标的,那么如何量化Flash和Ram的使用量呢? 在量化之后,首先要对量化结果进行分析,然后采取措 ...
- IntelliJ IDEA(九) :酷炫插件系列
最近项目比较忙,很久没有更新IDEA系列了,今天介绍一下IDEA的一些炫酷的插件,IDEA强大的插件库,不仅能给我们带来一些开发的便捷,还能提高我们的与众不同. 1.插件的安装 打开setting文件 ...
- When to use next() and return next() in Node.js
Some people always write return next() is to ensure that the execution stops after triggering the ca ...
- RESTful API 设计
http://www.ruanyifeng.com/blog/2014/05/restful_api.html
- Stackoverflow 最受关注的 10 个 Java 问题
Stack Overflow 是一个大型的编程知识库.在 Stack Overflow 中已经有数以百万计的问题,并且很多答案有着很高的质量.这就是为什么 Stack Overflow 的答案经常位于 ...