分享人:广州华软 无名

一. 前言

在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在网站中的地位一样,使你不得不去熟悉它。

觉得本文有用的,可以点一下关注哦!

转载于:https://www.cnblogs.com/gzhr/p/10750859.html

入门者必看!SharePoint之CAML总结(实战)相关推荐

  1. 视频教程-Python零基础入门高薪必看动画课程-Python

    Python零基础入门高薪必看动画课程 从事多年的Web应用开发,拥有10余年一线开发经验和教学经验.曾在中国银行从事数据采集服务,现专注于Python教学相关工作.参与过O2O外卖平台系统.微信商城 ...

  2. centos7 mysql创建表_CentOS7 MySQL数据库入门 小白必看

    昨天网盾科技发布的一篇关于CentOS7配置ssh的文章,有很多小伙伴都收藏了,想必是对大家很有帮助,那么今天网盾科技再给大家分享一篇关于CentOS7配置MySQL数据库入门的文章,小白必看哟! l ...

  3. AI基础:入门人工智能必看的论文【附下载链接】

    0.导语 AI领域的发展会是IT中最快的.我们所看到的那些黑科技,其后面无不堆积了大量的论文.而且都是最新.最前沿的论文. 从某种调度来讲,他们所用的技术跟书籍里的内容确实不是一个时代.要想与时俱进, ...

  4. python教程是什么课文_新手快速入门Python必看这篇文章

    Python是一门多种用途的编程语言,时常在扮演脚本语言的角色.一般来说,Python可定义为面向对象语的脚本语言:这个定义把面向对象的支持和全面的面向脚本语言的角色融合在一起.事实上,人们往往以&q ...

  5. 推荐!入门人工智能必看的45篇论文(文末下载)

    0.导语 AI领域的发展会是IT中最快的.我们所看到的那些黑科技,其后面无不堆积了大量的论文.而且都是最新.最前沿的论文. 从某种调度来讲,他们所用的技术跟书籍里的内容确实不是一个时代.要想与时俱进, ...

  6. AI基础:入门人工智能必看的论文

    0.导语 AI领域的发展会是IT中最快的.我们所看到的那些黑科技,其后面无不堆积了大量的论文.而且都是最新.最前沿的论文. 从某种调度来讲,他们所用的技术跟书籍里的内容确实不是一个时代.要想与时俱进, ...

  7. 产品经理零基础怎么入门?必看经验

    零基础的小白入门产品经理,就像是"一条没有地图导航的路"--没有路标.没有同行人.一路摸索.磕磕绊绊,不知何时能到达目的地. 对于从我们0基础的小白来说,会感到困惑.焦虑.无所适从 ...

  8. springboot aop使用_Springboot 完整搭建快速入门,必看!

    点击上方蓝字关注我们 作者:CansluckCSDN博客:https://blog.csdn.net/xgx120413 前言 手把手教你Springboot微服务项目搭建快速入门,通过本文学习Spr ...

  9. Springboot 整合 ElasticSearch 入门教学必看

    ElasticSearch 相比搜到这篇文章的人,都已经有过对它的了解, 一种流行的企业级搜索引擎,是一个分布式,高性能.高可用.可伸缩的搜索和分析系统. 那么用我粗俗的言语来说,它就是提供一个存储数 ...

最新文章

  1. cmd导入oracle库文件,cmd 导入oracle数据库
  2. C# 托管资源和非托管资源
  3. console线驱动安装_centos7安装docker
  4. 软件工程第二次作业——结对编程
  5. CMS之图片管理(2)
  6. mysql 数据库 额外_mysql – 拥有“额外”数据库查询有多糟糕?
  7. go odroid_小众奇葩!Odroid Go Super简评
  8. 收款神器!解读聚合收款码背后的原理,你都知道吗?
  9. LeetCode 524. Longest Word in Dictionary through Deleting
  10. Evaluate that you caught up with the price cut
  11. double类型数值比较的坑
  12. 【渝粤教育】国家开放大学2018年秋季 1248T公共部门人力资源管理 参考试题
  13. 腾讯云服务器安装AMH控制面板
  14. java web从入门到精通 明日科技 源码_Java Web 从入门到精通(明日科技)
  15. 图像处理——插值算法
  16. 网络计算机是第几代,操作系统 是在计算机发展的第几代出现的?
  17. 虚拟机内安装金蝶K3环境
  18. MATLAB绘制区域图形
  19. python:实现9×9二维数组数独算法(附完整源码)
  20. html ico 图片 无效,设置favicon.ico manifest.json无效

热门文章

  1. python 战棋游戏代码实现(2):六边形地图寻路和显示
  2. 如何高效制作数据可视化大屏,大屏高效制作攻略分享,总有一款适合你
  3. 猪圆谷润铬羽丰,派满歌甜四海赢
  4. 调用百度网盘开放平台接口,操作百度网盘中的文件,上传、下载等
  5. VMware Station pro15虚拟机的下载与安装
  6. vue2 + tinymce 包含自定义图片上传及视频、音频上传
  7. java 和c 多态比较_多态在 Java 和 C 编程语言中的实现比较
  8. python 使用sk_learn :ValueError: Expected 2D array, got 1D array instead
  9. DM7.0在VM-中标麒麟NeoKylin虚拟机上安装
  10. 人类基因编辑技术及背后的伦理问题 【个人观点,仅供参考】