分享人:广州华软 无名web
在SharePoint中,不支持直接操做数据库,但开发过程当中,避免不了查询数据,那么,在SharePoint中如何查询数据?数据库
固然是使用CAML语法。安全
1. 什么是CAML性能
2. 如何使用CAML查询数据测试
3.1 如何经过知识分享模板建立分享文章网站
3.2 筛选条件spa
3.3 逻辑运算3d
3.4排序条件blog
3.5返回字段排序
3.6查询范围
3.7字段类型
3.8完整例子
4.总结
协做应用程序标记语言 (CAML) 是一种基于 XML 的语言。
在SharePoint使用此语言描述对列表的查询,同时也描述字段类型定义、站点模板定义等。
在SharePoint开发中,基本都包含数据查询,根据某些筛选、排序条件,查询某个列表条目的集合。
操做符 |
备注 |
Eq |
等于 |
Neq |
不等于 |
Lt |
小于 |
Leq |
小于等于 |
Gt |
大于 |
Geq |
大于等于 |
Contains |
包含 |
BeginsWith |
以某字符串开头 |
In |
在集合范围内 |
IsNull |
为空, |
IsNotNull |
不为空 |
Membership |
属于用户组 |
User |
用户 |
Boolean |
是否,值(1是,0否) |
_ModerationStatus |
批准,0已批准,1已拒绝,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>
使用<OrderBy></OrderBy>指定排序条件。
查询条件中每一个字段按照排列的顺序依次为首要查询条件、次要查询条件:
<FieldRef Name='字段名' Ascending='TRUE|FALSE' />
其中的Name属性一样必须使用内部名称,Ascending指定升序或者降序,则默认升序。
<OrderBy>
<FieldRef Name='Title'/>
<FieldRef Name='ID' Ascending='FALSE' />
</OrderBy>
考虑到查询性能,须要指定返回字段,不指定则返回全部字段。指定返回字段的方式使用<FieldRef Name='字段名' />的形式。
例如,若是须要返回标题、ID字段,则写法为:
<FieldRef Name='Title' />
<FieldRef Name='ID' />
ViewAttributes = "Scope='FilesOnly'"
Scope='Default' : 只查询指定文件夾下的项目及子文件夾
Scope='FilesOnly' : 只查询指定文件夾下的项目
Scope='Recursive' : 查询全部项目,不查询文件夾
Scope='RecursiveAll' : 查询全部项目和全部子文件夾
使用CAML语法查询列表数据,须要指定字段类型,不一样的字段类型,CAML语法也不同。下面列出经常使用的字段类型以及经常使用的经常使用类型的查询方式。
成员名称 |
说明 |
Integer |
正整数或负整数值。 |
Text |
单行文本。 |
DateTime |
日期和时间值。 |
Counter |
内部 ID 字段的整数 |
Choice |
选项值。 |
Lookup |
其余列表中的值对的引用。 |
Boolean |
数据库中存储为1或0的布尔值。。 |
Number |
浮点数。 |
Currency |
在特定区域设置基于货币值的格式。 |
URL |
超连接。 |
Calculated |
计算的值。 |
User |
SharePoint 网站的用户。 |
ModStat |
内容审批状态。 |
<Eq><FieldRef Name='Age'/><Value Type='Text'>12</Value></Eq>
<Eq><FieldRef Name='Title'/><Value Type='Text'>测试</Value></Eq>
True
<Eq><FieldRef Name='IsEnd' /><Value Type='Boolean'>1</Value></Eq>
False
<Eq><FieldRef Name='IsEnd /><Value Type='Boolean'>0</Value></Eq>
例如:http://sp/managedpath/spwebOrSitecollectionname,须要用相对地址
<Where>
<BeginsWith>
<FieldRef Name='URL'/>
<Value Type='URL'>/managedpath/spwebOrSitecollectionname</Value>
</BeginsWith>
</Where>
这里的Type取值为SPFieldCalculated.OutputType
<Eq>
<FieldRef Name='FullName' />
<Value Type='Text'>Rafael</Value>
</Eq>
<Eq><FieldRef Name='ID' /><Value Type='Counter'>66</Value></Eq>
根据用户ID查询
<Eq><FieldRef Name='Author' LookupId='True' /><Value Type='Lookup' >31</Value></Eq>"
若是是文件,则FSObjType的值为0
<Eq>
<FieldRef Name='FSObjType' />
<Value Type='Number'>1</Value>
</Eq>
默认状况下,对于时间和日期类型的查询只精确到日期,若是须要精确到时间:
<Gt> <FieldRef Name='DateTimeField' /> <Value Type='DateTime' IncludeTimeValue='TRUE'> 2009-10-08T17:48:37Z </Value> </Gt>
(其中的日期格式能够经过使用一个静态方法SPUtility.CreateISO8601DateTimeFromSystemDateTime转换获得)
若是查询的字段类别是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>
<IsNull> <FieldRef Name="Status" /></IsNull>
< IsNotNull> <FieldRef Name="Status" /></ IsNotNull>
<Eq><FieldRef Name='_ModerationStatus'/><Value Type='ModStat'>0</Value></Eq>
查询标题为**的数据。
本文主要介绍了如何使用CAML查询数据,只有掌握它,才能更好地进行SharePoint开发。
在编写CAML字符串的时候,须要特别注意Xml标签的大小写是敏感的。
CAML语法,以Xml的形式进行标准化,便于计算机的解析和阅读,相比SQL而言,也更加安全,不用担忧SQL注入。
要说CAML的地位就至关于SQL在网站中的地位同样,使你不得不去熟悉它。
以为本文有用的,能够点一下关注哦!