2

私は Ektron 9.0 で作業しています。

Ektron の分類法に関連付けられた 2 つの異なるカスタム プロパティがあります。

たとえば、「P」という分類法には、2 つのカスタム プロパティがあり、

*P1 *P2

これらのカスタム プロパティにはそれぞれ独自の値があります。

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

今、これらのカスタム プロパティの名前と値に基づいて、Ektron のすべての分類法を取得しようとしています。

つまり、カスタム プロパティ名が P1 で対応する値が V1 で、別のカスタム プロパティ名が P2 で対応する値が V2 である Ektron のすべてのタクソノミーを取得します。

コード :

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);

ここで、次のように 2 つのタクソノミー名とそれに対応する値でフィルター条件を追加すると、結果が得られません。これは、指定した 4 つの条件すべてを満たすタクソノミー カスタム プロパティを探しているためです。

どうすればこれを解決できますか?

4

1 に答える 1

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 内でより良い方法があるかどうかはわかりません。

于 2013-08-21T15:35:59.120 に答える