我想使用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, "");
}
}
}
}
}
REF
更新
啊!更简单的是,根本不需要caml查询file.listitemallfields然后只是转储该字段的分类标签。解决了:))
答案 0 :(得分:0)
使用
代替使用CAML查询,可以更轻松地完成 listitem li = file.listitemallfields;
context.load(li)
context.ExecuteQuery();
直接例如的Li [&#34;无论&#34;]