jeudi 27 mai 2010

MOSS 2007 – Récupération d’une valeur unique ou multiple d’un profil utilisateur

Récupérer une valeur unique ou multiple depuis un profil utilisateur ne ce fait pas de la même manière. Voici un petit code d’exemple :

if (Profile[this.UserProfilePropertyName].Count == 1)
return Profile[this.UserProfilePropertyName].Value.ToString();
else
{
StringBuilder ret = new StringBuilder("");
UserProfileValueCollection values = Profile[this.UserProfilePropertyName];
System.Collections.IEnumerator allValues = values.GetEnumerator();
while(allValues.MoveNext())
{
ret.Append(allValues.Current.ToString());
ret.Append(";");
}
return ret.ToString();
}

Source : http://www.sharepoint-tips.com/2008/01/getting-user-profile-values-that.html

samedi 22 mai 2010

SPS 2010 - Formation Sharepoint 2010

Deux liens utiles pour s'auto former sur sharepoint 2010 :

Advanced developer Training : http://msdn.microsoft.com/en-us/sharepoint/ff420377.aspx



Developper sous sharepoint 2010 - Getting Started : http://msdn.microsoft.com/fr-fr/sharepoint/ee513147.aspx
 
Je recommande la lecture du premier lien avant de faire le getting started. Le second lien étant purement technique, l'apport en connaissance est très amoindri si on a pas fait le premier.

jeudi 20 mai 2010

MOSS 2007 – Récupérer tous les dossiers et sous-dossiers d’une liste SharePoint


Dans cet article nous allons voir comment lister tous les
dossiers et sous dossiers d’une Document Library ou d’une liste.

La manière simple, en utilisant une SPQuery
et en modifiant le ViewAttributes.

Voir l’exemple suivant :

SPSite site = SPContext.Current.Site;

SPWeb web = SPContext.Current.Web;

SPList list = web.Lists["Shared
Documents"
];


SPQuery query = new SPQuery();


//Condition
query.Query = “<Where><Eq><FieldRef
Name=’FSObjType’/><Value
Type=’Lookup’>1</Value></Eq></Where>”
;


 query.ViewAttributes = “Scope=’RecursiveAll’”;


SPListItemCollection items = list.GetItems(query);


string folderDetails=“”;


//Get the name and Url for the folder
foreach (SPListItem item in items)
{
folderDetails += “Folder Name:” + item.Name + “<br/>Folder
URL:”
+ web.Url + “/” + item.Url + “<br/>”;

}


Dans la propriété Query du SPQuery il faut mettre la condition FSObjType
égal à 0. C’est le type des dossiers, les Items et Documents sont à 1.

Pour le passage récursif modifier : Scope=RecusirveAll .

Source : http://ktskumar.com/blog/2009/07/10/retrieve-all-folders-from-list/

jeudi 13 mai 2010

MOSS 2007 - RunWithElevatedPrivileges dans les event handler

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

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/

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('/');

var lists = new SPAPI_Lists(urlparts[0] + '//' + urlparts[2]+'Liens vers la
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,'');

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);
}

//update item dans la liste
var res = lists.quickUpdateListItem('Informations
Riches'
, { ID: ItemId, Videos_x0020_Hits: MyVal } );

if (res.status == 200)
{
//alert('The list item was
updated.');
}
else
{
//alert('There was an error: ' +
res.statusText);
}

}