La méthode RunWithElevatedPrivileges est l’ami du développeur SharePoint. Elle permet de nous attribuer des droits là où l’utilisateur courant n’en dispose pas. De l’impersonification classique.
Dans les webparts tout va bien. Par contre, dans les event handler, dans certains cas, il est possible d’avoir l’erreur suivante : « […] threw an exception of type 'System.UnauthorizedAccessException’ »
En effet, il est obligatoire de créer les objets dans un SPSite car les objets créés en dehors n’auront pas le droit “Full control”, même si ils sont dans un délégué. Le plus simple est de combiner l’utilisation du mot « using » et des « properties » de l’event handler à l’intérieur de l’impersonification.
Voir l’exemple si dessous :
using (SPSite theSite = new SPSite(properties.OpenWeb().Site.ID)) {...}
Source : Dernier paragraphe de http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsecurity.runwithelevatedprivileges.aspx
(Et oui c’est pour ça que l’erreur est fréquente…), et les commentaires du post suivant : http://www.sharepoint-tips.com/2007/03/event-handler-impersonation-continued.html
Un espace où je partage mes expériences sur les technologies Microsoft (Asp.Net, MOSS, WSS, C#, VB.NET, Silverlight, WPF, WCF,...)
jeudi 13 mai 2010
jeudi 6 mai 2010
MOSS 2007 - Accèder au SPUser depuis un SPFieldUser
Le username est stocké au format 1# ;username. Pour y accèder plus facilement voici un exemple avec une tasklist :
using (SPSite site = new SPSite(“http://mysharepointsite.com”))
{
using (SPWeb web = site.OpenWeb())
{
SPList taskList = web.Lists["SampleTaskList"];
SPListItem taskListItem = taskList.Items[0];
SPFieldUser assignedTo = (SPFieldUser) taskListItem.Fields[SPBuiltInFieldId.AssignedTo];
SPFieldUserValue user= (SPFieldUserValue)assignedTo.GetFieldValue(taskListItem[SPBuiltInFieldId.AssignedTo].ToString());
SPUser userObject = user.User;
}
}
Source : http://nehasinha.wordpress.com/2008/03/28/accessing-the-spuser-from-spfielduser/
using (SPSite site = new SPSite(“http://mysharepointsite.com”))
{
using (SPWeb web = site.OpenWeb())
{
SPList taskList = web.Lists["SampleTaskList"];
SPListItem taskListItem = taskList.Items[0];
SPFieldUser assignedTo = (SPFieldUser) taskListItem.Fields[SPBuiltInFieldId.AssignedTo];
SPFieldUserValue user= (SPFieldUserValue)assignedTo.GetFieldValue(taskListItem[SPBuiltInFieldId.AssignedTo].ToString());
SPUser userObject = user.User;
}
}
Source : http://nehasinha.wordpress.com/2008/03/28/accessing-the-spuser-from-spfielduser/
mardi 4 mai 2010
MOSS 2007 - Travailler avec une liste coté client
Un client m’a demandé un script pour comptabiliser des cliques sur des vidéos. Le tout devant être fait coté client. Les données devant être stockées dans des items d’une liste SharePoint.
La solution pour laquelle j’ai opté et l’utilisation d’un Framework JavaScript/jQuery (SPAPI) me permettant de requêter facilement les WebServices SharePoint.
Vous trouverez en annexe de l’article le Framework et un lien vers ce Framework.
L’utilisation est très simple. J’ai commencé par inclure les fichiers js contenant le code dont j’ai besoin. Ensuite à l’aide d’un tutorial sur ce Framework j’ai rédigé un petit bout de code. Je mets celui-ci à titre d’exemple. C’est une modification des exemples fournis sur le tutorial.
La référence "Videos_x0020_Hits" est le static name du champ (Field) de l’item que je veux mettre à jour. L’id estl’identifiant de l’item dans la liste.
Include des fichiers :
<script type="text/javascript" src="/Ressources/scripts/SPAPI/SPAPI_Core.js"></script>
<script type="text/javascript" src="/Ressources/scripts/SPAPI/SPAPI_Lists.js"></script>
Code source :
//Permet de compter le nombre de click sur les videos sur la home page
//Utilise le framework javascript SPAPI
//Fichier du framework requis pour ce script :
//SPAPI_Core.js
//SPAPI_Lists.js
function UpdateVideosHits(ItemId)
{
//init
var url=""+window.location;
var urlparts =
url.split('/');
url.split('/');
var lists = new SPAPI_Lists(urlparts[0] + '//' + urlparts[2]+'Liens vers la
sous collection de site voulue')
sous collection de site voulue')
//get item : récupère la derniere valeur connu pour l'item
var items = lists.getListItems('Informations
Riches','','<Query><Where><Eq><FieldRef
Name="ID" /><Value Type="Counter">'+ItemId+'</Value></Eq></Where></Query>','<ViewFields><FieldRef Name="Videos_x0020_Hits"/></ViewFields>',1,'');
Riches','','<Query><Where><Eq><FieldRef
Name="ID" /><Value Type="Counter">'+ItemId+'</Value></Eq></Where></Query>','<ViewFields><FieldRef Name="Videos_x0020_Hits"/></ViewFields>',1,'');
if (items.status == 200)
{
var rows = items.responseXML.getElementsByTagName('z:row');
var MyRes = rows[0].getAttribute("ows_Videos_x0020_Hits");
//Mise à jour de la valeur
var MyVal = 1;
if(!(MyRes == null))
{
MyVal = parseInt(MyRes);
MyVal = MyVal + 1;
}
}
else
{
//alert('There was an error while
getting item : ' + res.statusText);
getting item : ' + res.statusText);
}
//update item dans la liste
var res = lists.quickUpdateListItem('Informations
Riches', { ID: ItemId, Videos_x0020_Hits: MyVal } );
Riches', { ID: ItemId, Videos_x0020_Hits: MyVal } );
if (res.status == 200)
{
//alert('The list item was
updated.');
updated.');
}
else
{
//alert('There was an error: ' +
res.statusText);
res.statusText);
}
}
Source : http://darrenjohnstone.net/download/12/
http://darrenjohnstone.net/2008/07/22/examples-for-the-sharepoint-and-office-live-javascript-api/#topic-10
http://darrenjohnstone.net/2008/07/22/examples-for-the-sharepoint-and-office-live-javascript-api/#topic-10
Framework : SPAPI_Javascript_1_0_1.zip
Inscription à :
Commentaires (Atom)