Пользовательский поставщик данных Sitecore удваивает языковые версии?

Так что в последнее время я работал над нестандартным провайдером данных для Sitecore, и он действительно хорош и работает довольно хорошо, пока не столкнулся с этим:

Двойные языки

Как видите, я получаю версии на двух языках. Хотя GetItemVersions моего Data Provider выглядит следующим образом:

/// <summary>
/// Used to retrieve version and language information of given item.
/// </summary>
public override VersionUriList GetItemVersions(ItemDefinition itemDefinition, CallContext context)
{
    VersionUriList result = null;

    if (itemDefinition.ID == RootItem.RootId)
    {
        // Our root only has 1 version in 1 language.
        result = new VersionUriList { new VersionUri(LanguageManager.GetLanguage("en"), Version.First) };
    }
    else if (CanProcess(itemDefinition.ID))
    {
        // Snipped processing of own items
    }

    return result;
}

Так что это означает, что любой предмет, с которым я не работаю null, Кто-нибудь видел такое поведение раньше и точно знает, где это исправить?

2 ответа

Решение

ОБНОВЛЕНИЕ 29/04/2014

Тем временем я нашел еще лучший способ вылечить это. В конфигурации провайдера данных вы можете определить, какие методы доступны следующим образом:

<sitecore>
    <dataProviders>
        <CustomDataProvider type="MyLib.Data.CustomDataProvider, MyLib">
            <disable>*</disable>
            <enable>GetChildIDs</enable>
            <enable>GetParentID</enable>
            <enable>GetItemDefinition</enable>
            <enable>GetItemVersions</enable>
            <enable>GetItemFields</enable>
        </CustomDataProvider>
    </dataProviders>
</sitecore>

Для тех, кто сталкивается с той же проблемой, что и я, когда следует указаниям документации:

Они забыли упомянуть, что при интеграции в существующую БД (например, основную) вам необходимо переопределить следующий метод:

/// <summary>
/// We don't store any languages.
/// </summary>
public override LanguageCollection GetLanguages(CallContext context)
{
    return null;
}

В противном случае ваш провайдер данных достаточно умен, чтобы возвращать языки и, тем самым, эффективно доставлять их в Sitecore 2 раза, вызывая проблему, показанную выше. (который нарушает TDS)

У меня была точно такая же проблема. Переопределение GetItemVersions и GetLanguages ​​устранило проблему.

public override VersionUriList GetItemVersions(ItemDefinition itemDefinition, CallContext context)
        {
            if (return true if the itemDefinition is a item from your db)
            {
                VersionUriList result = new VersionUriList();

                //Add versions on languages you want
                result.Add(LanguageManager.GetLanguage("nl"), Sitecore.Data.Version.First);
                result.Add(LanguageManager.GetLanguage("en"), Sitecore.Data.Version.First);

                return result;
            }
            //itemDefinition is a item from a sitecore db => return null (sc will handle versions of his items)
            return null;
        }

И переопределить GetLanguages, чтобы вернуть ноль, как предложено

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