SchemaTitleCriteria在SDL Tridion Broker查询中没有结果

Chr*_*ers 8 tridion tridion-content-delivery

我有一个简单的SDL Tridion 2011 SP1代理查询来检索组件URI列表.我的所有组件都嵌入在Pages上,而不是使用动态组件模板.以下代码返回50个结果(这是预期的).其中一个是URI tcm:123-456-16.

List<Criteria> criteria = new List<Criteria>();
criteria.Add(new ItemTypeCriteria(16));
criteria.Add(new PublicationCriteria(337));
Query query = new Query(CriteriaFactory.And(criteria.ToArray<Criteria>()));
String[] results =  query.ExecuteQuery();
Run Code Online (Sandbox Code Playgroud)

组件tcm:123-456-16基于名为"新闻门户"的模式.我想为我的查询添加其他条件,以便我只根据该Schema获取项目,所以我尝试了以下代码:

List<Criteria> criteria = new List<Criteria>();
criteria.Add(new ItemTypeCriteria(16));
criteria.Add(new PublicationCriteria(337));
criteria.Add(new SchemaTitleCriteria("News Portal"));
Query query = new Query(CriteriaFactory.And(criteria.ToArray<Criteria>()));
String[] results =  query.ExecuteQuery();
Run Code Online (Sandbox Code Playgroud)

这根本不会返回任何结果.我仔细检查了我的架构名称.这是预期的回应吗?是否SchemaTitleCriteria要求将组件发布为动态组件演示文稿.任何建议将不胜感激.

Kay*_*lan 13

DCP上的是和否.您无需将所有组件作为动态组件演示文稿(DCP)发布.我们注意到了相同的情况并观察到如果您没有基于模式发布至少一个DCP,则模式标题不会发布到Tridion Broker DB的Schemas表中(不确定它是否是设计).一旦您根据架构发布了一个DCP,就会存储架构标题并且后续查询会起作用,但在您发布第一个DCP之前,您将无法获得任何.

但是在实际情况下,您会进行代理查询以获取dcps,因此除了错误或有人错过它之外,您不应该看到此行为.


joh*_*ter 11

为什么组件出现在第一个结果集中,而不出现在第二个结果集中?

我怀疑这是非预期的行为,值得用SDL提高.

要修复它,您需要使用ItemSchemaCriteria而不是SchemaTitleCriteria,并根据模式ID而不是模式标题获取组件.

要使用SchemaTitleCriteria,我应该想象您至少需要在动态组件模板旁边基于新闻门户架构发布一个组件,以便内容交付数据库包含架构标题信息.