Вопрос

Я пытаюсь написать SQL-запрос, чтобы получить все поля данного элемента в Sitecore.

Сказать, что я застрял, мягко говоря.

Полагаю, мне нужно самому присоединиться к таблице полей, но я ввязываюсь в узлы.

У кого-нибудь есть идеи?

Это было полезно?

Решение

Ни в одном из случаев вам не следует пытаться запрашивать базу данных Sitecore самостоятельно. Со временем база данных меняется, и это нарушит ваш код. Скорее используйте Item.Fields . Это коллекция, которая содержит все необходимые поля. Если вы хотите убедиться, что все поля загружены (действительно загружены, не загружены лениво), вы можете использовать Item.Fields.ReadAll ().

Редактировать. Также имейте в виду, что запросы не позволяют вам создать элемент, поэтому вы пропускаете поведение значений по умолчанию и вообще не используете интеллектуальное кэширование Sitecore.

Другие советы

Попробуйте вызвать Sitecore.Context.Item.Fields.ReadAll () перед поиском поля.

Первая попытка, но не возвращает все поля

SELECT I2.Name FROM
 Items AS I 
 JOIN UnversionedFields AS UF ON I.ID = UF.ItemId
 JOIN VersionedFields AS V ON I.ID = V.ItemId
 JOIN SharedFields AS S ON I.ID = S.ItemId 
 JOIN Items AS I2 ON I2.ID = UF.FieldId OR I2.ID=V.FieldId OR I2.ID = S.FieldId    
 WHERE I.ID = '110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9'
 GROUP BY I2.Name

Вызывая item.Fields, вы получаете поля элементов, которые вы определили в своих шаблонах, а также стандартные поля Sitecore, существующие для всех элементов. Используйте приведенный ниже код, если вам нужны только те поля, которые вы определили в своих шаблонах. Конечно, это предполагает, что имена ваших полей не начинаются с " __ "

// Get Fields directly from the Item
List<string> fieldNames = new List<string>();
item.Fields.ReadAll();
FieldCollection fieldCollection = item.Fields;
foreach (Field field in fieldCollection)
{
    //Use the following check if you do not want 
    //the Sitecore Standard Fields 
    if (!field.Name.StartsWith("__"))
    {
        fieldNames.Add(field.Name);
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top