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?

Foi útil?

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);
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top