2

で使用SItecore 7.1していGlass.Mapper.Sc 3.1.7.26ます。Service Idフィールドが共有されている次のモデルがあります。

[SitecoreType]
public class ServiceMapping
{
    [SitecoreField(FieldName = "Service Id")]
    public virtual string ServiceId { get; set; }
}

そして、Droptreeフィールドを介してサービスマッピングを参照する次のモデルがあります(これも共有されています):

[SitecoreType]
public class OnlineService
{
    [SitecoreInfo(SitecoreInfoType.DisplayName)]
    public virtual string DisplayName { get; set; }

    [SitecoreField(FieldName = "Service")]
    public virtual ServiceMapping ServiceMapping { get; set; }
}

インスタンスをロードするときはOnlineServiceDisplayName. OnlineServiceドイツ語と英語で利用可能で、英語でのみ利用できると仮定して、ドイツ語でページをリクエストするとオブジェクトServiceMappingを取得nullします。ServiceMapping

ServiceMapping.ServiceIdプロパティに、既存の言語バージョンをチェックしないように設定することはできますか? があることは知っていますが、言語バージョンを確認するVersionCountDisabler()ためにクラスが必要なため、これを使用できません。OnlineService

4

1 に答える 1

4

うーん、これはトリッキーなものです。以下のコードはテストされていません (解決策を考えながらこれを書いています) が、書き込み方向を示しているはずです。

public class MyCrazyType : SitecoreFieldTypeMapper
{
    public override object GetFieldValue(string fieldValue, Mapper.Sc.Configuration.SitecoreFieldConfiguration config, SitecoreDataMappingContext context)
    {
        using (new VersionCountDisabler())
        {
            return base.GetFieldValue(fieldValue, config, context);
        }
    }

    public override bool CanHandle(Mapper.Configuration.AbstractPropertyConfiguration configuration, Context context)
    {
        //this will mean this handle only works for this type
        return configuration.PropertyInfo.PropertyType == typeof (ServiceMapping);
    }

}

この Glass を使用すると、空のアイテムがターゲット タイプにマップされます。

ハンドラーを Glass に登録する必要があります。次のチュートリアルを参照してください: http://glass.lu/docs/tutorial/sitecore/tutorial19/tutorial19.html

于 2014-02-03T22:41:46.437 に答える