Могу ли я получить все поля в элементе (в Sitecore)? - PullRequest
5 голосов
/ 22 октября 2009

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

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

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

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

Ответы [ 4 ]

10 голосов
/ 23 октября 2009

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

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

6 голосов
/ 22 октября 2009

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

3 голосов
/ 22 октября 2009

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

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
1 голос
/ 16 ноября 2009

Вызывая 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);
    }
}
...