入门者必看!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更新之后,推送也是做了一些小小的修改,下面我就给大家仔细说说.希望看完我的这篇文章,对大家有所帮助. 一.简单入门篇---看完就可以简单适配完了 相对简单的推送证书以及环境的问题,我就不在这 ...
随机推荐
- Redis数据结构简介
Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为STRING(字符串).LIST(列表).SET(集合).HASH(散列)和ZSET(有序集合).有一部分Redis命令对 ...
- 注解@EnableDiscoveryClient,@EnableEurekaClient的区别
SpringCLoud中的"Discovery Service"有多种实现,比如:eureka, consul, zookeeper. 1,@EnableDiscoveryClie ...
- 使用 Java8 Optional 的正确姿势(转)
我们知道 Java 8 增加了一些很有用的 API, 其中一个就是 Optional. 如果对它不稍假探索, 只是轻描淡写的认为它可以优雅的解决 NullPointException 的问题, 于是代 ...
- SSM-SpringMVC-28:SpringMVC类型转换之自定义日期类型转换器
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 例子很简易,要明白的是思路,话不多说,开讲 上篇博客不是说springmvc默认的日期转换格式是yyyy/M ...
- SSM-Spring-04:Spring的DI的构造注入,P命名注入,和集合注入
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- DI和IOC相比,DI更偏向于实现 DI的set方式注入在前面入门案例里有写,所以此处不多啰嗦,直接开搞,先说 ...
- Spark2.1.0——Spark初体验
学习一个工具的最好途径,就是使用它.这就好比<极品飞车>玩得好的同学,未必真的会开车,要学习车的驾驶技能,就必须用手触摸方向盘.用脚感受刹车与油门的力道.在IT领域,在深入了解一个系统的原 ...
- 任务调度--使用java.util.Timer实现
任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务. 举个例子,比如说我们希望一个系统每周日晚上9点都将数据库文件备份一次,这时我们就可以使用任务调度来实现.为了更加的方便,我们需要 ...
- java.lang.IllegalArgumentException异常 数据库别名问题
java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expect ...
- 不吹不擂,你想要的Python面试都在这里了【315+道题】
写在前面 近日恰逢老男孩全栈8期毕业季,课程后期大家“期待+苦逼”的时刻莫过于每天早上内容回顾和面试题问答部分[临近毕业每天课前用40-60分钟对之前内容回顾.提问和补充,专挑班里不爱说话就的同学回答 ...
- MYSQL一键安装
#!/bin/bash #baishuchao qq:995345781 ############################################################### ...