使用 CSOM for Sharepoint Online 筛选 TaxonomyFieldType 字段
Filter on TaxonomyFieldType fields using CSOM for Sharepoint Online
对于客户,我必须通过过滤元数据从他们的共享点检索文件。我必须过滤的两个字段是 TaxonomyFieldType 字段。我一直在寻找解决方案,并找到了一些示例,这些示例向我展示了如何使用 CAML 查询进行过滤,但它对我不起作用。该列表没有被过滤,而是显示了所有文件。
ClientContext clientContext = SP.Helpers.ConnectionHelpers.Auth(username, password, siteurl);
if (clientContext == null) return;
List oList = clientContext.Web.Lists.GetByTitle("list");
clientContext.Load(oList);
clientContext.ExecuteQuery();
View view = oList.Views.GetByTitle("view");
clientContext.Load(view);
clientContext.ExecuteQuery();
CamlQuery camlQuery = new CamlQuery();
string query = @"<Where><Contains><FieldRef Name='field' /><Value Type='Text'>filtertext</Value></Contains></Where>";
camlQuery.ViewXml = query;
ListItemCollection collListItem = oList.GetItems(camlQuery);
clientContext.Load(collListItem, items => items.Include(
item => item.Id,
item => item.DisplayName, item => item.Properties));
clientContext.ExecuteQuery();
以上代码是我到现在才想到的。有谁知道如何可靠地过滤 TaxonomyFieldTypes?
CamlQuery.ViewXml
Property 需要以下格式的值:
<View>
<Query>
...
</Query>
</View>
但在您的示例中,它没有包含在 View
和 Query
标记中,这很可能是您的查询被忽略并返回所有项目的原因。
示例
var list = ctx.Web.Lists.GetByTitle(listName);
var camlQuery = new CamlQuery();
var query = String.Format(@"<Where><Contains><FieldRef Name='{0}' /><Value Type='Text'>{1}</Value></Contains></Where>",fieldName,fieldValue);
camlQuery.ViewXml = String.Format("<View><Query>{0}</Query></View>", query);
var items = list.GetItems(camlQuery);
ctx.Load(items, icol => icol.Include(
item => item.Id,
item => item.DisplayName, item => item.Properties));
ctx.ExecuteQuery();
我认为您可以尝试使用以下代码进行查询:
<View>
<Query>
<Where>
<Contains>
<FieldRef Name='field' />
<Value Type='Text'>filtertext</Value>
</Contains>
</Where>
</Query>
</View>
并将 'field' 替换为 'The Name of your query Field Name',以及 'filtertext'。
对于客户,我必须通过过滤元数据从他们的共享点检索文件。我必须过滤的两个字段是 TaxonomyFieldType 字段。我一直在寻找解决方案,并找到了一些示例,这些示例向我展示了如何使用 CAML 查询进行过滤,但它对我不起作用。该列表没有被过滤,而是显示了所有文件。
ClientContext clientContext = SP.Helpers.ConnectionHelpers.Auth(username, password, siteurl);
if (clientContext == null) return;
List oList = clientContext.Web.Lists.GetByTitle("list");
clientContext.Load(oList);
clientContext.ExecuteQuery();
View view = oList.Views.GetByTitle("view");
clientContext.Load(view);
clientContext.ExecuteQuery();
CamlQuery camlQuery = new CamlQuery();
string query = @"<Where><Contains><FieldRef Name='field' /><Value Type='Text'>filtertext</Value></Contains></Where>";
camlQuery.ViewXml = query;
ListItemCollection collListItem = oList.GetItems(camlQuery);
clientContext.Load(collListItem, items => items.Include(
item => item.Id,
item => item.DisplayName, item => item.Properties));
clientContext.ExecuteQuery();
以上代码是我到现在才想到的。有谁知道如何可靠地过滤 TaxonomyFieldTypes?
CamlQuery.ViewXml
Property 需要以下格式的值:
<View>
<Query>
...
</Query>
</View>
但在您的示例中,它没有包含在 View
和 Query
标记中,这很可能是您的查询被忽略并返回所有项目的原因。
示例
var list = ctx.Web.Lists.GetByTitle(listName);
var camlQuery = new CamlQuery();
var query = String.Format(@"<Where><Contains><FieldRef Name='{0}' /><Value Type='Text'>{1}</Value></Contains></Where>",fieldName,fieldValue);
camlQuery.ViewXml = String.Format("<View><Query>{0}</Query></View>", query);
var items = list.GetItems(camlQuery);
ctx.Load(items, icol => icol.Include(
item => item.Id,
item => item.DisplayName, item => item.Properties));
ctx.ExecuteQuery();
我认为您可以尝试使用以下代码进行查询:
<View>
<Query>
<Where>
<Contains>
<FieldRef Name='field' />
<Value Type='Text'>filtertext</Value>
</Contains>
</Where>
</Query>
</View>
并将 'field' 替换为 'The Name of your query Field Name',以及 'filtertext'。