首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SharePoint获取ContentType名称

SharePoint获取ContentType名称
EN

Stack Overflow用户
提问于 2015-02-13 16:21:08
回答 2查看 7K关注 0票数 5

我正在尝试从SharePoint库获取所有文件夹和文件,执行一个请求。

代码语言:javascript
复制
CamlQuery query = new CamlQuery();
query.ViewXml = "<View Scope='RecursiveAll' />";
var libraryName = "Specific Documents";

ListItemCollection itemsRaw = clientContext.Web.Lists.GetByTitle(libraryName).GetItems(query);
clientContext.Load(itemsRaw);
clientContext.ExecuteQuery();

此代码运行良好,因此,我在指定的库中有一个所有文件夹和文件的列表。

文件细节似乎是以一种懒散的方式加载的。只有细节层次结构的第一个级别。但我不知道FieldValues集合是如何填充数据的。

我看到ListItem ContentType.Name没有初始化。

是否有可能以某种方式更新查询,以便在此单个调用中加载ContentType的数据。

或者唯一的可能性是遍历所有文件并为特定的文件执行ContentType负载?

我这样做的方式如下:

代码语言:javascript
复制
foreach(var listItem in listItemCollection)
{
    context.Load(listItem, k => k.ContentType);
    context.ExecuteQuery();
    var contentTypeName = listItem.ContentType.Name;
}

但是,如果可能的话,我将在单个调用中获取这些信息,而不必迭代集合并启动对ClientContext.的多次调用。

P.S.:我是SharePoint编程的新手。我只想修复一个窃听器。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-13 20:11:29

正如您在SharePoint中正确注意到的,客户端对象模型(CSOM)中的ClientRuntimeContext.Load法没有检索客户端对象的所有属性。

ClientRuntimeContext.Load法有以下语法:

代码语言:javascript
复制
public void Load<T>(
    T clientObject,
    params Expression<Func<T, Object>>[] retrievals
)
where T : ClientObject        

其中retrievals参数用于指定必须检索的属性。

其次,由于SharePoint CSOM支持请求分批,因此可以将您的示例修改为以下示例:

代码语言:javascript
复制
foreach (var item in items)
{
    ctx.Load(item, i => i.ContentType);
}
ctx.ExecuteQuery();

注意:在本例中,只向服务器提交一次请求。

但是,所提供的示例仍然需要对服务器的两个请求:

  • 检索列表项
  • 检索列表项的内容类型

从性能的角度来看,它可以通过将对服务器的请求减少到1来改进。

最后一个示例

该示例演示如何检索列表项并显式指定要检索的属性:

代码语言:javascript
复制
 var listTitle = "Documents";
 var query = new CamlQuery();
 query.ViewXml = "<View Scope='RecursiveAll' />";

 var items = ctx.Web.Lists.GetByTitle(listTitle).GetItems(query);
 ctx.Load(items,icol => icol.Include(
                i => i.ContentType,
                i => i.FieldValues));
 ctx.ExecuteQuery();
票数 5
EN

Stack Overflow用户

发布于 2016-05-03 07:49:43

最后一个示例不起作用(在SP2010中)。

有一个异常“查询表达式不受支持”,如果您显式地声明了所有必需的字段,那么下面的解决方案是有效的。

代码语言:javascript
复制
var listTitle = "Documents";
var query = new CamlQuery();
query.ViewXml = "<View Scope='RecursiveAll' />";

var items = ctx.Web.Lists.GetByTitle(listTitle).GetItems(query);

string[] fieldsToMigrate = new string[] { "Title", "FieldA", "FieldB" };
ctx.Load(items, a => a.Include(b => b.ContentType, b => b["FileRef"]));
foreach (var f in fieldsToLoad) {
    ctx.Load(items, includes => includes.Include(a => a[f]));
}

ctx.ExecuteQuery();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28504032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档