Могу ли я получить все поля в элементе (в Sitecore)?

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

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

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

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

4 ответа

Решение

Ни в одном из случаев вы не должны пытаться самостоятельно запрашивать базу данных 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);
    }
}
Другие вопросы по тегам