【问题标题】:Tridion: Replacement for Query.QueryOperator method?Tridion:替换 Query.QueryOperator 方法?
【发布时间】:2012-09-12 14:37:49
【问题描述】:

Query.QueryOperator.AND_Field 我们在 Tridion R5.3 VBscript 模板中使用了这种方法,并且效果很好。 最近,在迁移到 Tridion 2011 SP1 时,我们尝试使用这种方法,但它不起作用。 我们了解到,这种方法在新的 tridion 版本中已被贬低。

根据论坛中的一些帖子,我们还在 CD_Storage_Conf 中启用了以下行:

<SearchFilter Name="SearchFilter" Class="com.tridion.broker.components.meta.MsSqlSearchFilterHome" defaultStorageId="defaultdb"/> 
<Item typeMapping="Query" storageId="defaultdb"/>

问题是,'Query.QueryOperator.AND_Field' 方法的替代品是什么?我们如何在 C# 中使用这个过滤器? 如何使用支持API文件中提到的Broker Querying Mechanism?

谢谢。

【问题讨论】:

    标签: tridion tridion-2011 tridion-content-delivery


    【解决方案1】:

    在 SDL Tridion 2011 Content Delivery 中,您创建一个Query 对象并使用setCriteria 方法向它添加一个Criteria 对象。 Query 对象接受一个 Criteria 对象,但 Criteria 对象又可以引用树结构中的其他 Criteria 对象。

    有关使用 AND 和 OR 运算符创建查询过滤器的良好示例,请参阅 SDL LiveContent 中 SDL Tridion 2011 SP1 文档中的 Creating a filter

    // Schema has ID of either 511 (Article) or 34 (Press Release).
    ItemSchemaCriteria IsArticle = new ItemSchemaCriteria(511);
    ItemSchemaCriteria IsPressRelease = new ItemSchemaCriteria(34);
    Criteria IsArticleOrPressRelease = CriteriaFactory.Or(IsArticle, IsPressRelease);
    
    // Type of the item is 16 (Component).
    ItemTypeCriteria IsComponent = new ItemTypeCriteria(16);
    
    // Both of the above conditions must be true
    Criteria AllCriteria = CriteriaFactory.And(IsArticleOrPressRelease, IsComponent);
    
    // Add these criteria to a query
    Query MyQuery = new Query();
    MyQuery.Criteria = AllCriteria;
    

    【讨论】:

    • 嗨,David,您能告诉我 Query 类属于哪个命名空间吗?我们可以使用 Tridion.ContentDelivery.DynamicContent.Query;或Tridion.ContentDelivery.DynamicContent.Filters;但是后一个已经过时了?我尝试使用第一个,但找不到方法 SetCriteria。谢谢。
    • 嗨休斯顿。肯定是 Tridion.ContentDelivery.DynamicContent.Query。它是 Java API 中的 setCriteria。也许 LiveContent 中的示例有点错误?查看 CHM 文档(Content Delivery ASP.NET API.chm),它显示了一个允许设置和获取的 Criteria 属性。你可以试试吗?
    • 休斯顿。我刚刚测试过,确实是 MyQuery.Criteria = AllCriteria;答案已更新并在 LiveContent 中留下评论
    • 在我看来,您正在搜索在两个日期之间首次发布的项目。您将在 SDL Tridion 2011 Content Delivery 中为此使用的 Criteria 对象是 ItemInitialPublishDateCriteria 对象。通常,您应该避免使用 AddSelectString() 方法,因为尽管 SDL 尽最大努力使 Tridion 的 API 向后兼容,但它使用的数据库格式可能会发生变化。此外,它使您的代码数据库不可知。
    • 初始发布日期不是自定义元数据,是系统元数据。 ItemInitialPublishDate 不是一个字段,它是一个 Criteria 对象。请重新阅读我的回答、在线文档和帮助文件。使用: Criteria InitialPublishedAfterDate = new ItemInitialPublishDateCriteria(startDate, Criteria.GreaterThanOrEqual); Criteria initialPublishedBeforeDate = new ItemInitialPublishDateCriteria(endDate, Criteria.LessThanOrEqual); Criteria InitialPublishedBetweenDates = CriteriaFactory.And(initialPublishedAfterDate, initialPublishedBeforeDate);。将此 AndCriteria 与其他条件相结合
    猜你喜欢
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2020-11-11
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多