Posso ottenere tutti i campi in un oggetto (in Sitecore)?
-
05-07-2019 - |
Domanda
Sto cercando di scrivere una query sql per ottenere tutti i campi in un determinato elemento in Sitecore.
Dire che sono bloccato lo sta dicendo leggermente.
Immagino di dover unirmi al tavolo dei campi, ma mi sto facendo nodi.
Qualcuno ha qualche idea?
Soluzione
In nessuno dei casi dovresti mai provare a interrogare tu stesso il database di Sitecore. Il database cambia nel tempo e questo infrange il tuo codice. Piuttosto, usa Item.Fields
. Questa è una raccolta che contiene tutti i campi necessari. Se vuoi assicurarti che tutti i campi siano caricati (caricati davvero, non caricati lentamente), allora puoi usare Item.Fields.ReadAll ().
Modifica: inoltre, tieni presente che l'interrogazione non ti consente di costruire un oggetto, quindi perdi il comportamento dei valori predefiniti e non usi affatto la memorizzazione nella cache di Sitecore intelligente.
Altri suggerimenti
Prova a chiamare Sitecore.Context.Item.Fields.ReadAll ()
prima di cercare un campo.
Primo tentativo, ma non restituisce tutti i campi
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
Chiamando item.Fields ottieni i campi oggetto che hai designato nei tuoi modelli e i campi standard Sitecore che esistono su tutti gli articoli. Utilizzare il codice seguente se si desidera solo i campi definiti nei modelli. Ovviamente, ciò presuppone che i nomi dei campi non inizino con " __ "
// 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);
}
}