我正在研究概念验证代码,以根据提供给我正在编写的高度特定的搜索Web服务的关键字动态生成CAML.我没有使用SharePoint提供的搜索Web服务来进行此证明.我已经为我想要实现的目标做了这样的事情.从我的所有研究中,我找不到我想要实现的一个接近的例子,即检查多个值的多个字段.是的,我已经看过SO了我的答案,包括这个:需要帮助建立CAML查询.
话虽如此,如果有可能,如何在CAML中编写以下类似SQL的查询?
SELECT FirstName, LastName, Description, Profile
FROM SomeFakeTable
WHERE (FirstName = 'John' OR LastName = 'John' OR Description = 'John' OR Profile='John')
AND (FirstName = 'Doe' OR LastName = 'Doe' OR Description = 'Doe' OR Profile='Doe')
AND (FirstName = '123' OR LastName = '123' OR Description = '123' OR Profile='123')
Run Code Online (Sandbox Code Playgroud) 我正在使用caml查询来选择用户修改或添加的所有文档.查询以递归方式在指定网站集的所有子网站上运行.
现在问题是我无法摆脱也是结果集的一部分的文件夹.现在我正在从结果数据表中过滤它们.但我想知道:是否可以通过使用caml过滤掉结果集中的文件夹?
我已经创建了一个webpart来显示列表中的数据,但我真的希望只显示该列表中的前5个记录(通过使用CAML查询).
有谁知道如何做到这一点?非常感谢.
<Query>
<OrderBy>
<FieldRef Name='ID' Ascending='False' />
</OrderBy>
</Query>
Run Code Online (Sandbox Code Playgroud) 嗨我有一个要查询我的桌面应用程序的SharePoint列表,我想只检索活动成员,但是当我查询时,我只获得了不活动的用户.我的CAML查询有什么问题?
camlQuery.ViewXml = "<<"View">><Query><Where><Eq><FieldRef Name='Active'/><Value Type='Boolean'> " + true + "</Value></Eq></Where></Query></View>"";
Run Code Online (Sandbox Code Playgroud)
我也尝试了以下内容
camlQuery.ViewXml = "<View><Query><Where><Eq><FieldRef Name='Active'/><Value Type='Boolean'> true</Value></Eq></Where></Query></View>";
Run Code Online (Sandbox Code Playgroud)
和
camlQuery.ViewXml = "<Query><Where><Eq><FieldRef Name='Active'/><Value Type='Boolean'> true</Value></Eq></Where></Query>";
Run Code Online (Sandbox Code Playgroud)
请帮忙,因为我是CAML的新手.
我有一个看起来像这样的列表:
Movie Year
----- ----
Fight Club 1999
The Matrix 1999
Pulp Fiction 1994
Run Code Online (Sandbox Code Playgroud)
使用CAML和SPQuery对象,我需要从Year列中获取一个不同的项目列表,它将填充下拉控件.
在CAML查询中搜索周围似乎没有这样做的方法.我想知道人们是如何实现这一目标的?
我正在尝试使用webpart中的以下CAML查询来查询SharePoint列表.我已经在U2U CAML查询生成器和Stramit CAML Viewer中测试了查询,它工作正常,只返回匹配的记录,但是当我在我的webpart中使用它时,它返回所有列表项.它让我变得疯狂.这是代码:
string camlQuery = string.Format(@"<Query><Where><Contains><FieldRef Name='Title' /><Value Type='Text'>2</Value></Contains></Where></Query>");
SPQuery query = new SPQuery();
query.Query = camlQuery;
SPListItemCollection items = Articles.GetItems(query);
grid.DataSource = items.GetDataTable();
grid.DataBind();
Run Code Online (Sandbox Code Playgroud) 众所周知,OCaml具有参数多态性,这导致一些限制.Haskell通过其类型类提供了一种特殊的多态性,在很多情况下显然非常方便.众所周知,OCaml的模块和仿函数系统允许创建一种特殊的多态性.看人妖的伟大最近的答案闪耀这里的实例.
我的观点是,在Haskell中可以创建派生多个类型类的类型.例如 :
data Person = Person { firstName :: String
, lastName :: String
, age :: Int
} deriving (Eq, Show, Read)
Run Code Online (Sandbox Code Playgroud)
定义具有多个功能的类型非常方便(允许类型的值Person支持相等性测试,可打印,并且在给定示例中可读).
我的问题如下:我们可以在OCaml中做同样的事吗?通过简单的我的意思是与语言的地面语法和没有太多的计谋.
举一个具体的例子,假设我们有两个OCaml签名
module type Showable = sig
type t
val to_string : t -> string
end
module type Readable = sig
type t
val from_string : string -> t
end
Run Code Online (Sandbox Code Playgroud)
的目的是写入一个算符F由它实现两者模块参数化Showable和Readable.
是否有一种"好的"方法来为SharePoint创建这样的类似的CAML查询?
SELECT *
FROM table
WHERE Id IN (3, 12, ...)
Run Code Online (Sandbox Code Playgroud)
还是我陷入了嵌套<Or>节点的噩梦?
编辑:这是我生成<Or>节点的解决方案.
/// Simulates a SQL 'Where In' clause in CAML
/// </summary>
/// <param name="columnType">Specifies the data type for the value contained by the field.</param>
/// <returns>Nested 'Or' elements portion of CAML query</returns>
public static string CamlIn<T>(string internalFieldName, string columnType, T[] values)
{
XDocument doc = new XDocument();
XElement prev = null;
int index = 0;
while (index < values.Length)
{
XElement element = …Run Code Online (Sandbox Code Playgroud) 我正在尝试从sharepoint列表中获取某些项目,具体取决于自定义列中的日期.
我已经建立了我与U2U CAML查询生成器,而这工作,但是当我把它放在我自己的代码在我的WebPart,它总是返回我的所有项目OD列表.
这是我的代码:
DateTime startDate = new DateTime(Int32.Parse(year), 1, 1);
DateTime endDate = new DateTime(Int32.Parse(year), 12, 31);
SPQuery q = new SPQuery();
q.Query = "<Query><Where><And><Geq><FieldRef Name='Publicate Date' /><Value IncludeTimeValue='FALSE' Type='DateTime'>" + SPUtility.CreateISO8601DateTimeFromSystemDateTime(startDate) + "</Value></Geq><Leq><FieldRef Name='Publicate_x0020_Date' /><Value IncludeTimeValue='FALSE' Type='DateTime'>" + SPUtility.CreateISO8601DateTimeFromSystemDateTime(endDate) + "</Value></Leq></And></Where></Query>";
SPListItemCollection allItem = library.GetItems(q);
Run Code Online (Sandbox Code Playgroud) 我试图写一个CAML查询执行针对特定SPList,范围限定于特定的文件夹,从该点递归,并返回所有listItems中(其中符合标准)和文件夹.
这是查询的代码,它似乎应该工作(格式化为可读性):
SPQuery query = new SPQuery();
query.Query = "
<Where>
<Or>
<Contains>
<FieldRef Name=\"FileRef\" />
<Value Type=\"Text\">foo</Value>
</Contains>
<Eq>
<FieldRef Name=\"FSObjType\" />
<Value Type=\"Lookup\">1</Value>
</Eq>
</Or>
</Where>";
query.ViewFields = "
<FieldRef Name=\"CustomField1\" Nullable=\"TRUE\" />
<FieldRef Name=\"CustomField2\" Nullable=\"TRUE\" />
<FieldRef Name=\"CustomField3\" Nullable=\"TRUE\" />
";
query.RowLimit = 500;
query.ViewAttributes = "Scope=\"RecursiveAll\"";
query.Folder = startingFolder;
DataTable dt = myList.GetItems(query).GetDataTable();
Run Code Online (Sandbox Code Playgroud)
所以 - 这只返回ListItems - 没有文件夹.
如果我从查询中删除其他条件,只留下FSObjType=1,我得到一个COM异常"无法完成此操作.请再试一次."
如果我然后删除ViewFields,只留下Scope=RecursiveAll和FSObjType=1,我得到一个空的结果集.