Posso obter todos os campos em um item (em Sitecore)?
-
05-07-2019 - |
Pergunta
Eu estou tentando escrever uma consulta SQL para obter todos os campos em um determinado item em Sitecore.
Para dizer que estou preso é colocar o mínimo.
Eu estou supondo que eu tenho que fazer alguma auto ingressar na tabela de campos, mas eu estou recebendo-me em nós.
Alguém tem alguma idéia?
Solução
Em nenhum dos casos, você deve sempre tentar consultar o banco de dados Sitecore si mesmo. O banco de dados muda ao longo do tempo e isso iria quebrar seu código. Em vez disso, utilizar o Item.Fields
. Esta é uma coleção que contém todos os campos necessários. Se você quiser ter certeza de que todos os campos são carregados (realmente carregado, não preguiçoso carregado), que você pode usar Item.Fields.ReadAll ().
Edit:. Além disso, mantenha em mente que a consulta não permite que você construa um item, para que perca o comportamento dos valores padrão e não usar o cache inteligente Sitecore em tudo
Outras dicas
Tente chamar Sitecore.Context.Item.Fields.ReadAll()
antes de olhar para um campo.
primeira tentativa, mas não retorna todos os 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
Ao chamar item.Fields você obtém os campos de itens que você designou em seus modelos, bem como os campos padrão Sitecore que existem em todos os itens. Use o código abaixo, se você quiser apenas os campos que você definiu em seus modelos. Claro, isso pressupõe os nomes de campos não começar com "__"
// 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);
}
}