Si vous avez déjà manipulé les bibliothèques de documents, vous avez sans nul doute déjà utilisé la fonctionnalité de checkin/checkout (Extraction/Archivage en bon français) pour verrouiller l'accès en écriture d'un document.
Mais saviez-vous qu'il existe un check-out temporaire aussi appelé "Short Term" ? En effet, vous l'avez peut-être déjà remarqué, lorsque vous ouvrez un document Office déjà ouvert par quelqu'un d'autre un message d'avertissement apparaît :
Et si je demande d'avoir la notification de la disponibilité du document, j'obtiens alors ce message :
Mais comment Office sait-il qu'il y a déjà quelqu'un en train d'éditer le document ?
Si on commence par faire un tour dans l'API, on trouve différentes propriétés autour des problématiques de Check-out au niveau des fichiers gérés par SharePoint (classe "SPFile"):
On peut remarquer qu'il y a une date d'expiration pour les check-out "short term". De plus, le status est une énumération dont les valeurs sont les suivantes :
Et bien en fait il existe un système de verrouillage à court terme utilisé par certaines applications et basé sur l'ajout de quelques méta données masquées. En effet, sachez qu'il existe un ensemble de propriétés attachées aux documents et qui ne sont pas forcément mappés aux colonnes de site. Ces propriétés sont accessibles au niveau de la class SPFile via la propriété "Properties" qui n'est rien d'autre qu'une HashTable.
Voici ce que donnent ces informations pour un fichier "normal" :
Voici les informations pour un fichier en checkout standard ("long term") :
Voici les informations pour un fichier en checkout temporaire ("short term") :
Il existe donc une propriété stipulant la date d'expiration de mon checkout. Le temps de verrouillage diffère selon les applications, cf. http://blogs.technet.com/harikumh/archive/2008/05/28/check-out-feature-of-sharepoint-2007.aspx, soit 10mn pour Office 2003, soit 60mn pour Office 2007. De plus l'application régulièrement renvoyer le lock sans quoi celui-ci sera retiré arrivé à la date d'expiration (http://wss.collutions.com/Lists/FAQ/DispForm.aspx?ID=149).
Mais comment font donc ces applications pour utiliser ce mécanisme ? En effet, il n'existe rien de tel côté modèle objet (la méthode CheckOut() ne fait qu'un "long term" checkout)... Et bien la réponse vient du côté du protocole Remote Procedure Call.
En effet, SharePoint supporte 2 jeux de méthodes, celles propres aux Windows SharePoint Services et celles des extensions serveur FrontPage.
Et c'est dans ces dernières qu'on trouve la méthode "checkout document" : http://msdn.microsoft.com/en-us/library/ms437509.aspx
On y trouve plusieurs paramètres :
- service_name : paramètre obsolète représentant l'url d'appel
- document_name : l'url relative du document par rapport au site (par exemple "Shared Documents/MyDoc.docx")
- force : 0 (valeur par défaut) ou 1, 1 permettant de déverrouiller un fichier (undo checkout)
- timeout : valeur en minute du temps du checkout à court terme
- validateWelcomePages : inutile ici
Pour l'utiliser, voici un petit bout de code. Tout d'abord se faire une méthode permettant l'appel en RPC de nos méthodes :
L'objectif ici est d'appeler l'url http://[server]/[sitename]/_vti_bin/_vti_aut/author.dll et de passer les bons paramètres en POST.
Ensuite on appelle cette méthode en passant les paramètres adéquats c'est-à-dire l'url du site contenant le fichier à verrouiller (webUrl) et l'url relative du fichier (fileUrl) :
Le tour est joué !
Si vous voulez récupérer le code, voici un petit projet Console pour Visual Studio 2008 à télécharger.
Gat, SPRPC (mais comme le checkout, pas trop longtemps quand même ;))