¿Puedo obtener todos los campos en un elemento (en Sitecore)?
-
05-07-2019 - |
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?
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);
}
}