Professional Documents
Culture Documents
Dans cet article, on va voir comment lister les utilisateurs d'un site SharePoint, ainsi que
comment utiliser le contrle PeopleEditor pour ajouter ou modifier un utilisateur existant.
I - Introduction..............................................................................................................................................................3
II - Premire version du contrle.................................................................................................................................3
III - Introduction du PeopleEditor.................................................................................................................................5
III.1 - Les proprits importantes du PeopleEditor................................................................................................ 5
III.2 - Ajout d'un champ de type PeopleEditor.......................................................................................................6
IV - Sauvegarde / modification d'un utilisateur existant.............................................................................................. 6
V - Fonctionalites "avances" du PeopleEditor...........................................................................................................7
V-1 - Rcupration de donnes supplmentaires................................................................................................. 7
V-2 - Appel de JavaScript aprs rsolution AD.....................................................................................................8
VI - Remerciements................................................................................................................................................... 10
-2Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright 2013 Philippe Vialatte. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://philippe.developpez.com/articles/SharepointPeopleEditor/
I - Introduction
La version 3 de Windows SharePoint Services contient une mine de nouveaux contrles trs intressants. Au nombre
de ces contrles, le PeopleEditor est, mon avis, un des plus sympathiques avoir dans notre boite outils.
Pour les besoins de l'article, on va dvelopper un petit contrle permettant de lister les utilisateurs, d'diter leurs
informations, et d'ajouter des utilisateurs SharePoint.
Classiquement, on l'utilisera ds que notre workflow, webpart ou page web ncessitera de slectionner une ou
plusieurs personnes de faon dterministe (comprendre, en ayant une garantie que la personne slectionne existe
bel et bien).
Le dveloppement est fait sur une machine avec WSS install en local, et avec un utilisateur administrateur de liste.
Pour gagner un peu de temps, les dveloppements sont faits sous forme de user control, et chargs dans
SharePoint par le biais de la SmartPart (voir http://lefortludovic.developpez.com/tutoriels/sharepoint/smartpart/ pour
une explication sur la SmartPart).
Pour raliser cette interface, on va crer un fichier ManageUsers.ascx dans un site web, ainsi que le fichier
ManageUsers.ascx.cs correspondant pour le code-behind.
-3Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright 2013 Philippe Vialatte. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://philippe.developpez.com/articles/SharepointPeopleEditor/
Une fois ce fichier cr, on va coder notre petite interface, ainsi que le code-behind permettant, lorsque l'on
slectionne un utilisateur, d'afficher, dans les textbox correspondantes, le nom, les informations de login, mail et les
notes correspondant l'utilisateur.
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ManageUsers.ascx.cs"
Inherits="ManageUsers" %>
<table>
<tr>
<td>
Users :
</td>
<td>
<asp:DropDownList ID="dropUsers" AutoPostBack="true"
OnSelectedIndexChanged="dropUsers_SelectedIndexChanged" runat="server" /></td>
</tr>
<tr>
<td>
Name :
</td>
<td>
<asp:TextBox ID="tbName" runat="server" /></td>
</tr>
<tr>
<td>
Login :
</td>
<td>
<asp:TextBox ID="tbLogin" runat="server" /></td>
</tr>
<tr>
<td>
Mail :
</td>
<td>
<asp:TextBox ID="tbMail" runat="server" /></td>
</tr>
<tr>
<td>
Notes :
</td>
<td>
<asp:TextBox ID="tbNotes" TextMode="MultiLine" Rows="3" runat="server" /></td>
</tr>
</table>
Maintenant, le code-behind :
using
using
using
using
System;
System.Web.UI;
System.Web.UI.WebControls;
Microsoft.SharePoint;
http://philippe.developpez.com/articles/SharepointPeopleEditor/
if (!string.IsNullOrEmpty(dropUsers.SelectedValue)) {
LoadUser(Convert.ToInt32(dropUsers.SelectedValue));
}
Le code en lui-mme ne pose pas de relles difficults, on va tout de mme revenir sur la seule ligne concernant
SharePoint pour le moment (ne vous inquitez pas, a ne va pas durer...), savoir:
foreach (SPUser user in SPContext.Current.Web.SiteUsers)
Ici, il faut noter que l'on demande SharePoint la liste des utilisateurs avec la proprit SiteUsers, et non pas Users.
En effet, SiteUsers renvoie la liste des utilisateurs ayant des droits d'accs au site en question, tandis que Users
ne renvoie que les utilisateurs que l'on a explicitement associs au site (en les ajoutant au groupe des visiteurs,
membres ou propritaires du site). De faon plus concrte, imaginons que l'utilisateur domaine\pvialatte existe dans
SharePoint, et que le site site1 contienne le groupe Everyone dans ses visiteurs.
(Vous me suivez toujours, hein ?)
SiteUsers contiendra la fois Everyone et domaine\pvialatte, mais Users ne contiendra qu'Everyone.
C'est le genre de petite diffrence entre deux proprits qui a tendance envoyer les dveloppeurs l'asile...
-5Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright 2013 Philippe Vialatte. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://philippe.developpez.com/articles/SharepointPeopleEditor/
Puis, on va ajouter notre PeopleEditor, avec un jeu de proprits minimal (une seule slection, de type utilisateur).
<wssawc:PeopleEditor MultiSelect="false" ID="tbUser" SelectionSet="User" runat="server" />
Ct client, c'est tout ce qu'il y a faire...Par contre, ct serveur, il va falloir utiliser le mcanisme de rsolution de
login du PeoplePicker pour pouvoir afficher notre utilisateur.
SPUser user = web.SiteUsers.GetByID(userId);
PickerEntity pe = new PickerEntity();
pe.Key = user.LoginName;
ArrayList entityArrayList = new ArrayList();
entityArrayList.Add(pe);
tbUser.ResolvedEntities.Clear();
tbUser.UpdateEntities(entityArrayList);
tbUser.Validate();
En effet, le seul moyen d'effectuer une rsolution d'une entit est de la passer au PeoplePicker l'intrieur d'une
ArrayList d'entits. A noter, il n'est pas ncessaire de passer la proprit loginname, il est possible de passer un mail
ou le nom et prnom de l'utilisateur.
Aprs ces modifications, notre contrle ressemble a :
-6Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright 2013 Philippe Vialatte. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://philippe.developpez.com/articles/SharepointPeopleEditor/
S'il existe dj, rcuprer l'utilisateur, et mettre jour son nom, ses notes et son email. Son login ne peut pas
tre modifi. En effet, c'est la proprit qui permet de relier un compte Windows un compte SharePoint.
Cette proprit est donc en lecture seule.
S'il n'existe pas, insrer le nouvel utilisateur dans la liste des utilisateurs de SharePoint.
web.AllowUnsafeUpdates = unsafeUpdateAllowed;
Ces lignes vont nous permettre de faire la mise jour ou l'insertion. En effet, au niveau du modle de scurit de
SharePoint, il n'est pas possible, par dfaut, de faire une mise jour pendant une requte GET, ce qui est notre
cas actuellement.
PickerEntity objEntity = (PickerEntity)tbUser.ResolvedEntities[0];
Pour rcuprer des donnes depuis notre PeopleEditor, il est important de se rappeler qu'un PeopleEditor affiche en
fait une liste d'entits. On va, dans notre cas, rcuprer uniquement la premire de ces entits, mais dans le cas o
on voudrait grer plusieurs utilisateurs, on devrait traiter indpendamment chaque utilisateur.
-7Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright 2013 Philippe Vialatte. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://philippe.developpez.com/articles/SharepointPeopleEditor/
Ces informations sont ensuite transmises dans le code-behind, dans le champ EntityData des entits rsolues, et
peuvent ensuite tre manipules directement.
Dans le cas o on voudrait entrer les donnes Active Directory de l'utilisateur slectionn, on pourrait rcrire le
code ci-dessus ainsi :
PickerEntity objEntity = (PickerEntity)tbUser.ResolvedEntities[0];
String loginName = objEntity.Key;
String name = objEntity.DisplayText;
String notes = string.Empty;
String email = string.Empty;
if (objEntity.EntityData.ContainsKey("Department")){
notes = "Departement : " + objEntity.EntityData["Department"];
}
if (objEntity.EntityData.ContainsKey("Email")){
email = objEntity.EntityData["Email"];
}
Rien ne vous garantit que les donnes de mail ou de dpartement, soient bien remplies ct Active Directory.
-8Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright 2013 Philippe Vialatte. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://philippe.developpez.com/articles/SharepointPeopleEditor/
Et, dans notre page ascx, on va ajouter le code ncessaire l'appel Ajax. Je ne vais pas dtailler la logique derrire
cet appel, c'est un appel assez standard l'objet XMLHttp, assez bien document sur Internet.
function AjaxCall(fichier){
if(window.XMLHttpRequest) // FIREFOX
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // IE
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else return(false);
xhr_object.open("GET", fichier, false);
xhr_object.send(null);
if(xhr_object.readyState == 4)
return(xhr_object.responseText);
else
return(false);
Finalement, il ne nous reste plus qu' ajouter un appel GetUserNotes. Ce n'est en fait pas si facile, car le
PeoplePicker ne nous donne pas de moyen simple et rapide pour retrouver le contenu des entits rsolues...
Aprs avoir fouill droite gauche dans le DOM, on s'aperoit que la donne que l'on cherche se trouve dans un
span, lui-mme dans une div, dont l'id est l'id du contrle PeopleEditor, suffix par _upLevelDiv.
Un moyen commun Firefox et Internet Explorer de rcuprer le login de l'utilisateur rsolu est donc:
document.getElementById('<%= tbUser.ClientID %>_upLevelDiv').childNodes[0].getAttribute('title');
On va donc crer (encore !) une nouvelle fonction dans notre fichier ascx
function GetUserNotes(){
var login = document.getElementById('<
%= tbUser.ClientID %>_upLevelDiv').childNodes[0].getAttribute('title');
var fileName = "http://" + location.host + '/GetUserNotes.aspx?login=' + login;
var notesValue = AjaxCall(fileName);
document.getElementById('<%= tbNotes.ClientID %>').value = notesValue;
}
-9Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright 2013 Philippe Vialatte. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://philippe.developpez.com/articles/SharepointPeopleEditor/
VI - Remerciements
Merci SaumonAgile pour sa relecture.
- 10 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par
les droits d'auteur. Copyright 2013 Philippe Vialatte. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://philippe.developpez.com/articles/SharepointPeopleEditor/