Отключить проверку версии для определенного свойства в картографе стекла Sitecore

Я использую 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; }
}

И у меня есть следующая модель, которая ссылается на Service Mapping над 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 только на английском, тогда я получаю null для ServiceMapping объект при запросе страницы на немецком языке.

Можно ли дать ServiceMapping.ServiceId свойство параметр, который он не должен проверять для существующей языковой версии? Я знаю, что есть VersionCountDisabler(), но я не могу использовать это, потому что мне нужно OnlineService класс для проверки языковой версии.

1 ответ

Решение

Хм, это сложно, код ниже не проверен (я пишу это, как я думаю о решении), но должен указать вам направление записи.

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, см. Этот учебник: http://glass.lu/docs/tutorial/sitecore/tutorial19/tutorial19.html

Другие вопросы по тегам