Avant de passer à l'exemple, il faut savoir une dernière chose. En CAML, il est possible d'effectuer des jointures de type INNER ou de type LEFT. La différence entre ces deux types de jointures est très importante. Nous verrons cela lors de l'explication de notre exemple. Revenez donc dans
Les jointures INNER et LEFT
votre classe et ajoutez la directive suivante :
using Microsoft.SharePoint;
Déclarez ensuite la fonction suivante :
private void AfficherMonumentEtVille(string type)
{
}
Le but de cette fonction sera d’afficher tous les monuments ainsi que les informations sur leur ville et leur pays. Le paramètre type va permettre de définir si la jointure sera de type LEFT ou INNER et nous permettra de comprendre la différence. La première chose à faire dans cette fonction est de récupérer une référence à la liste et de créer un objet SPQuery pour réaliser la requête :
SPList list = SPContext.Current.Web.Lists[« Monuments »];
SPQuery query = new SPQuery();
Nous allons nous baser sur la liste Monuments car ce sont les informations des monuments et les informations liées à ce monument que nous voulons récupérer. Nous allons maintenant définir la propriété Joins de la requête. C’est dans cette propriété que nous allons définir le format de la jointure. Nous allons directement afficher le code du Joins et nous l’expliquerons après :
Voir Code 3 ci-dessous.
Comme nous venons de le dire, la propriété Joins va permettre de contenir du code CAML indiquant comment la ou les jointures seront effectuées. Ici, pour commencer, nous n’allons effectuer qu’une seule jointure. En gros, nous allons joindre la table Monuments à la tableVilles grâce au champ Ville de la table monument. Ainsi, nous récupérerons les informations de chaque monument ainsi que les informations sur la ville dans laquelle se trouvent ces monuments.
Une jointure est donc introduite grâce à l’élément Join. Cet élément attend deux paramètres. Le premier se nomme Type et permet de définir le type de la jointure. La valeur de cet attribut peut soit être LEFT soit INNER. Nous verrons plus tard ce que cela représente. L’attribut ListAlias quant à lui va permettre de donner une « autre nom » à la table que nous joignons. Ici, la première table est bien entendu la table sur laquelle la requête sera exécutée, à savoir Monuments. Nous allons ensuite joindre la table Villes et nous lui donneront comme alias VillesList.
Nous devons ensuite tester l’égalité. Pour cela, nous utiliserons donc l’élément Eq pour introduire la comparaison. Cet élément doit alors contenir deux éléments FieldRef qui serviront chacun à quelque chose de bien précis. Le premier FieldRef va permettre d’indiquer quel champ dans la première liste (Monuments) contiendra la référence à la deuxième liste (Villes). Ce champ doit obligatoirement être unLookup. Ici, nous indiquons donc que le nom du champ est Ville (étant le nom du Lookup de la liste Monuments). Nous ajoutons ensuiteRefType=’Id’ pour indiquer que la comparaison sera faite sur l’id que ce champ contient. Effectivement, un champ de type Lookup contient une référence vers l’élément cible sous forme de « ID;#Valeur ». RefType=’Id’ permet donc de faire la comparaison avec l’ID.
Le deuxième élément FieldRef va nous permettre d’indiquer le champ dans la deuxième liste auquel sera comparée la valeur du Lookup. Étant donné que nous extrayons l’ID du champ Lookup, nous ferons bien sur référence au champ ID de la liste Villes. Nous faisons donc passer l’alias de la liste Villes comme valeur de l’attribut List qui permet de spécifier à quelle liste appartient le champ auquel on fait référence. Nous indiquons enfin que nous récupérons le champ ID de cette liste pour effectuer la comparaison.
Et c’est tout, la jointure est effectuée. Mais il reste une question à se poser… A aucun moment nous avons défini que c’est avec la liste nommées Villes que nous ferons la jointure. Nous avons bien donné un alias à la deuxième liste (à savoir VillesList), mais à aucun moment nous n’avons indiqué clairement que la jointure sera effectuée avec la liste Villes. En fait, cela est dit implicitement. Effectivement, quand nous spécifions que la comparaison sera effectuée grâce au Lookup field Ville, la requête va directement « regarder » vers quelle liste ce champ pointe. Il va « voir » que c’est vers la liste Villes et c’est donc avec cette liste que la jointure sera effectuée.
Téléchargez cette ressource
Microsoft 365 Tenant Resilience
Face aux failles de résilience des tenants M365 (configurations, privilèges, sauvegarde). Découvrez 5 piliers pour durcir, segmenter et surveiller vos environnements afin de limiter l’impact des attaques. Prioriser vos chantiers cyber et améliorer la résilience de vos tenants Microsoft 365.
Les articles les plus consultés
- Et si les clients n’avaient plus le choix ?
- Partager vos images, vidéos, musique et imprimante avec le Groupe résidentiel
- Une baie de stockage c’est quoi ?
- Cybersécurité Active Directory et les attaques de nouvelle génération
- N° 2 : Il faut supporter des langues multiples dans SharePoint Portal Server
Les plus consultés sur iTPro.fr
- Redéfinir la confiance à l’ère de l’IA agentique : les entreprises sont-elles prêtes pour le SOC autonome ?
- IA Agentique : la vraie rupture c’est la gouvernance humaine
- Les défaillances des pipelines de données pèsent lourdement sur la performance des grandes entreprises
- Les nouvelles menaces liées à l’IA obligent les entreprises à dépasser la seule stratégie de sauvegarde
Articles les + lus
Analyse Patch Tuesday Mars 2026
Une nouvelle ère de la modernisation du mainframe
Communes, entreprises ? Non, face au RGAA 5, l’IA seule ne rendra pas vos sites accessibles
DevX Summit EMEA : les développeurs au cœur de la révolution de l’IA
Adapter la sécurité OT aux réalités de l’industrie
À la une de la chaîne Tech
- Analyse Patch Tuesday Mars 2026
- Une nouvelle ère de la modernisation du mainframe
- Communes, entreprises ? Non, face au RGAA 5, l’IA seule ne rendra pas vos sites accessibles
- DevX Summit EMEA : les développeurs au cœur de la révolution de l’IA
- Adapter la sécurité OT aux réalités de l’industrie
