文档章节

SharePoint CAML In Action——Part I

 木宛城主
发布于 2015/03/02 19:41
字数 913
阅读 8
收藏 0

 

在SharePoint中,我们经常要对List进行操作,比如要从List中取出相应的ListItem,利用CAML是个好办法。在没了解CAML之前,我是这样取数据的:

MyList.Items.Cast<SPListItem>().ToList().Where(Condition).Select(Fields);

原谅我当初如此放荡不羁的写法吧。

  • 好了,现在进入CAML实战中,首先CAML (Collaborative Application Markup Language)基于XML的一种语言。所以你写CAML时一定要注意Tag是否闭合,另外CAML也是区分大小写的。

正巧在看蝙蝠侠,可以将SPList对象可以看成是银行,SPListItem对象可那么以看成银行库里一排排保险柜,SPListItem的Fields就代表每一个保险柜中的存放的财富(比如黄金、钻石、美元)。所以可以把CAML比作型号各式的子弹的话,那SharePoint SPQuery对象就是蝙蝠侠中的小丑,在抢银行之前必须把子弹上膛,对,SPQuery对象的Query属性就是一把可以匹配任何子弹万能武器,ViewFields就是你要抢的财富类型(黄金、钻石、美元),RowLimit就是抢得一定数量的财富就跑路了,而返回的SPListItemCollection集合就是抢到的财富。

是不是感到很晕,没事,先有个概念即可。我以一个简单入门的例子,你就会明白了,当然我的比喻也是即兴发挥的,有不妥也别见怪。

CAML In Action

首先我准备两个List,一个Employee,一个Specialization,为我们提供测试数据,其中Employee中的Specialization列是查阅项类型,引用了Specialization List的数据。

  • Employee

  • Specializaion

现在如果想在Employee List中取出Specialization包括CSS,并且Age大于20岁,并且还是女性的Employees

这时你脑海中的逻辑表达式为:Specialization=CSS And Age>20 And IsMale=False。

接着你需要把上述的逻辑表达式转换为CAML语言,如下:

任何给定的And元素只能有2个结合体,即只能由2个字元素,如果需要结合3个或者更多的And条件,则必须以一个条件的形式嵌套在父And中,依次类推下去。

  • 当查询时,免不了要对结果进行排序等,这时OrderBy就可用上,比如我要对上述结果进行以Age降序形式排序,则CAML:
<OrderBy>
   <FieldRef Name='Age' Ascending ='False'/>
</OrderBy>
  • 所以完整的查询部分CAML如下:
<Where> 
        <And>
             <And>
                 <Eq>
                      <FieldRef Name='Specialization'/>
                      <Value Type='Lookup'>CSS</Value>
                 </Eq> 
                 <Gt>
                      <FieldRef Name='Age'/>
                      <Value Type='Number'>20</Value>
                 </Gt>
             </And>
             <Eq>
                 <FieldRef Name='IsMale'/>
                 <Value Type='Integer'>0</Value>
             </Eq>
        </And>
 </Where>
 <OrderBy>
        <FieldRef Name='Age' Ascending ='False'/>
 </OrderBy>
  • 当然,你可以指定从查询中返回的Fields,SPQuery对象的ViewFields属性就是代表从查询中返回的Fields:
query.ViewFields = "<FieldRef Name='Title'/><FieldRef Name='Age'/>";
  • 当数据量过多时,也可以限制返回的行数:
query.RowLimit = 1000;
  • 所以完整的利用CAML进行查询的代码如下:
SPList spList = spWeb.Lists.TryGetList("Employee");
   if (spList != null)
    {
       SPQuery query = new SPQuery();
       query.Query = @"  
                      <Where> 
                        <And>
                          <And>
                            <Eq>
                                <FieldRef Name='Specialization'/>
                                <Value Type='Lookup'>CSS</Value>
                             </Eq> 
                             <Gt>
                                <FieldRef Name='Age'/>
                                <Value Type='Number'>20</Value>
                             </Gt>
                          </And>
                          <Eq>
                             <FieldRef Name='IsMale'/>
                             <Value Type='Integer'>0</Value>
                          </Eq>
                       </And>
                      </Where>
                      <OrderBy>
                       <FieldRef Name='Age' Ascending ='False'/>
                      </OrderBy> ";
 query.ViewFields = "<FieldRef Name='Title'/><FieldRef Name='Age'/>"; query.RowLimit = 10; var listItemsColl = spList.GetItems(query);

 

  • 最后感兴趣的朋友可以通过调试看一下最终生成的CAML:以View开头,而我们写的查询条件被包含在Query节点下:

接下来

这篇博客没有过多的去讲什么是CAML以及CAML的查询元素,而是以一个Example展示了如何用CAML从List中获取相应的ListItemCollection,接下来的一篇博客会对CAML语法进行一个快速参考。

 

© 著作权归作者所有

共有 人打赏支持
粉丝 2
博文 222
码字总数 199010
作品 0
黄浦
私信 提问
SharePoint 2013常用开发工具分享

众所周知,一款好的开发工具不仅能提高项目开发效率,而且能够协助开发人员简化开发流程。本文汇总几款SharePoint 2013开发常用开发工具,希望能够对大家有所帮助。如果您有更好的工具,没有...

冷秋寒
2018/06/29
0
0
SharePoint中CAML使用的一些总结

协作应用程序标记语言 (CAML) 是一种基于 XML 的语言,用于在 Windows SharePoint Services 中定义在网站和列表中使用的字段和视图。CAML 还用于在网站设置过程中定义 Windows SharePoint S...

科技小毛
2017/08/08
0
0
sharepoint 工作流文章

三个工作流配置文章 SharePoint Designer 2010 部署工作流实例 http://wenku.baidu.com/link?url=go4wGc9CFD5mtSmMiGKkmLjk1JOkpZxI2-tt8nWXSknxModuRL-z-ATMOVeOF9swhver05YEJTl8EtnX3tYB8j......

yuxye
2016/02/22
0
0
独立模式安装sharepoint 2013,配置向导报错解决方案

本文转自:http://blog.sina.com.cn/s/blog_6a8dae300101h11f.html 使用独立模式安装Sharepoint Server 2013,允许配置向导到第8步创建示例数据时,出错了! Exception: System.ArgumentExce...

yuxye
2016/02/19
0
0
Onenote Class Notebook Ctreator,协作教学的利器

OneNote Class Notebook Creator是一个帮助您建立班级笔记的SharePoint 在线程序,这个应用程序可以创建一个班级笔记本,其中包括三种类型的子笔记本。 1、 学生笔记本 — — 每个老师和学生...

dhqlx
2018/06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

多表查询

第1章 多表关系实战 1.1 实战1:省和市  方案1:多张表,一对多  方案2:一张表,自关联一对多 1.2 实战2:用户和角色 (比如演员和扮演人物)  多对多关系 1.3 实战3:角色和权限 (比如...

stars永恒
今天
1
0
求推广,德邦快递坑人!!!!

完全没想好怎么来吐槽自己这次苦逼的德邦物流过程了,只好来记一个流水账。 从寄快递开始: 2019年1月15日从 德邦物流 微信小app上下单,截图如下: 可笑的是什么,我预约的是17号上门收件,...

o0无忧亦无怖
昨天
6
0
Mac Vim配置

1.升级 vim   我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim --with-lua --with-override-system-vim 这将下...

Pasenger
昨天
7
0
vmware安装Ubuntu上不了网?上网了安装不了net-tools,无法执行ifconfig?

1.重新设置网络适配器还是不行,如下指定nat 2.还需要指定共享网络,我是在无线环境下 3.无法执行ifconfig https://packages.ubuntu.com/bionic/net-tools到这个网站下载net-tools的deb文件...

noob_chr
昨天
3
0
解决SVN:E210007无法协商认证机制

svn:E210007 svn: Cannot negotiate authentication mechanism 执行下面代码即可 sudo yum install cyrus-sasl cyrus-sasl-plain cyrus-sasl-ldap...

临江仙卜算子
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部