Puis-je obtenir tous les champs d'un élément (dans Sitecore)?
-
05-07-2019 - |
Question
J'essaie d'écrire une requête SQL pour obtenir tous les champs d'un élément donné dans Sitecore.
Dire que je suis coincé, c'est le moins qu'on puisse dire.
Je suppose que je dois faire un peu d’auto-ralliement sur la table des terrains, mais je me fais des nœuds.
Quelqu'un a des idées?
La solution
Dans aucun des cas, vous ne devriez jamais essayer d'interroger vous-même la base de données Sitecore. La base de données change avec le temps et cela casserait votre code. Utilisez plutôt le Item.Fields
. C'est une collection qui contient tous les champs nécessaires. Si vous voulez vous assurer que tous les champs sont chargés (réellement chargés, pas paresseux), vous pouvez utiliser Item.Fields.ReadAll ().
Éditer: N'oubliez pas non plus que l'interrogation ne vous permet pas de construire un élément. Par conséquent, vous manquez le comportement des valeurs par défaut et n'utilisez pas du tout la mise en cache intelligente de Sitecore.
Autres conseils
Essayez d'appeler Sitecore.Context.Item.Fields.ReadAll ()
avant de rechercher un champ.
Première tentative, mais ne renvoie pas tous les champs
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
En appelant item.Fields, vous obtenez les champs d’élément que vous avez désignés dans vos modèles ainsi que les champs standard Sitecore qui existent sur tous les éléments. Utilisez le code ci-dessous si vous souhaitez uniquement les champs que vous avez définis dans vos modèles. Bien entendu, cela suppose que vos noms de champs ne commencent pas par "__"
.// 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);
}
}