更新: Sitecore バージョン 7.0 を使用しています
私はこれまで Glass.Mapper.Sc を使用して成功しています。多くのモデルが正常にマッピングされています。最初のクエリ マッピングを試したところ、うまくいきません。
私は次の2つのモデルを持っています
[SitecoreType(TemplateName = "Testimonial")]
public class Testimonial : ContentItem
{
[SitecoreField(FieldType = SitecoreFieldType.MultiLineText)]
public virtual string Summary { get; set; }
[SitecoreField(FieldType = SitecoreFieldType.RichText)]
public virtual string Testimony { get; set; }
[SitecoreField]
public virtual string Testifier { get; set; }
[SitecoreField(FieldType = SitecoreFieldType.GeneralLink)]
public virtual Link TestifierUrl { get; set; }
[SitecoreField]
public virtual string Company { get; set; }
}
と
[SitecoreType(TemplateName = "Testimonials")]
public class Testimonials : ContentFeatureItem
{
public Testimonials()
{
TestimonialList = new List<Testimonial>();
}
[SitecoreQuery("/sitecore/content//*[@@templatename='Testimonial']", IsRelative = true)]
public virtual IEnumerable<Testimonial> TestimonialList { get; set; }
}
チュートリアルによると、TestimonialList に Testimonial アイテムのリストが入力されることを期待する必要があります。ただし、リストは常に空です。
sitecore の Developer Tools で XPath ビルダーを使用し、次の Sitecore API を使用して、パスが有効であることを確認しました。
var query = new Query("/sitecore/content//*[@@templateName='Testimonial']");
var returnVal = query.Execute();
returnVal には、予想されるアイテムが入力されます。./*[@@templateName='Testimonial']
マッピング属性のクエリとしても試しました。
特定の Testimonial インスタンスを手動で取得して、奇妙なマッピングの問題ではないことを確認しました。
この問題は別として、Glass.Mapping.Sc と私のモデルではすべてが正しく機能しているようです。これまでのところ、 glass.lu のチュートリアルに従い、NuGet経由で Glass.Mapping.Sc をインストールしました。
github のソースを調べましたが、問題の原因となっている可能性のあるものは何も見つかりません。他の誰かがこの問題を抱えていたり、ガラスでクエリが入力されたパラメーターを正常に使用したりしましたか?
更新 (Michael の返信に続いて):
Testimonials クラスに次のプロパティを追加しました
[SitecoreQuery("./*")]
public virtual IEnumerable<AbstractModel> Children { get; set; }
これにより、Testimonials アイテムの直接の子である 6 つの Testimonial アイテムである AbstractModel のデータが取り込まれた IEnumerable が返されました。
私も試しました
[SitecoreQuery("//*")]
public virtual IEnumerable<AbstractModel> Children { get; set; }
そして同じ結果を得ました。6つの証言よりも多くのアイテムを手に入れることを期待しているので、私はそれを理解していません.
TestimonialList プロパティを削除し、新しいプロパティ Children を追加しました。このプロパティは完全に機能します
[SitecoreQuery("./*[@@templatename='Testimonial']", IsRelative = true)]
public virtual IEnumerable<Testimonial> Children { get; set; }
次に、resharper を使用してプロパティの名前を TestimonialList、ZYX、Blerg に変更しました。3 回とも機能しませんでした (入力されませんでした) が、名前を Children に戻すと、すべて問題ありません。変。
詳細更新 プロパティの名前が「Children」の場合にクエリが機能しているように見える理由がわかりました。うまくいかないので、予期しない結果が得られました。「Children」は、すべての Child アイテムに設定される共通のプロパティです。子アイテムはすべて Testimonials であるため、正しく入力できます。
したがって、プロパティを次のように変更しても、正しく入力されます
public virtual IEnumerable<Testimonial> Children { get; set; }
Glass.Mapper.Sc.Integration.DataMappers.SitecoreChildrenMapperFixture.MapToProperty_ItemHasThreeChildren_ThreeObjectsAreCreated で見られます。