Pregunta

Estoy intentando escribir una consulta de SQL para obtener todos los campos en un elemento determinado en Sitecore.

Decir que estoy atascado es ponerlo suavemente.

Supongo que tengo que hacer algo de autounificación en la tabla de campos, pero me estoy haciendo un nudo.

¿Alguien tiene alguna idea?

¿Fue útil?

Solución

En ninguno de los casos, debe intentar consultar usted mismo la base de datos de Sitecore. La base de datos cambia con el tiempo y esto rompería su código. En su lugar, utilice el Item.Fields . Esta es una colección que contiene todos los campos necesarios. Si desea asegurarse de que todos los campos estén cargados (realmente cargados, no cargados perezosamente), puede usar Item.Fields.ReadAll ().

Editar: Además, tenga en cuenta que las consultas no le permiten construir un Artículo, por lo que omite el comportamiento de los valores predeterminados y no utiliza el almacenamiento en caché inteligente de Sitecore en absoluto.

Otros consejos

Intente llamar a Sitecore.Context.Item.Fields.ReadAll () antes de buscar un campo.

Primer intento, pero no devuelve todos los campos

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

Al llamar al ítem. Campos. Obtiene los campos de ítem que ha designado en sus plantillas, así como los campos estándar de Sitecore que existen en todos los ítems. Utilice el código a continuación si solo desea los campos que ha definido en sus plantillas. Por supuesto, esto supone que los nombres de sus campos no comienzan 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);
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top