Frage

Ich versuche, eine SQL-Abfrage zu schreiben, um alle Felder in einem bestimmten Punkt in Sitecores zu erhalten.

Zu sagen, ich bin stecken Putting ist es mild.

Ich vermute, ich habe einige Selbst tun auf den Feldern Tisch kam, aber ich bin immer selbst in Knoten.

Wer irgendwelche Ideen?

War es hilfreich?

Lösung

In keinem der Fälle sollten Sie jemals versuchen, die Sitecore-Datenbank selbst abzufragen. Die Datenbank ändert sich im Laufe der Zeit und dieser Code brechen würde. Vielmehr nutzt die Item.Fields. Dies ist eine Sammlung, die alle notwendigen Felder enthält. Wenn Sie sicherstellen möchten, dass alle Felder geladen werden (wirklich geladen, nicht faul geladen), als Sie Item.Fields.ReadAll verwenden können ().

Edit:. Auch beachten Sie, dass die Abfrage nicht zulässt ein Element zu konstruieren, so dass Sie das Verhalten der Standardwerte verfehlen und das intelligente Caching Sitecores überhaupt nicht verwenden

Andere Tipps

Versuchen Sitecore.Context.Item.Fields.ReadAll() aufrufen, bevor ein Feld nach oben.

erster Versuch, aber nicht zurück alle Felder

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

Durch den Aufruf item.Fields Sie die Positionsfelder, die Sie in Ihren Vorlagen festgelegt haben, sowie die Sitecores Standardfelder, die auf allen Einzelteilen bestehen. Verwenden Sie den Code unten, wenn Sie nur die Felder möchten, die Sie in Ihren Vorlagen definiert haben. Natürlich setzt dies voraus, Feldnamen nicht mit „__“

starten
// 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);
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top