【发布时间】:2015-04-30 19:20:07
【问题描述】:
我想使用 CSOM 检索 1 个特定文件的 1 列,这些可以位于任何位置,因此可以位于任何文件夹类型的内容类型中,包括文档集。
所以...我可以先检查,然后...如果结果 = 0,然后遍历文件夹并查看其中一个父级是否是文档集...然后进行进一步检查,但我想知道是否没有更方便的方法来查询“在 lib 和内部内容类型(如文档集,只要它是一个文件)中”
以下代码有效,但.... 如果文件位于文档集中,则无法正常工作。
var baseUrl = uri.GetLeftPart(UriPartial.Authority);
var fileServerRelativeUrl = uri.ToString().Replace(baseUrl, string.Empty);
logger.Log(LogLevel.Debug, " fileserverrelativeurl is " + fileServerRelativeUrl.ToString());
var file = context.Web.GetFileByServerRelativeUrl(fileServerRelativeUrl);
List list = file.ListItemAllFields.ParentList;
context.Load(list);
context.ExecuteQuery();
logger.Log(LogLevel.Debug, " list is loaded: " + list.Title.ToString());
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml =
"<View><Query><Where><Eq><FieldRef Name='" + fieldRefName + "'/>" +
"<Value Type='Text'>" + fieldRefValue + "</Value></Eq></Where>" +
"<RowLimit>1</RowLimit></Query></View>";
logger.Log(LogLevel.Debug, " caml is " + camlQuery.ViewXml.ToString());
ListItemCollection listItems = list.GetItems(camlQuery);
context.Load(listItems);
try
{
context.ExecuteQuery();
}
catch
{
logger.Log(LogLevel.Debug, " caml exec FAILED !! ");
// e.g. : no access or the listname as incorrectly deduced
throw;
}
logger.Log(LogLevel.Debug, " items found: " + listItems.Count.ToString());
// and now retrieve the items needed
if (listItems.Count == 1)
{
logger.Log(LogLevel.Debug, " listitem found ");
ListItem item = listItems[0];
foreach (string column in columns)
{
if (item.FieldValues.ContainsKey(column))
{
logger.Log(LogLevel.Debug, " column found: " + column);
if (item[column] is Dictionary<string, object>)
{
Dictionary<string, object> clientTaxonomyObject = item[column] as
Dictionary<string, object>;
if (clientTaxonomyObject.ContainsKey("_ObjectType_") &&
clientTaxonomyObject.ContainsKey("TermGuid") &&
clientTaxonomyObject.ContainsKey("Label") &&
clientTaxonomyObject["_ObjectType_"].Equals("SP.Taxonomy.TaxonomyFieldValue"))
{
values.Add(column, clientTaxonomyObject["Label"].ToString());
}
else
{
values.Add(column, item[column].ToString());
}
}
else
{
values.Add(column, "");
}
}
}
}
}
参考
- https://social.technet.microsoft.com/Forums/sharepoint/en-US/a83259c6-3667-47f8-83c9-da37aa1b6ead/caml-query-and-document-set
- Programmatically access files in Document set in sharepoint using Javascript
更新
啊!根本不需要 caml 查询就容易多了,只需 file.listitemallfields 然后转储该字段的分类标签。解决了:)
【问题讨论】:
标签: c# sharepoint sharepoint-2013 csom