4

trueSitecore がと の両方Item.Axes.IsDescendantOf()を返品する理由や何か不足しているものはありItem.Axes.IsAncestorOf()ますか?

var test =
Sitecore.Context.Database.GetItem("{862B466A-079B-40E7-8661-FC064EC28574}");  
Response.Write(test.Axes.IsAncestorOf(test));  
Response.Write(test.Axes.IsDes(test));

//真
//真

編集IsAncestorOf:非包括的またはを探してこの回答に出くわす可能性のある人は誰でもIsDescendantOf、ニュースカテゴリの複数選択フィールドで最高レベルの要素を見つける必要があるいくつかの例を以下に示します.

newsCategories
   .Where(x => newsCategories
                       .Any(y => x != y && !x.Axes.IsDescendantOf(y)))

newsCategories
   .Where(x => newsCategories
                       .Any(y => x != y && !x.Axes.IsDescendantOf(y)))
4

2 に答える 2

10

Sitecoreのメソッドに名前を付けてはいけないと信じる必要がIsAncestorOfありIsDescendantOfます。発見に基づいて、そしてSitecoreコードをすばやく確認すると、メソッドには実際にとという名前を付ける必要がIsAncestorOrSelfありIsDescendantOrSelfます。

この例では、

Sitecore.Data.Items.Item x = //some item;
Sitecore.Data.Items.Item y = //some item;
x.Axes.IsAncestorOf(y)
x.Axes.IsDescendantOf(y)

IsAncestorOfメソッドは比較していますx.ID == y.IDx.ID次に、yの親のと比較し続けるためID、名前を付ける必要がありますIsAncestorOrSelf

この方法では、のパスがのパスで始まるIsDescendantOfかどうかを比較しています。文字列は常に同じ文字列で始まるため、このメソッドには。という名前を付ける必要があることがわかります。LongIDxLongIDyIsDescendantOrSelf

参考までに、LongIDパスは次のようになります。sitecoreで兄弟が同じ名前を持つことができるという事実を回避するため/{11111111-1111-1111-1111-111111111111}/{0DE95AE4-41AB-4D01-9EB0-67441B7C2450}/{110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9}ではなく、パスが使用されていると思われます。/sitecore/content/home

于 2012-05-08T20:24:02.047 に答える
2

Sitecore ロジックで「フェイル セーフ」に達しています。これは、同じ項目を自分自身でチェックしているためです。結果を得るには、2 つの異なるアイテムでこれを実行する必要があります。

于 2012-05-08T19:00:00.123 に答える