通过Ektron中的Custom Property获取分类

时间:2013-08-19 13:40:23

标签: ektron

我在Ektron 9.0工作。

我有两个不同的自定义属性与Ektron中的分类法相关联。

Say,Taxonomy名为“P”,它有两个自定义属性,

* P1 * P2

每个自定义属性都有自己的值。

(例如: * P1 - V1 * P2 -V2)

现在我试图根据这些自定义属性的名称和值来提取Ektron中的所有分类法。

即,获取Ektron中的所有分类,其中自定义属性名称为P1,对应值为V1,另一个自定义属性名称为P2,对应值为V2。

代码:

CriteriaFilterGroup<TaxonomyCustomProperty> criteriaFilterGrp1= new CriteriaFilterGroup<TaxonomyCustomProperty>();
criteriaFilterGrp1.AddFilter(TaxonomyCustomProperty.Name,
CriteriaFilterOperator.EqualTo,"P1");
criteriaFilterGrp1.AddFilter(TaxonomyCustomProperty.Value,
                  CriteriaFilterOperator.EqualTo, "V1");
criteriaFilterGrp1.Condition = LogicalOperation.And;
custCtriteria.FilterGroups.Add(criteriaFilterGrp1);

CriteriaFilterGroup<TaxonomyCustomProperty> criteriaFilterGrp2= new CriteriaFilterGroup<TaxonomyCustomProperty>();
criteriaFilterGrp2.AddFilter(TaxonomyCustomProperty.Name,
              CriteriaFilterOperator.EqualTo, "P2";
criteriaFilterGrp2.AddFilter(TaxonomyCustomProperty.Value,
              CriteriaFilterOperator.EqualTo, "V2");
custCtriteria.FilterGroups.Add(criteriaFilterGrp2);

这里,当我按两个分类名称及其对应的值添加过滤条件时,如下所示, 我没有得到任何结果,因为它正在寻找满足我所给出的所有四个条件的分类法自定义属性。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我的猜测是底层代码的行为与预期的操作方式不同 - 不是处理具有自定义属性的分类项,而是处理属性本身。这与其他ektron API在键入方面的行为一致,但不一致在于它返回相关的分类项本身(尽管这显然是更理想的结果)。对于此设计,您无法检索名称等于p1 p2的自定义属性。

解决方案是为每个要独立过滤的属性检索列表,然后将这些列表相交。方便的是,ektron返回iQueryable列表,因此您可以使用linq轻松完成此操作:

CriteriaFilterGroup<TaxonomyCustomProperty> criteriaFilterGrp1= new CriteriaFilterGroup<TaxonomyCustomProperty>();
criteriaFilterGrp1.AddFilter(TaxonomyCustomProperty.Name,
CriteriaFilterOperator.EqualTo,"P1");
criteriaFilterGrp1.AddFilter(TaxonomyCustomProperty.Value,
                  CriteriaFilterOperator.EqualTo, "V1");
criteriaFilterGrp1.Condition = LogicalOperation.And;
custCtriteria.FilterGroups.Add(criteriaFilterGrp1);
var itemsWithProp1= taxManager.getList(custCtriteria);

custCtriteria = new criteria();
CriteriaFilterGroup<TaxonomyCustomProperty> criteriaFilterGrp2= new CriteriaFilterGroup<TaxonomyCustomProperty>();
criteriaFilterGrp2.AddFilter(TaxonomyCustomProperty.Name,
              CriteriaFilterOperator.EqualTo, "P2";
criteriaFilterGrp2.AddFilter(TaxonomyCustomProperty.Value,
              CriteriaFilterOperator.EqualTo, "V2");
custCtriteria.FilterGroups.Add(criteriaFilterGrp2);
var itemsWithProp2 = taxManager.getList(custCtriteria);

var itemsWithBoth = itemsWithProp1.Intersect(itemsWithProp2);

虽然这不是最优雅或最有效的解决方案,但我不确定在制作自定义SQL查询之外,Ektron的API中有更好的方法。