Могу ли я получить все поля в элементе (в 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);
}
}