每个SharePoint开发者打交道很多的一个肯定是使用CAML查询。针对一个非服务端开发,为了查询到想要的数据,不得不依赖CAML。

只要使用CAML查询,没有没有用过下面的方法的。从官方文档看,一个典型的查询包含了如下的参数。

public XmlNode GetListItems ( string listName, string viewName, XmlNode query, XmlNode viewFields, string rowLimit, XmlNode queryOptions, string webID
) 

列表名,视图名,CAML查询,ViewFields(汗,不会翻译…), 限制返回记录数,查询选项,对应站点ID。

其中有点意思的是Query Options(查询选项)。官方文档给出了几个常用的用法。问题是,这些就是全部吗?有没有别的有意思的可以挖掘呢?

一起看看吧。

首先建立一个最简单的列表,添加一条数据。

写一个很简单的Console

/// <summary>
/// 查询所有的数据
/// </summary>
static XmlNode QueryAll
{
  get { XmlElement query = _camlDoc.CreateElement("Query"); System.Text.StringBuilder querySB = new System.Text.StringBuilder(); querySB.Append(" <Where>"); querySB.Append(" <Neq>"); querySB.Append(" <FieldRef Name=\"ID\" />"); querySB.Append(" <Value Type=\"Counter\">0</Value>"); querySB.Append(" </Neq>"); querySB.Append(" </Where>"); query.InnerXml = querySB.ToString();
    return query; }
} static void Main(string[] args)
{ Lists client = new Lists(); client.Url = webUrl + "/_vti_bin/lists.asmx"; client.Credentials = System.Net.CredentialCache.DefaultCredentials; XmlNode resultNode = client.GetListItems(listName, String.Empty, QueryAll, null, "0", null, String.Empty); Console.ReadLine();
} 

运行,得到如下结果,包含的列表的一条数据。

<rs:data ItemCount="1" xmlns:rs="urn:schemas-microsoft-com:rowset"> <z:row ows_Title="Test01" ows_MetaInfo="1;#" ows__ModerationStatus="0" ows__Level="1" ows_ID="1" ows_UniqueId="1;#{E1F2046C-16AC-4650-8EE3-73E12ED5E833}" ows_owshiddenversion="1" ows_FSObjType="1;#0" ows_Created="2012-11-30 01:37:17" ows_PermMask="0x7fffffffffffffff" ows_Modified="2012-11-30 01:37:17" ows_FileRef="1;#teams/smetechcom/Lists/QueryOptionsDemo/1_.000" xmlns:z="#RowsetSchema" /> </rs:data>

现在,增加View Fields,引入Author和Editor。这两个是UserField的类型。

