2011-01-26 2 views
2

J'ai eu du mal avec ce code de requête Sitecore. Tous les éléments sont publiés, la requête fonctionne dans XPath Builder, mais elle retourne toujours 0 résultats dans le code derrière. J'ai copié ceci à partir d'échantillons de code dont personne d'autre ne s'est plaint et n'obtient toujours aucun résultat. J'ai essayé d'ajouter "query:" mais cela génère une erreur de syntaxe.Utilisation d'une requête Sitecore de travail dans le code derrière

string query = "/sitecore/content/ShrinersHospital2/CareAndTreatment//*[@@templatename = 'CareAndTreatmentType' and @TreatmentType = '{ECDBE944-99DE-4347-8FA2-6613FA85402C}']"; 

Item[] items = Sitecore.Context.Database.SelectItems(query); 

Répondre

5

Ce problème particulier concerne les problèmes de publication. L'élément interrogé a eu son modèle modifié et la publication incrémentielle n'a pas réussi à pousser les modifications correctement. Une publication intelligente a fait que le code commence à fonctionner.

On m'a également informé que quand quelque chose comme cela arrive, je devrais tester sur les deux bases de données en utilisant le code comme suit:

Database master = Factory.GetDatabase("master"); 
master.SelectItems(query); 

Database web = Factory.GetDatabase("web"); 
web.SelectItems(query); 
3

J'ai eu le même problème et trouvé la solution suivante:

Item[] items = Sitecore.Context.Database.SelectItems(query); 

Cela ne fonctionnera pas puisque votre code est exécuté dans le contexte (actuel) . Et le code est exécuté dans le chemin

/Sitecore/content/ShrinersHospital2/CareAndTreatment

Avec votre requête ci-dessus vous dire Sitecore à la recherche du chemin

/Sitecore/content/ShrinersHospital2/CareAndTreatment/sitecore/content/Hôpital Shriners2/CareAndTreatment

qui renverra 0 ite ms comme résultat, car le chemin n'existe pas.

Essayez la requête suivante:

string query = "//*[@@templatename = 'CareAndTreatmentType' and @TreatmentType = '{ECDBE944-99DE-4347-8FA2-6613FA85402C}']"; 
Item[] items = Sitecore.Context.Database.SelectItems(query); 

Lorsque vous allumez votre base de données « web », vous ne disposez pas d'un contexte et votre chemin « de départ » est /. Ensuite, le code renvoie ci-dessous les éléments avec votre requête, car le chemin existe

/Sitecore/content/ShrinersHospital2/CareAndTreatment

string query = "/sitecore/content/ShrinersHospital2/CareAndTreatment//*[@@templatename = 'CareAndTreatmentType' and @TreatmentType = '{ECDBE944-99DE-4347-8FA2-6613FA85402C}']"; 
var database = Sitecore.Configuration.Factory.GetDatabase("web"); 
items = database.SelectItems(query); 
Questions connexes