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?

È stato utile?

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);
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top