SharePoint 2007 : Envoyer automatiquement un document dans le Records Center
Date de publication : 23 janvier 2009
Par
Ludovic Lefort (Site web) (Blog)
Dans cet article, je vais présenter comment à l'aide d'une policy vous pouvez automatiser l'envoi de documents dans le record center de SharePoint
1. Introduction
2. Configuration du Records Center dans SharePoint
3. Le Records Center en deux mots ...
4. Création de l'event handlers
5. Création de la policy
6. Installation et utilisation de la policy
7. Références
8. Liens
9. Sources du projets
1. Introduction
Le Records Center est un template de site utilisable dans MOSS 2007. Il est destiné à stocker la version "officiel" d'un fichier.
Prenez l'exemple de groupes de travail travaillant sur plusieurs Team Site à la rédaction de documents. Une fois un de ceux-ci
terminé et approuvé, il est possible de l'envoyer vers le records centers.
2. Configuration du Records Center dans SharePoint
La configuration du records est assez simple, mais mérite quand même d'être décrite dans cet article.
La première chose à faire est de créer un nouveau site basé sur le template Records Center à l'intérieur de votre collection de sites.
A présent que le Records center est créé, vous devez configurer l'emplacement de son service web au niveau de votre ferme.
Pour cela rendez-vous dans la Central Administration de SharePoint. Dans l'onglet Applications Management, cliquez sur le lien Records Center
Vous voici maintenant sur la page de configuration, deux champs doivent être remplis : le premier contient le texte qui s'affichera dans le menu Send To du menu ECB.
Le deuxième contiendra l'URL vers le service web de votre Records Center. Il s'agit en fait de l'adresse du Records Center suivi de /_vti_bin/officialfile.asmx.
Par exemple : http://xxxxx/recordscenter/_vti_bin/officialfile.asmx
Une fois cette dernière opération effectuée, votre Records Center est prêt à être utilisé.
3. Le Records Center en deux mots ...
Le records center permet de stocker des versions "approuvées" de documents, il permet d'avoir un seul point de stockage pour les documents.
Quelque soit la source, les documents seront stockés au même endroit à l'intérieur de votre ferme.
De plus, vous pouvez sur base du Content Type définir un routage vers une document library spécifique.
Une demo vaut mieux qu'un long discours, créez donc un nouveau document dans une document library d'un site de votre ferme.
Ouvrez le menu contextuel et choisissez Send To, Records Center
Si votre configuration est correcte, vous avez du recevoir le message suivant :
Par défaut, tous les documents sont envoyés dans la Document Library Unclassified Records, dans un sous-répertoire .
Nous allons à présent voir comment ajouter un routage pour préciser la Document Library de destination en se basant sur le nom du Content Type.
La première étape sera donc de créer un Content Type que nous appelerons Contrat. Etant donné que le document sera copié de la liste originale vers le Records Center, il est évident que
le Content Type doit être accessible et attaché aux deux Document Library.
Création du Content Type :
Liez ensuite votre nouveau content type à la liste d'origine, dans votre Team Site
Créez à présent la Document Library de destination dans le Records Center, nous allons l'appeler Contrats étant donné qu'elle sera destinée à contenir tous les contrats.
Et ajoutez-lui le content type Contrat, comme pour la liste d'origine.
La dernière étape de cet exemple consiste à ajouter un nouveau routage dans le Records Center, ouvrez la liste Record Routing du Records Center et ajoutez un élément.
Le champ Title défini un titre visible dans la liste des routages. Le champ Location permet de désigner la Document Library de destination et le champ Aliases
définit une liste de Content Type réagissant à cette règle.
A partir de maintenant, tout les enregistrement de type Contrat envoyés dans le record center seront automatiquement routé vers la bibliothèque Contrats
4. Création de l'event handlers
L'objectif de notre event handler est d'envoyer automatiquement un document dans le records center lorsque celui-ci subit un check-in.
Pour cela créez un nouveau projet de type class library dans Visual Studio et appelez-le RecordCenterEventHandler
Ce projet fera référence à la library Microsoft.SharePoint.dll.
Ajoutez une classe dans votre projet que vous appelez ItemHandler, cette classe hérite de SPItemEventReceiver et surcharge la méthode ItemCheckedIn :
public class ItemHandler : SPItemEventReceiver
{
public override void ItemCheckedIn(SPItemEventProperties properties)
{
base.ItemCheckedIn(properties);
string outresult = "";
properties.ListItem.File.SendToOfficialFile(out outresult);
}
}
|
Comme vous pouvez le remarquer, ce code est relativement simple. Une seule ligne suffit à envoyer un fichier vers le service Web de Records center.
La variable outresult permet quant à elle de récupérer un message vous signalant si l'envoi s'est bien déroulé.
N'oubliez pas de signer votre projet afin de pouvoir au final le déployer dans la GAC de votre serveur.
5. Création de la policy
Tel quel notre event handler est déjà utilisable, il est tout à fait possible de le déployer dans la GAC du serveur et de l'attacher à une document library.
Cependant cela n'est pas vraiment pratique, l'idéal serait d'offrir la possibilité aux utilisateurs d'ajouter cette fonctionnalité à n'importe quelle bibliothèque de document.
Pour cela nous allons utiliser une policy
Créez un nouveau projet de type bibliothèque de classe et appelez-le RecordCenterPolicy et renommez sa classe en Policy.cs
Il faut ensuite ajouter deux références au projet : Microsoft.SharePoint et Microsoft.Office.Policy ainsi que deux clauses using : Microsoft.SharePoint et Microsoft.Office.RecordsManagement.InformationPolicy.
Vous voila prêt à entrer dans le vif du sujet .... le code.
Votre classe doit hériter de IPolicyFeature et implémenter une série de méthode :
public class Policy : IPolicyFeature
{
#region IPolicyFeature Members
void IPolicyFeature.OnCustomDataChange(PolicyItem policyItem, SPContentType ct)
{
}
void IPolicyFeature.OnGlobalCustomDataChange(PolicyFeature feature)
{
}
bool IPolicyFeature.ProcessListItem(SPSite site, PolicyItem policyItem, SPListItem listItem)
{
return true;
}
bool IPolicyFeature.ProcessListItemOnRemove(SPSite site, SPListItem listItem)
{
return true;
}
void IPolicyFeature.Register(SPContentType ct)
{
SPEventReceiverDefinition def = ct.ParentList.EventReceivers.Add();
def.Assembly = "RecordCenterEventHandler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=63d00638793ae332";
def.Class = "RecordCenterEventHandler.ItemHandler";
def.Name = "Envoi le document dans le record center";
def.Type = SPEventReceiverType.ItemCheckedIn;
def.SequenceNumber = 1000;
def.Update();
}
void IPolicyFeature.UnRegister(SPContentType ct)
{
if (ct != null)
{
foreach (SPEventReceiverDefinition def in ct.ParentList.EventReceivers)
{
if (def.Name == "Envoi le document dans le record center")
{
def.Delete();
break;
}
}
}
}
#endregion
}
|
Voyons en détail ce code, deux méthodes nous intéressent : Register etUnRegister. Elles sont respectivement appelées lors de l'activation / désactivation de
la policy sur une liste. La première enregistre l'event handler et la deuxième le supprime.
Pour obtenir le "nom fort" d'un assembly, j'utilise .net reflector.
Signez et compilez également ce projet, il sera également déployé dans la GAC.
Reste maintenant à créer notre fichier de définition, il s'agit d'un fichier XML que nous appelerons RecordCenterPolicy.xml
<?xml version="1.0" encoding="utf-8" ?>
<PolicyFeature id="RecordCenter" xmlns="urn:schemas-microsoft-com:office:server:policy">
<Name>Envoi le document dans le record center</Name>
<Description>Envoi le document dans le record center</Description>
<Publisher>Ludovic</Publisher>
<AssemblyName>RecordCenterPolicy, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c9d0e94dd89778f7</AssemblyName>
<ClassName>RecordCenterPolicy.Policy</ClassName>
</PolicyFeature>
|
Ce fichier permet de décrire la fonctionnalité et de la lier avec la librairie créée à l'étape précédente.
6. Installation et utilisation de la policy
Tous les composants nécessaires ont été créés, voyons maintenant comment les installer sur le serveur.
Première étape : déployer les deux dll (RecordCenterEventHandler.dll et RecordCenterPolicy.dll) dans la GAC.
Il faut ensuite ajouter notre policy à la liste des policy existantes, pour cela nous allons créer un nouvelle application console nommée RecordCenterInstall dont voici le code :
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();
doc.Load(@"[CheminVersLeFichier]\RecordCenterPolicy.xml");
PolicyFeatureCollection.Add(doc.InnerXml);
}
|
Ceci est une méthode de développement rapide et efficace dans un environnement de développement, il est évident que dans une déploiement professionnel il est recommandé d'utiliser
une feature, ce code peut être éxécuter lors l'activation de la feature par exemple.
Attention : étant donné que les policy sont définies au niveau de la ferme, le scope de votre feature doit être Farm
Testons à présent notre développement.
Allez dans les paramètres de n'importe quelle bibliothèque de documents et choisissez l'option Information Management Policy Settings
Choisissez ensuite Define a policy
Si les étapes précédentes se sont passées sans problème, vous devez voir votre Policy dans la liste. Cochez-la et cliquez sur OK
Voila c'est terminé ... essayer de faire un check-in sur un fichier de cette liste pour constater qu'il est automatiquement envoyé vers le Records Center
7. Références
8. Liens
9. Sources du projets
Les sources de cet exemple sont téléchargeables
ici.
Je tiens à remercier
Jeannot45 pour sa relecture.


Les sources présentées sur cette page sont libres de droits
et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ©
2009 Ludovic Lefort. Aucune reproduction,
même 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 intérêts.
Cette page est déposée.