【问题标题】:Fetching taxonomy by Custom Property in Ektron在 Ektron 中按自定义属性获取分类
【发布时间】:2013-08-19 13:40:22
【问题描述】:

我在 Ektron 9.0 中工作。

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

说,分类学名为“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);

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

我该如何解决这个问题?

【问题讨论】:

  • 如果你只设置一个条件,你会得到正确的结果,例如。只是custCrtiteria.AddFilter(TaxonomyCustomProperty.Name, CriteriaFilterOperator.EqualTo,"P1"); ?
  • 是的,在单一条件下它工作正常。但对我来说,我需要提取满足所有四个条件的所有分类法。

标签: ektron


【解决方案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);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    相关资源
    最近更新 更多