分享人:广州华软 无名

一. 前言

在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总结(实战)的更多相关文章

  1. Springboot 完整搭建快速入门,必看!

    前言 手把手教你Springboot微服务项目搭建快速入门,通过本文学习Springboot的搭建快速入门,掌握微服务大致的配置服务,后续将会继续将核心组件引入到项目中,欢迎关注,点赞,转发. Spr ...

  2. php代码审计入门前必看

    首先先介绍什么是代码审计? 代码审计:是指针对源代码进行检查,寻找代码中的bug,这是一项需要多方面技能的技术 包括:对编程的掌握,漏洞形成原理的理解,系统和中间件等的熟悉 2.为什么要进行代码审计, ...

  3. Python 的映射数据类型有哪些?零基础小白入门学习必看

    1 映射类关系 Python 的 collections.abc 模块内拥有 Mapping 和 MutableMapping 这两个抽象基类,它们为 dict 和其他类似的类型提供了接口定义. mu ...

  4. 想入职阿里的Java开发者必看,阿里巴巴面试官实战经验分享!

    最近社区Java技术进阶群的小伙伴总是会问,如何面试阿里Java技术岗,需要什么条件,做哪些准备:小编就这些问题找到了阿里技术团队中在一线真正带Java开发团队并直接参与技术面试的专家,分享了自身在筛 ...

  5. Java编程学习知识点分享 入门必看

    Java编程学习知识点分享 入门必看 阿尔法颜色组成(alpha color component):颜色组成用来描述颜色的透明度或不透明度.阿尔法组成越高,颜色越不透明. API:应用编程接口.针对软 ...

  6. Liunx新手入门必看

    安装CentOS(Linux的一个常用发行版本,互联网公司经常使用这个发行版)用到的软件: VMware_workstation_full_12.5.2.exe 虚拟机软件,虚拟机由这个软件安装.管理 ...

  7. 学习ios(必看经典)牛人40天精通iOS开发的学习方法

    学习ios(必看经典)牛人40天精通iOS开发的学习方法 描述 这是一套从一个对iOS开发感兴趣的学员到iOS开发高手的系统.专业的课程体系.以培养企业开发真正需要的人才为目标,每个知识点都用案例来讲 ...

  8. Linux网络编程必看书籍推荐

    首先要说讲述计算机网络和TCP/IP的书很多. 先要学习网络知识才谈得上编程 讲述计算机网络的最经典的当属Andrew S.Tanenbaum的<计算机网络>第五版,这本书难易适中. &l ...

  9. iOS开发 iOS10推送必看

    iOS10更新之后,推送也是做了一些小小的修改,下面我就给大家仔细说说.希望看完我的这篇文章,对大家有所帮助. 一.简单入门篇---看完就可以简单适配完了 相对简单的推送证书以及环境的问题,我就不在这 ...

随机推荐

  1. Python_从字符串中提取号码

    import re telNumber = '''Suppose my Phone No. is 0535-1234567,yours is 010-12345678,his is 025-87654 ...

  2. mysql中如何处理字符

    concat函数 使用方法: CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制字符串,则结 ...

  3. C#实现联通短信Sgip协议程序源码

    此程序为中国联通Sgip协议程序接口,适合在中国联通申请了短信发送端口的公司使用. 短信群发已经成为现在软件系统.网络营销等必不可少的应用工具.可应用在短信验证.信息群发.游戏虚拟商品购买.事件提醒. ...

  4. tkinter调取签名网而设计签名页面

    # --*-- coding:utf-8 --*-- import tkinter as tk import re import requests from tkinter import messag ...

  5. Layer组件多个iframe弹出层打开与关闭及参数传递

    一.Layer简介 Layer是一款近年来备受青睐的web弹层组件,基于jquery,易用.实用,兼容包括IE6在内的所有主流浏览器,拥有丰富强大的可自定义的功能. Layer官网地址:http:// ...

  6. Nagios安装、配置、问题记录

    http://youyizhimen.blog.163.com/blog/static/170917267201201745523276/ 本文描述了我在使用Nagios的过程中遇到的一些问题.解决办 ...

  7. 如何将数据库中存的树转化为树形列表(以easyui的tree为例)

    很多时候,我们会把一棵树存放到数据库中,当前台需要展示一个树形列表时,将这棵树读取出来并显示,这个过程是怎么实现的呢? 这篇文章是以构造一棵easyui前台框架的一个树形列表为例,后台框架是sprin ...

  8. ubuntu16.04开机循环输入密码无法进入桌面的解决办法

    前些天碰到一个头疼的问题,启动我的ubuntu之后,输入密码闪屏一下,又需要输入密码!!!于是再输还要再输!!!!! 经过百度一翻后终于找到原因和解决办法. 原来是我之前在profile文件里配置了一 ...

  9. hdu 2899 Strange fuction 模拟退火

    求  F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100)的最小值 模拟退火,每次根据温度随机下个状态,再根据温度转移 #include& ...

  10. BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划

    BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被 ...