8

我有一个简单的 SDL Tridion 2011 SP1 代理查询来检索组件 URI 列表。我所有的组件都嵌入在页面上,而不是使用动态组件模板。以下代码返回 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 基于名为“News Portal”的模式。我想为我的查询添加额外的条件,以便我只获取基于该模式的项目,所以我尝试了以下代码:

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需要将组件发布为动态组件演示。任何建议将不胜感激。

4

2 回答 2

13

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

但是在实际场景中,您执行代理查询以获取 dcps,因此您不应该看到此行为,除非是错误或有人错过了它。

于 2013-01-25T21:52:25.920 回答
11

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

我怀疑这是无意的行为,值得 SDL 提出。

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

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

于 2013-01-25T21:37:41.550 回答