入门者必看!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更新之后,推送也是做了一些小小的修改,下面我就给大家仔细说说.希望看完我的这篇文章,对大家有所帮助. 一.简单入门篇---看完就可以简单适配完了 相对简单的推送证书以及环境的问题,我就不在这 ...
随机推荐
- cw2vec理论及其实现
导读 本文对AAAI 2018(Association for the Advancement of Artificial Intelligence 2018)高分录用的一篇中文词向量论文(cw2ve ...
- MySQL松散索引扫描与紧凑索引扫描
什么是松散索引? 答:实际上就是当MySQL 完全利用索引扫描来实现GROUP BY 的时候,并不需要扫描所有满足条件的索引键即可完成操作得出结果. 要利用到松散索引扫描实现GROUP BY,需要至少 ...
- 数据分析之---Python可视化工具
1. 数据分析基本流程 作为非专业的数据分析人员,在平时的工作中也会遇到一些任务:需要对大量进行分析,然后得出结果,解决问题. 所以了解基本的数据分析流程,数据分析手段对于提高工作效率还是非常有帮助的 ...
- 通过VirtualBox安装Linux系统(CentOS7)
本文目的:创建虚拟系统.在windows系统中通过虚拟工具VirtualBox创建一个虚拟系统CentOS. 备注:(1)版本如下:VirtualBox-5.2.12-122591-Win 和Cent ...
- Oauth2.0 用Spring-security-oauth2
客户端通过appId,redirectUrl,在open platform打开的页面上填写正确的用户名和密码后,open platform验证通过后,会跳转到redirectUrl,此时的redire ...
- valueOf函数详解
在类型转换中,经常用到方法valueOf()和他toString(),所有对象(包括基本包装类型)都拥有这两个方法.这篇文章我们先看看valueOf()方法.valueOf()方法会将对象转换为基本类 ...
- jQuery学习之旅 Item4 细说DOM操作
jQuery-–DOM操作(文档处理) Dom是Document Object Model的缩写,意思是文档对象模型.DOM是一种与浏览器.平台.语言无关的接口,使用该接口可以轻松访问页面中所有的标准 ...
- Python中使用MongoEngine2
mongoengine基本用法实例: from mongoengine import * from datetime import datetime #连接数据库:test # connect('te ...
- Smokeping
Smokeping允许你监测多台服务器. Smokeping使用RRDtool来存储数据,另外,其可基于RRDtool输出生成相应的统计图表. Smokeping由两个部分组成.一个运行在后台.定期收 ...
- Django的ORM操作
ORM操作 select * from tb where id > 1 # 对应关系 models.tb.objects.filter(id__gt=1) models.tb.objects.f ...