• SharePoint CAML In Action——Part II


     在SharePoint中,相对于Linq to SharePoint而言,CAML是轻量化的。当然缺点也是显而易见的,"Hard Code"有时会让你抓狂。在实际场景中,经常会根据某些并不复杂的要求从List中取出相关的ListItemCollection,所以用Linq to SharePoint这把牛刀就显得笨拙了,往往用CAML会显得便捷多了。所以本篇博客将对CAML查询进行快速指导。

      对于List而言,我们对常见的Column进行讲解,常见的Column Type有Single Line Of Text、Multiple Lines of Text、Number、Boolean、Date and Time、Lookup、Person of Group,所以接下来将用CAML语言对这些常见的Column Type在查询时进行描述。

    Single Line Of Text

    Value Type

    Text

    Example

    <Where><Eq><FieldRef Name="FirstName"/><Value Type="Text">Eyes</Value></Eq></Where>

    Notes

    这是一个最简单查询,查询将会返回当FirstName等于Eyes时所匹配的所有的ListItems

     

    Multiple Lines of Text

    Value Type

    Text

    Example

    <Where><Contains><FieldRef Name="Description"/><Value Type="Text">Scrum</Value></Contains></Where>

    Notes

    这是一个最简单查询,查询将会返回当Description包含Scrum时所匹配的所有的ListItems

    Person or Group(By Name)

    Value Type Text
    Example <Where><Eq><FieldRef Name="Editor"/><Value Type="Text">Tom</Value></Eq></Where>
    Notes

    这个CAML查询Modified By为 Eyes的所有ListItems,如果AD中所有的Employees的DisplayName=Tom的人员有多个,

    那么则将返回多个符合条件的结果。

    Person or Group(By ID)

    Value Type       Integer
    Example

    <Where><Eq><FieldRef Name="Editor" LookupId="TRUE"/><Value Type="Integer"><UserID/></Value></Eq></Where>

    Or

    <Where><Eq><FieldRef Name="Editor" LookupId="TRUE"/><Value Type="Integer">5</Value></Eq></Where>

    Notes

    当添加了LookupId="TRUE"到<FieldRef/>并且将<UserID/>作为Value,这个查询将基于当前用户ID进行查询过滤,

    当然也可以手动指定ID来替换<UserID/>(e.g.<Value Type="Interge">5</Value>,即指定了一个ID为5的Person)。

    因为ID是唯一的,所以这个查询确保了条件的唯一(只有一个User是Valid Value)

    Lookup(By Text)

    Value Type Lookup
    Example <Where><Contains><FieldRef Name="Specialization" /><Value Type="Lookup">SharePoint</Value></Contains></Where>
    Notes 通过Text的值去过滤,有可能DisplayName相同,所以以Text值当条件可能或造成查询条件不唯一.

    Lookup(By ID)

    Value Type Lookup
    Example <Where><Eq><FieldRef Name="Specialization" LookupId="TRUE"/><Value Type="Lookup">5</Value></Eq></Where>
    Notes

    当添加了LookupId="TRUE"到<FieldRef/>,这个查询将基于Lookup的ID而不是Text值去过滤筛选,

    ID是唯一的,所以这个查询将确保了查询条件的唯一性。

    Date(Day only)

    Value Type       Date Or DateTime
    Example

    <Where><Gt><FieldRef Name="EntryTime" /><Value Type="DateTime">2008-01-01</Value></Gt></Where>

    Or

    <Where><Gt><FieldRef Name="EntryTime" /><Value Type="DateTime"><Today/></Value></Gt></Where>

    Notes


    这个类型的查询Value Type设置了DateTime或者Date即可,但需要注意的是Value格式为(yyyy-mm-dd)。

    当然Value也可以是<Today/>即代表当天(你也可以offset 当前天,比如:<Today OffsetDays="-7"/>)



    Boolean

    Value Type         Interge Or Boolean Or Bool
    Example

    <Where><Eq><FieldRef Name="IsMale"/><Value Type="Interge">1</Value></Eq></Where>

    Or

    <Where><Eq><FieldRef Name="IsMale"/><Value Type="Boolean">1</Value></Eq></Where>

    Or

    <Where><Eq><FieldRef Name="IsMale"/><Value Type="Bool">TRUE</Value></Eq></Where>

    Notes

    这儿列举了当Field类型为Boolean时的Value Type的多种可能性。值得注意的是 :

    <Where><Eq><FieldRef Name="IsMale"/><Value Type="Boolean">TRUE</Value></Eq></Where>",

    这种写法是不妥的,即使Boolean=True,但返回的结果还是Boolean=False时的结果。

    总结

    这篇相对于上一篇而言,没有具体的分析怎样结合CAML进行查询,而是一篇对CAML语法的一个快速导读。意在帮助Developer快速查询Field对应的Value Type。

    参考文章:http://joshmccarty.com/2012/06/a-caml-query-quick-reference/

  • 相关阅读:
    .net core web api swagger 配置笔记
    mvc下ajax请求遇到session超时简单处理方式
    sql ltrim/rtrim 字段中为中文时出现?的问题
    SQL 将一个字段内用逗号分隔的内容分成多条记录
    bootstrap下modal模态框中webuploader控件按钮异常(无法点击)问题解决办法【转】
    mvc 封装控件使用mvcpager
    uploadify在chrome下初始化失败,在Firefox下却可以原因探析
    MVC FormCollection 无法获取值的问题
    linq to sql之like
    mvcpager 表单提交时无法获取pageindex的值
  • 原文地址:https://www.cnblogs.com/OceanEyes/p/sharepoint-caml-in-action-2.html
Copyright © 2020-2023  润新知