mai
2009
Voila, un peu plus d’un mois après le premier post sur le sujet, un un second petit post sur la base de contenu de WSS.
Apres avoir vu la structure des Sites, des Webs et des Utilisateurs, on va jeter un oeil sur les groupes de nos utilisateurs, ainsi que sur leurs alertes.
En effet, dans sa version 3, Sharepoint a restreint a 2 le nombre de table nécessaire pour la gestion des groupes (contre 4 auparavant, avec une distinction des groupes sites et des groupes web…)
La table des groupes contient tous les groupes déclarés dans l’application Web. Elle va principalement contenir l’UniqueId du Site auquel le groupe est rattache, l’id du groupe, son nom, une description, l’id du propriétaire du groupe, et l’email permettant d’envoyer une requête pour rejoindre ce groupe.
Cette table des groupes en elle-même ne sert a rien. en effet, pour pouvoir être utilisée, elle est liée a la table Users par la table GroupMembership, qui détermine les appartenances des utilisateurs aux groupes. GroupMembership est juste une table d’intersection, et contient juste l’identifiant du site, l’identifiant de l’utilisateur, et l’identifiant du groupe.
Attention, l’ID des groupes et des utilisateurs n’est unique que pour un site donné !!!
Les tables SchedSubscriptions et ImmedSubscriptions sont quasiment identiques, la table SchedSubscriptions contenant juste trois champs supplémentaires, permettant de gérer la fréquence de notification (NotifyFreq), ainsi que l’heure de prochaine notification, selon le fuseau horaire du serveur (NotifyTime), et en Temps universel coordonné (NotifyTimeUTC).
On va pouvoir, en partant de ces tables, effectuer, par exemple, les requêtes suivantes:
FROM SchedSubscriptions WITH (NOLOCK) INNER JOIN
UserInfo WITH (NOLOCK) ON SchedSubscriptions.UserId = UserInfo.tp_ID AND
SchedSubscriptions.SiteId = UserInfo.tp_SiteID
Where SchedSubscriptions.Deleted = 0
UNION
SELECT Id, tp_Login, 0, (SiteUrl+WebUrl) AS URL, ListTitle, AlertTitle, AlertType, Status
FROM ImmedSubscriptions WITH (NOLOCK) INNER JOIN
UserInfo WITH (NOLOCK) ON ImmedSubscriptions.UserId = UserInfo.tp_ID AND
ImmedSubscriptions.SiteId = UserInfo.tp_SiteID
WHERE ImmedSubscriptions.Deleted = 0
Cette requête va nous donner toutes les alertes actives pour tous les utilisateurs de nos sites
FROM GroupMembership WITH (NOLOCK) INNER JOIN
Groups WITH (NOLOCK) ON GroupMembership.SiteId = Groups.SiteId INNER JOIN
UserInfo WITH (NOLOCK) ON GroupMembership.SiteId = UserInfo.tp_SiteID
Cette requête retournera tous les utilisateurs définis, ainsi que leur groupes
Attention, a ne pas utiliser telle quelle…Chez moi, sur un environnement avec une 50aine de sites, la requête ci-dessus renvoie plus de 180 000 enregistrements
Il vaut mieux, si vous utilisez ce genre de requête, se limiter a un site donné….ce qui n’est pas si simple.
En effet, le site en lui-même n’a pas une représentation facile a déterminer…car l’url « du site » est en fait l’Url du Web de niveau supérieur (pour ceux qui ne suivent pas, retournez au premier article )
Pour trouver tous les utilisateurs définis sur un site donne, dont on á, par exemple, l’url, on va faire:
Webs.Title AS WebTitle, FullUrl
FROM Webs INNER JOIN
GroupMembership WITH (NOLOCK) INNER JOIN
Groups WITH (NOLOCK) ON GroupMembership.SiteId = Groups.SiteId INNER JOIN
UserInfo WITH (NOLOCK) ON GroupMembership.SiteId = UserInfo.tp_SiteID ON Webs.SiteId = GroupMembership.SiteId
WHERE Webs.ParentWebId IS NULL
AND Webs.FullUrl=‘URL DE MON SITE PARENT’
Voila, doucement, mais surement, ca avance, il reste..euh…40 tables ??? (je ne les ferais pas toutes )
Ah, et, oui, si vous détruisez votre site SharePoint par mégarde, ne me tenez pas pour responsable (on rappelle, pas d’insert, pas d’update, pas de delete)
Articles récents
Archives
- janvier 2014
- septembre 2013
- août 2013
- mai 2013
- avril 2013
- janvier 2013
- août 2012
- juin 2012
- mai 2012
- avril 2012
- mars 2012
- novembre 2011
- septembre 2011
- août 2011
- juillet 2011
- juin 2011
- mai 2011
- avril 2011
- février 2011
- janvier 2011
- novembre 2010
- octobre 2010
- septembre 2010
- août 2010
- juillet 2010
- juin 2010
- mai 2010
- avril 2010
- mars 2010
- février 2010
- janvier 2010
- décembre 2009
- novembre 2009
- octobre 2009
- septembre 2009
- août 2009
- juillet 2009
- juin 2009
- mai 2009
- avril 2009
- mars 2009
- février 2009
- janvier 2009