2012-05-08 11 views
4

Sitecoreが返したは、Item.Axes.IsDescendantOf()Item.Axes.IsAncestorOf()の両方に理由がありますか?Sitecore Axes.IsDescendantOf/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))) 

答えて

10

私は、Sitecoreのメソッドはではなくでなければならないと信じなければならないでしょう。IsAncestorOfIsDescendantOfです。あなたの発見に基づいて、Sitecoreコードをすばやく調べると、メソッドは実際にIsAncestorOrSelfIsDescendantOrSelfという名前にする必要があります。

この例では、

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.IDを比較しています。次に、x.IDとyの親のIDを比較し続けます。そのため、名前はIsAncestorOrSelfである必要があります。

LongIDのパスがxで始まり、のパスがyで始まる場合を比較しています。文字列は常に同じ文字列で始まり、このメソッドの名前はIsDescendantOrSelfであることがわかります。

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

+1

私はそれに2つのアップフォートを与えることができました。 – techphoria414

+0

@ techphoria414同様に –

+0

ショーンは、質問に完全に答え、私はこれが事実であると感じた。ソースのどこかに 'IsDescendantOrSelf'メソッドがあることに気付きました。 – al3xnull

2

あなたはサイトコアロジックに "フェールセーフ" をヒットしています。 あなたはそれに対して同じアイテムをチェックしているからです。結果を出すには、2つの異なる項目でこれを実行する必要があります。

+0

サンドベック、なぜそれがフェールセーフなのか、それともユースケースなのか分かりませんか?私は答えが不思議です。私は、彼らが2つのアイテムのIDを比較しているが、それらが逆コンパイルされたソース内の同じアイテムであるかどうかをチェックしていないことに留意した。 – al3xnull

+0

2つのアイテムは同じIDを持ちますが、同じアイテムはどのようにしますか?言語やデータベースを何らかの形で取り入れている場合を除きます。 – techphoria414

+0

'string longID = this._item.Paths.LongID;文字列str2 = item.Paths.LongID; return longID.StartsWith(str2); '私が間違ったことを暗示した場合はお詫び申し上げます。 – al3xnull

関連する問題