【问题标题】:SchemaTitleCriteria yield no results in SDL Tridion Broker QuerySchemaTitleCriteria 在 SDL Tridion Broker 查询中不产生任何结果
【发布时间】:2013-01-09 22:39:52
【问题描述】:

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

【问题讨论】:

    标签: tridion tridion-content-delivery


    【解决方案1】:

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

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

    【讨论】:

    • 很好的答案 - 谢谢。非 DCP 的原因是我需要根据某个模式找到特定的组件,然后使用链接 API 链接到它。因此,它不需要成为 DCP。但我同意,这是一个不寻常的案例。
    • 我知道了。那么我只能认为这是设计或错误。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 2020-07-29
      • 1970-01-01
      • 2017-04-06
      相关资源
      最近更新 更多