• Query Options的一些用法(1): 展开用户列信息


       

    每个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>

      

  • 相关阅读:
    ubuntu:activate root
    C/C++ char* arr与char arr[]的区别(反汇编解析)
    [转]关于编写Nios II的延时函数的一点心得
    [转]Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真、Testbench
    [转]Vivado中IP的使用方法
    [转]Vivado IP核生成设置
    [转]VHDL中数据类型转换与移位(STD_LOGIC_ARITH与NUMERIC_STD)
    [转]Vivado与SDK的联合调试方法-使用ILA
    [转]Vivado中ILA的使用
    [转]vivado硬件调试——mark_debug
  • 原文地址:https://www.cnblogs.com/lambertqin/p/2796470.html
Copyright © 2020-2023  润新知