惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Webroot Blog
Webroot Blog
U
Unit 42
A
About on SuperTechFans
宝玉的分享
宝玉的分享
月光博客
月光博客
C
CERT Recently Published Vulnerability Notes
P
Privacy International News Feed
Microsoft Security Blog
Microsoft Security Blog
G
Google Developers Blog
P
Privacy & Cybersecurity Law Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
Securelist
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Spread Privacy
Spread Privacy
L
Lohrmann on Cybersecurity
Apple Machine Learning Research
Apple Machine Learning Research
K
Kaspersky official blog
Hugging Face - Blog
Hugging Face - Blog
B
Blog
I
Intezer
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
V
V2EX
L
LangChain Blog
AI
AI
G
GRAHAM CLULEY
T
Tor Project blog
人人都是产品经理
人人都是产品经理
D
Docker
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
I
InfoQ
Y
Y Combinator Blog
C
Comments on: Blog
GbyAI
GbyAI
www.infosecurity-magazine.com
www.infosecurity-magazine.com
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
aimingoo的专栏
aimingoo的专栏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
腾讯CDC
N
News and Events Feed by Topic
MyScale Blog
MyScale Blog
H
Help Net Security
Vercel News
Vercel News
T
Tenable Blog
博客园 - 三生石上(FineUI控件)
爱范儿
爱范儿

博客园 - Jason Li 2011

Maven - import a web project into eclipse [分享] 兰迪·波许教授的最后一课[PDF/PPT/AVI] 转:Controlling Access to Members of a Class 转:退火算法 Simulate Anneal Arithmetic (SAA,模拟退火算法) Scrum in practise 转:MOSS 2007 and Code Access Security 转:MOSS站点的迁移(备份还原) 转:MOSS漫游(3):说说MOSS中的母版页 转:关于MOSS 2007的Content Types 转:Best Practices: Common Coding Issues When Using the SharePoint Object Model 转:Best Practices: Using Disposable Windows SharePoint Services Objects 转:Free the SPWeb 转:将你的Asp.NET应用程序嵌入到SharePoint Duff International Sites 项目总结 转:Code-blocks are not allowed in this file: Using Server-Side Code with SharePoint 转:ASP.NET Web Services or .NET Remoting: How to Choose 转:类与结构的差别 转:SharePoint Server 2007 页面模型 转:MOSS 2007基础:WSS 3.0 中的母版页(Master Pages)和内容页(Content Pages) 转:How to: Create a Minimal Master Page
转:CollaDec FriendlyQuery类库(beta)说明
Jason Li 2011 · 2010-12-29 · via 博客园 - Jason Li 2011

CollaDec FriendlyQuery类库(beta)说明


系统需求

Windows Server 2003

.Net Framework 2.0

Windows SharePoint Services 3.0 Microsoft Office SharePoint Server 2007


使用说明

解压文件FriendlyQuery.zip得到CollaDec.FQuery.dll。在Visual Studio 2005中添加引用项引用此dll即可。在使用此类库的同时,请添加对Microsoft.SharePoint.dll的引用。该类库的命名空间为CollaDec.Tools

该类库使用类似T-SQL语句的方式进行列表项/文档库的查询。


类的属性和方法

FriendlyQuery类

1.构造函数:

public FriendlyQuery(SPWeb queryWeb, string queryString)

参数:

       queryWeb: 查询列表所在的网站

       queryString:查询字符串。具体格式说明请见后文。

2.属性:

(1)public SPFolder QueryFolder { get; set;}

    在指定目录中进行查询,相当于SPQuery.Folder

(2)public int RowLimit { get; set;}

    指定查询返回的结果数,相当于SPQuery.Limit

(3)public QueryScope Scope { get; set;}

    指定查询范围,QueryScope枚举分为以下四种:

        Default             查询指定文件夹下的条目和子文件夹

        ItemsInFolder       查询指定文件夹下的条目

        AllItems            查询所有文件夹下的所有条目

        AllItemsAndFolders  查询所有文件夹下的所有条目和所有子文件夹

(4)public SPList QueryList { get;}

    得到查询所对应的列表对象

(5)public string QueryXml { get;}

    得到CAML形式的查询字符串,包含Where、OrderBy和GroupBy

    相当于SPQuery.Query

(6)public string ViewFields { get;}

    得到CAML形式的返回字段信息,相当于SPQuery.ViewFields

3.方法:

(1)public SPQuery GetQuery()

    返回查询所对应的SPQuery对象。类库内部即是使用该对象进行的查询操作。

