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

当我加载它的实例时,OnlineService它必须依赖于语言,因为DisplayName. 假设我有OnlineService德语和英语版本,而我ServiceMapping只有英语版本,然后在请求德语页面时获取对象nullServiceMapping

是否可以为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 回答