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

时间:2013-01-25 21:32:57

标签: 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();

组件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();

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

2 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:11)

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

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

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

要使用 SchemaTitleCriteria ,我认为您需要至少在动态组件模板的基础上发布基于新闻门户架构的一个组件,以便内容交付数据库包含架构标题信息。