首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何优化这个术语的SharePoint查询?

如何优化这个术语的SharePoint查询?
EN

Stack Overflow用户
提问于 2015-05-15 05:52:50
回答 2查看 2.5K关注 0票数 2

我有一个托管元数据服务,它有一个包含术语集和术语的术语组。

我对SharePoint查询很陌生,目前正在做以下工作:

  1. 获取客户端上下文
  2. 设置凭据
  3. 更新客户端上下文缓存
  4. 获取分类会话
  5. 获取术语存储
  6. 获得项集
  7. 获得条款

对于上述每一个步骤,我都要在客户端上下文上加载和执行一个查询。

  1. 是否有更好的方法来加载和执行查询?
  2. 是否有一个直接的LINQ查询或CAML查询,我可以使用它来获得我需要的条件,给定术语集的UID?

代码:

代码语言:javascript
复制
var siteUrl = ConfigHelper.GetValue("SharepointSiteUrl");
var clientContext = new ClientContext(siteUrl);

clientContext.Credentials = new NetworkCredential(ConfigHelper.GetValue("ServiceAccountLogonName"), ConfigHelper.GetValue("ServiceAccountPassword"));

var taxonomySession = TaxonomySession.GetTaxonomySession(clientContext);

taxonomySession.UpdateCache();

clientContext.Load(taxonomySession, ts => ts.TermStores);
clientContext.ExecuteQuery();

if (taxonomySession.TermStores.Count == 0)
{
    throw new InvalidOperationException("The Taxonomy Service is offline or missing");
}

var termStore = taxonomySession.TermStores[1];

clientContext.Load(termStore);
clientContext.ExecuteQuery();

var termSet = termStore.GetTermSet(new Guid("f40eeb54-7c87-409d-96c7-75ceed6bff60"));
clientContext.Load(termSet);
clientContext.ExecuteQuery();

var terms = termSet.GetAllTerms();
clientContext.Load(terms);
clientContext.ExecuteQuery();

foreach (var term in terms)
{
    clientContext.Load(term, t => t.Id, t => t.Name);
    clientContext.ExecuteQuery();                
}

如何优化这个术语的SharePoint查询?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-15 11:06:23

指定示例的主要问题是向服务器提交了一组中间请求,因此主要优化如下:

  • 删除这些中间请求(请参阅下面修改的示例)
  • 或者,由于SharePoint CSOM支持请求分批,所以只能使用单个批处理请求从服务器请求多个客户端对象。

因为如果您的目标是只检索特定术语集的术语,那么可以对示例进行优化,如下所示:

代码语言:javascript
复制
var taxonomySession = TaxonomySession.GetTaxonomySession(ctx);
var termStore = taxonomySession.GetDefaultSiteCollectionTermStore();
var termSet = termStore.GetTermSet(termSetId);
var terms = termSet.GetAllTerms();
ctx.Load(terms, tcol => tcol.Include(t => t.Id,t => t.Name));
ctx.ExecuteQuery();

一些建议

  • 喜欢TermStoreCollection.GetByNameTermStoreCollection.GetById方法,而不是按索引获取TermStore,因为在后面的情况下,TermStoreCollection必须先初始化
  • 如果您需要获得默认的术语存储,请使用TaxonomySession.GetDefaultSiteCollectionTermStore method
票数 4
EN

Stack Overflow用户

发布于 2015-05-15 10:12:48

这边请

代码语言:javascript
复制
var taxonomySession = TaxonomySession.GetTaxonomySession(ctx);
taxonomySession.UpdateCache();
TermStore ts = taxonomySession.TermStores.GetById(termStoreId);
TermSet set = ts.GetTermSet(termSetId);
TermCollection terms = set.GetAllTerms();

ctx.Load(terms, t=>t.IncludeWithDefaultProperties(term=>term.Name, term=>term.Id));
ctx.ExecuteQuery();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30252443

复制
相关文章

相似问题

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