static XmlNode ViewFields
{ get { XmlElement viewFields = _camlDoc.CreateElement("ViewFields"); System.Text.StringBuilder viewFieldsSB = new         System.Text.StringBuilder(); #region View Fields viewFieldsSB.Append(" <FieldRef Name=\"Title\" />"); viewFieldsSB.Append(" <FieldRef Name=\"Author\" />"); viewFieldsSB.Append(" <FieldRef Name=\"Editor\" />"); #endregion string sResult = viewFieldsSB.ToString(); viewFields.InnerXml = viewFieldsSB.ToString(); return viewFields; }
}
static void Main(string[] args)
{ Lists client = new Lists(); client.Url = webUrl + "/_vti_bin/lists.asmx"; client.Credentials = System.Net.CredentialCache.DefaultCredentials; XmlNode resultNode = client.GetListItems(listName,         String.Empty, QueryAll, ViewFields, "0", null, String.Empty); Console.ReadLine();
} 

运行,得到下面结果。

<rs:data ItemCount="1" xmlns:rs="urn:schemas-microsoft-com:rowset"> <z:row ows_Title="Test01" ows_Author="1;#Qin, Lei (Lambert, ES-Apps-GD-China-SH)" ows_Editor="1;#Qin, Lei (Lambert, ES-Apps-GD-China-SH)" ows_MetaInfo="1;#" ows__ModerationStatus="0" ows__Level="1" ows_ID="1" ows_UniqueId="1;#{E1F2046C-16AC-4650-8EE3-73E12ED5E833}" ows_owshiddenversion="1" ows_FSObjType="1;#0" ows_Created="2012-11-30 01:37:17" ows_PermMask="0x7fffffffffffffff" ows_Modified="2012-11-30 01:37:17" ows_FileRef="1;#teams/smetechcom/Lists/QueryOptionsDemo/1_.000" xmlns:z="#RowsetSchema" /> </rs:data>

这个时候,这条数据中创建者和修改者得信息就出来了。格式为"User Information List中的Id;#用户的显示名"。

问题来了,如果我们需要知道这个人对应的邮件或者域账号呢?很多时候,我们的方案都是要根据人去查找权限,查找邮箱。显然这么基本的信息是不够的。

一个解决方案是根据这个ID去查询User Information List,来得到用户的其他信息。

另外一个解决方案就是增加一个Query Options。

static XmlNode QueryOptions
{ get { XmlElement queryOptions = _camlDoc.CreateElement("QueryOptions"); queryOptions.InnerXml = "<ExpandUserField>True</ExpandUserField>"; return queryOptions; }
}static void Main(string[] args)
{ Lists client = new Lists(); client.Url = webUrl + "/_vti_bin/lists.asmx"; client.Credentials = System.Net.CredentialCache.DefaultCredentials; XmlNode resultNode = client.GetListItems(listName, String.Empty, QueryAll, ViewFields, "0", QueryOptions, String.Empty); Console.ReadLine();
} 

再次运行看看,你会发现更加详细的信息直接通过web service返回了。返回的格式为:"User Information List中的Id;#用户显示名,#域账号,#邮箱,#leiq@hp.com,#用户显示名(?)"

<rs:data ItemCount="1" xmlns:rs="urn:schemas-microsoft-com:rowset"> <z:row ows_Title="Test01" ows_Author="1;#Qin,, Lei (Lambert,, ES-Apps-GD-China-SH),#ASIAPACIFIC\qinle,#leiq@hp.com,#leiq@hp.com,#Qin,, Lei (Lambert,, ES-Apps-GD-China-SH)" ows_Editor="1;#Qin,, Lei (Lambert,, ES-Apps-GD-China-SH),#ASIAPACIFIC\qinle,#leiq@hp.com,#leiq@hp.com,#Qin,, Lei (Lambert,, ES-Apps-GD-China-SH)" ows_MetaInfo="1;#" ows__ModerationStatus="0" ows__Level="1" ows_ID="1" ows_UniqueId="1;#{E1F2046C-16AC-4650-8EE3-73E12ED5E833}" ows_owshiddenversion="1" ows_FSObjType="1;#0" ows_Created="2012-11-30 01:37:17" ows_PermMask="0x7fffffffffffffff" ows_Modified="2012-11-30 01:37:17" ows_FileRef="1;#teams/smetechcom/Lists/QueryOptionsDemo/1_.000" xmlns:z="#RowsetSchema" /> </rs:data>

转载于:https://www.cnblogs.com/greeny/archive/2013/02/22/2920912.html

SharePoint【Query Options系列】-- Query Options的一些用法 01. 展开用户列信息相关推荐

  1. Android之URL “page={page}category_id={***} string For dynamic query parameters use @Query.

    1.问题 我们用retrofit进行Get网络请求的时候,我代码是这样写的 @GET("/api/get_****/***?page={page}&category_id={cate ...

  2. SharePoint PowerShell命令系列

    (1) Backup-SPSite & Restore-SPSite 这两条命令可能是大家最先接触的PowerShell命令了吧, 一个是备份网站集, 另一个是还原网站集. Backup-SP ...

  3. DL应用:query生成和query推荐

    1 引言 在机器翻译.图片描述.语义蕴涵.语音识别和文本摘要中,序列到序列的问题已经有太多大牛研究了,也取得了很多突破.谷歌的Attention is all you need[1],舍弃并超越了主流 ...

  4. SharePoint Web Service系列: Add或Update其他各种类型的项

    在前面,我们讨论了如何Add或Update类型为User的项.因为User类型多少比较特殊.作为SharePoint Web Service系列讨论的结束,我们将讨论各种其他类型的项如何来写. 在SD ...

  5. Flashback Query, Flashback Version Query

    [Oracle 9i & 10g] Flashback Query, Flashback Version Query, Flashback Table, etc Oracle 9i 引入了fl ...

  6. sharepoint 2016 学习系列篇(4)-如何部署sharepoint server 2016(3)-Sharepoint服务器安装和部署

    在前面,我们部署了数据库服务器,sharepoint 2016 学习系列篇(3)-如何部署sharepoint server 2016(2)-数据库服务器安装和部署 接下来是部署sharepoint服 ...

  7. Elasticsearch学习---Term query和Match query

    前言 在Elasticsearch中Term query和Match query都可以用来对文档中的数据进行检索,但是在检索结果上会稍有不同,本文通过案例对两者的差异进行说明. 数据准备 建立一个索引 ...

  8. sharepoint 2016 学习系列篇(23)-文档库应用篇-(5)文档权限配置

    学习了关于文档的上传,下载,以及属性标签的应用,朋友们估计也会想到,前面学习到了关于列表的数据权限配置, sharepoint 2016 学习系列篇(15)-自定义列表应用篇-(4)数据权限配置 那么 ...

  9. sharepoint 2016 学习系列篇(24)-文档库应用篇-(6)文档版本控制

    学习到这里,相信朋友们,应该是对文档库有了大概的认识.回顾一下,前面学习了一个 sharepoint 2016 学习系列篇(17)-自定义列表应用篇-(6)开启列表数据版本控制 那么对于文档来说,文档 ...

最新文章

  1. 20172310 2017-2018-2 《程序设计与数据结构》第八周学习总结
  2. MyBatis下MySqL用户口令不能为空
  3. 【数据结构与算法】之深入解析“合并区间”的求解思路与算法示例
  4. 四、极大似然参数估计
  5. 魅族MX4的线控电路图
  6. Git 常用命令(二)
  7. Git删除不存在对应远程分支的本地分支
  8. #让人物运动_篮球人物之黄云龙,淡泊名利的他是篮球运动员中的楷模,你可记得...
  9. 北大计算机类学什么,状元们去清华北大选了什么专业?计算机可不是首选,首选你想不到...
  10. Java 学习之反射机制“解刨”分解类,并获取内容!
  11. MAC 电脑里面的“其他”文件是什么占用了
  12. OpenPose学习笔记
  13. SketchUp2019下载SU2019下载安装教程SketchUp草图大师2019下载安装详细教程
  14. 【观察】西部数据:再定义分层存储架构,赋能数据中心新基建
  15. Django + mysql + 微信 抢票之本地环境搭建
  16. python每日一小记(2)--字符串和编码
  17. QuTrunk与Paddle结合实践--VQA算法示例
  18. 【图像增强】Learning Enriched Features for Real Image Restoration and Enhancement 阅读笔记
  19. 【正点原子FPGA连载】 第二十章 LCD触摸屏实验摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0
  20. python妹子图软件下载_python3下载妹子图,你懂的。

热门文章

  1. ajax bootstrap 进度条,Bootstrap进度条与AJAX后端数据传递结合使用实例详解
  2. 任意的android程序,Android任意位置获取应用Context
  3. freebasic 编译linux,免费BASIC编译器下载
  4. annie安装教程与Access is denied解决方法
  5. ANACONDA安装pytorch后Pycharm无法识别到解释器
  6. spring mvc mysql配置_spring mvc配置数据库连接
  7. 链表list(链式存储结构实现)_VOL.2 如何在python中实现链式存储结构
  8. visual assist x太卡了_LeetCode69. x 的平方根
  9. [Dynamic Language] Python3.7 源码安装 ModuleNotFoundError: No module named '_ctypes' 解决记录...
  10. zookeeper - watcher(9)