CAML Query – Récupérer les éléments non-assigné à moi ou un de mes groupes

SP2013


Bonjour à tous,

Il y a quelques temps, j’ai fait un post récapitulatif sur « Comment afficher les éléments assignés à moi ou à un de mes groupes »

Cette requête utilise le paramètre « membership » afin de récupérer les groupes de l’utilisateur courant. Cependant, il y a quelques temps, une demande a été faite sur les forums msdn pour la requête inverse ! À savoir, récupérer les éléments n’étant pas assigné ni à l’utilisateur courant ni à l’un de ses groupes !

Après avoir faire plusieurs tests, je n’ai pas trouvé d’attribut concluant et je me suis tourné vers une solution de création dynamique de query.

Voilà ce que ça donne



SPQuery query = new SPQuery();

query.Query = CreateQuery(web.SiteGroups);

.....

string CreateQuery(SPGroupCollection groups)

{

string queryToReturn = "<Where>";

int countAnd = 0;

List<string> listGroupName=new List<string>();

//Get list of group Name and count the number

foreach (SPGroup group in groups)

{

if (group.ContainsCurrentUser)

{

listGroupName.Add(group.Name);

countAnd++;

}

}

//If there is a least one group where the current user is in, we will need an 'And' and to add all the possibilities

if (countAnd > 0)

{

queryToReturn += "<And>";

for (int i = 0; i < countAnd - 2; i++)

{

queryToReturn += string.Format(@"<And><Neq><FieldRef Name='BelongsTo'/><Value Type='User'>{0}</Value></Neq>", listGroupName[i].ToString());

}

queryToReturn += string.Format(@"<Neq><FieldRef Name='BelongsTo'/><Value Type='User'>{0}</Value></Neq>", listGroupName[countOr - 1].ToString());

for (int i = 0; i < countAnd  - 2; i++)

{

queryToReturn += @"</And>";

}

}

queryToReturn += @"<Neq><FieldRef Name='BelongsTo'/><Value Type='Integer'><UserID/></Value></Neq>";

//Close the And tag if needed

if (countAnd > 0)

{

queryToReturn += "</And>";

}

queryToReturn += "</Where>";

return queryToReturn;

}

Quelques explications :

Cette fonction va faire une vérification de l’ensemble des groupes de la collection, si l’utilisateur est présent dans le groupe, un compteur est incrémenté et le nom du groupe est sauvegardé dans une liste. La query est ensuite créée sur base de ces éléments.

En espérant que ça aide !

Christopher

Cet article, publié dans SharePoint 2007, SharePoint 2010, SharePoint 2013, est tagué , . Ajoutez ce permalien à vos favoris.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s