Mik*_*val 9 tridion tridion2009
我是Tridion的新手,我必须实现允许内容编辑器创建组件并为其分配多个日期范围(可用日期)的功能.需要从代理查询这些内容以提供搜索功能.
最初,这只需要一个开始和结束日期,因此被实现为单独的元数据字段.
我建议在架构的"可用日期"元数据字段中使用嵌入式架构,以允许分配多个开始日期和结束日期.
但是,由于字段现在允许多个值,因此数据在"KEY_STRING_VALUE"列中以逗号分隔值存储在代理中,而不是"KEY_DATE_VALUE"列中的日期值,因为它只允许单个开始和结束值.
例如.
KEY_NAME | KEY_STRING_VALUE
end_date | 2012-04-30T13:41:00,2012-06-30T13:41:00
start_date | 2012-04-21T13:41:00,2012-06-01T13:41:00
这现在导致我的代理查询问题,因为我不能再使用简单的查询逻辑来检索基于日期搜索所需的项目.
在我开始根据这些来写C#的逻辑来分析这些逗号分隔日期和搜索,我想知道是否有人已经有过类似的要求/经验,并已实现了这个以不同的方式,以减少代码解析所需的量和使用代理查询来完成搜索.
我在Tridion 2009上开发这个,但使用5.3 Broker(由于遗留原因)所以查询当前看起来像这样(对于单个开始/结束日期):
query.SetCustomMetaQuery((KEY_NAME='end_date' AND KEY_DATE_VALUE>'" + startDateStr + "') AND (ITEM_ID IN(SELECT ITEM_ID FROM CUSTOM_META WHERE KEY_NAME='start_date' AND KEY_DATE_VALUE<'" + endDateStr + "')))";
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏.
Mik*_*val 10
只是想回来并提供一些细节,说明如果其他人面对同样的情况,我最终会如何处理这个问题.
我向客户提出了设定数量的字段(由Miguel建议),但客户对该限制级别不满意.
因此,我最终实现了包含开始日期和结束日期的可嵌入模式,这提供了最大的灵活性.但是,Broker API中的限制意味着我必须直接访问Broker DB - 不理想,但客户已同意获得所需功能的方法.显然,如果将来进行任何升级,都需要重新审视.
所有日期和可用时段的处理都是在C#中完成的,这意味着解决方案的性能实际上非常好.
我发现导致一些问题的一件事是,如果使用嵌入式模式为该字段设置多个值(即在这种情况下,多个开始日期和结束日期),则元数据存储在CUSTOM_META表的KEY_STRING_VALUE列中.但是,如果您在字段中只有一个值(即一个开始日期和结束日期),那么这些值将作为日期存储在KEY_DATE_VALUE列中,就像您刚刚使用单个字段而不是可嵌入模式一样.对于Tridion来说,这似乎是一种明智的方法,但是在编写查询和解析代码时,它会使它稍微复杂一些!
这是一个复杂的场景,因为您必须遍历所有 DCP 并解析这些字符串以确定是否匹配搜索条件
有一种方法可以将元数据(逗号分隔)转换为代理中的单个值,但字段的名称需要不同 Range1、Range2、...、RangeN 您可以使用部署程序扩展来实现这一点,您可以在其中使用更改包的 XML 结构并将每个字符串转换为不同的值 (1,2, .., n)。如果您不熟悉部署程序扩展并且不能 100% 解决您的场景,此扩展可能需要一些时间。
这样做的问题是,您仍然必须应用多个条件来检索这些值,并且始终必须设置一个限制(与可以根据需要添加任意值的用户相比)
样本:
query.SetCustomMetaQuery((KEY_NAME='end_date1'
query.SetCustomMetaQuery((KEY_NAME='end_date2'
query.SetCustomMetaQuery((KEY_NAME='end_date3'
query.SetCustomMetaQuery((KEY_NAME='end_date4'
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最快、最简单的方法可能是使用多值字段,使用不同的字段。我知道这不是最通用的场景,并且存在业务需求影响,但可以简化开发。
我之前的评论是在仅使用 Broker API 的情况下进行的,但如果搜索引擎是您架构的一部分,您可以利用搜索引擎。您可以索引经纪商数据库并处理数据。使用搜索引擎 API,您可以提取组件/组件模板的 ID,并使用代理 API 检索正确的信息