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?

Était-ce utile?

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);
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top