我有一个简单的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基于名称为“新闻门户”的架构。我想在查询中添加其他条件,以便仅基于该架构获取项目,因此尝试了以下代码:

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

最佳答案

DCP上的是和否。您无需将所有组件都发布为动态组件表示(DCP)。我们注意到了同样的情况,并观察到,如果您不基于架构发布至少一个DCP,则架构标题不会发布到Tridion Broker DB的Schemas表中(不确定它是设计使然)。一旦发布了基于模式的DCP,即会存储模式标题,随后的查询将起作用,但是直到发布第一个DCP为止,您将一无所获。

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

08-04 13:42