(2)public SPListItemCollection GetItems()

    返回查询结果,以SPListItemCollection的形式表示。


查询字符串说明

在FriendlyQuery的构造函数中所使用的查询字符串,类似于T-SQL语法的查询字符串,形式为:

SELECT [fields] FROM [list]

WHERE [conditions]

ORDER BY [fields]

GROUP BY [fields]

查询字符串中的关键词如下(关键词不区分大小写):

       SELECT      所有查询需由此开始

    FROM        指定查询所在的列表

    WHERE       指定查询条件

    ORDER       指定排序条件

    GROUP       指定分组条件

    BY          接在ORDER或GROUP之后

    ASC         正向排序

    DESC        逆向排序

    IS          判断(仅用于判断是否为空)

    NULL        表示字段为空

    NOT         否定(仅用于判断是否为空)

    AND         在查询条件中表示逻辑和

    OR          在查询条件中表示逻辑或

    CONTAINS    表示字段内容包含某字符串

    BEGINSWITH  表示字段内容由某字符串开始

    ME          表示[本人](用于用户类字段的查询条件)

    NOW         表示[现在时间](由于时间类字段的查询条件)

    TODAY       表示[今天](由于时间类字段的查询条件)

查询条件中支持的运算符:

    <           小于

    >           大于

    <=          小于等于(不大于)

    >=          大于等于(不小于)

    =           等于

    <>或!=      不等于

    CONTAINS    包含字符串

    BEGINSWITH  以字符串开头

    IS NULL     字段为空(单目运算符)

    IS NOT NULL 字段不为空(单目运算符)

在查询返回字段及查询条件涉及的字段、排序分组涉及的字段中,一律使用字段的显示名称,且大小写敏感(与T-SQL不同)。如果字段名称或列表名称中包含空格、或者字段名称为关键字,请用[]将字段名称包围,例如“[Today]”、“[My Custom Title]”等。

本类库支持的数字为十进制数字,支持负数和小数,不支持科学计数法

当查询条件中出现字符串时,可使用双引号或单引号表示字符串。

目前查询条件中的每一个条件只能够支持运算符左边为字段名称,右边为常量(包括数字、字符串、关键字ME、NOW、TODAY),这一点也与T-SQL不同,请注意。

当有多个查询条件时,可使用AND、OR和小括号进行组合,优先级顺序为:括号>AND>OR。不支持NOT进行否定查询,与T-SQL不同


查询字符串实例

1.  SELECT * FROM 通知 WHERE 标题 Contains 'CollaDec' ORDER BY ID DESC

含义:在“通知”列表中,查找“标题”字段包含“CollaDec”(大小写不敏感)的列表条目,结果按照ID由大到小排序。

对应的CAML:

<Where>

     <Contains>

         <FieldRef Name='Title' />

         <Value Type='Text'>CollaDec</Value>

     </Contains>

</Where>

<OrderBy>

     <FieldRef Name='ID' Ascending='FALSE' />

</OrderBy>

2.  SELECT 标题, num1, [now] FROM 列表A

WHERE

(num1 >= 15  OR num1 IS NULL) AND 创建者 = ME AND 过期时间 > TODAY

对应的CAML:(假设num1的内部名称为_0x006e_um1,过期时间内部名称为ExpTime)

<Where>

     <And>

         <And>

             <Or>

                 <Geq>

                     <FieldRef Name='_0x006e_um1' />

                     <Value Type='Number'>15</Value>

                 </Geq>

                 <IsNull>

                     <FieldRef Name='_0x006e_um1' />

                 </IsNull>

             </Or>

             <Eq>

                 <FieldRef Name='CreatedBy'/>

                 <Value Type='Integer'>

                     <UserID Type='Integer' />

                 </Value>

             </Eq>

         </And>

         <Gt>

             <FieldRef Name='ExpTime' />

             <Value Type='DateTime'>

                 <Today />

             </Value>

         </Gt>

     </And>

</Where>


程序实例

SPWeb web = SPContext.Current.Web;

string queryStr = "SELECT * FROM 通知 WHERE ID>10";

FriendlyQuery query = new FriendlyQuery(web, queryStr);

query.RowLimit = 100;

query.Scope = FriendlyQuery.QueryScope. AllItemsAndFolders;

SPListItemCollection items = query.GetItems();

foreach(SPListItem i in items)

    Response.Write(i.Title + "<br/>");

posted on 2010-12-29 22:49  Jason Li 2011  阅读(582)  评论()    收藏  举报