Я могу получить все поля в объекте (в Sitecore)?

Просто подсказка для упрощения свойств элемента: Используйте автоматические свойства с private set и постарайтесь не явно объявлять поле данных. например,

public class SampleElement {
  public SampleElement(Guid id, string name) {
    Id = id;
    Name = name;
  }

  public Guid Id {
    get; private set;
  }

  public string Name {
    get; private set;
  }
}

5
задан inspite 22 October 2009 в 08:43
поделиться

4 ответа

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

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

10
ответ дан 18 December 2019 в 07:55
поделиться

Try to call Sitecore.Context.Item.Fields.ReadAll() before looking up a field.

6
ответ дан 18 December 2019 в 07:55
поделиться

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

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
3
ответ дан 18 December 2019 в 07:55
поделиться

Вызывая 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);
    }
}
1
ответ дан 18 December 2019 в 07:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: