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

}

Aucun commentaire:

Enregistrer un commentaire