DocumentID

SharePoint 2010 – Custom Feature DocumentID

Posted on

Dans ce billet, nous allons voir comment créer un Feature SharePoint, changer le mode de gestion du DocumentID dans une liste. Cela nous sert essentiellement si nous voulons changer le mode de génération par GUID d’un DocumentID en fonction du nôtre et reposant sur des nouvelles colonnes.

 

Etapes:

Dans votre projet SharePoint, Cliquez droit sur Feature et sélectionner ajouter une fonctionnalité

Puis dans Feature1.Feature, Sélectionner la portée en mode Site puis cliquez droit et ajouter un EvenReceiver.

Ajouter la références suivante dans le fichier EventReceiver: Microsoft.Office.DocumentManagement

Le code ci-dessous :

 

using System;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using Microsoft.Office.DocumentManagement;

//Event Receiver implementing the DocumentID  namespace CTIFLDocumentID.Features.FeatureCtifl
{
   [Guid("8419a2fe-bde2-467c-8c78-9afd9a5178b6")]
    public class FeatureCtiflEventReceiver : SPFeatureReceiver {
        public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {

            DocumentId.SetProvider(properties.Feature.Parent as SPSite,
            new CustomDocumentIdProvider());
        }
        public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
        {
            DocumentId.SetDefaultProvider(properties.Feature.Parent as SPSite);
        }

} }

Ajouter un nouvel élément > sélectionnez Class.cs et renommez en CustomIdDocumentProvider.cs

Le code en question :

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.Office.DocumentManagement;

//DocumentIdProvider Interface //Return the metadata 
namespace CTIFLDocumentID
{
   public class CustomDocumentIdProvider : DocumentIdProvider {
        public override bool DoCustomSearchBeforeDefaultSearch
        {
            get {
                //return false to try the SharePoint search first. 
 //return true to try GetDocumentUrlsById first. 
 return false;
            }
        }

        public override string GenerateDocumentId(Microsoft.SharePoint.SPListItem listItem)
        {
            //your own Document ID algorithm
 //return Guid.NewGuid().ToString()or with custom elements
 return listItem["AAA"].ToString() + "-" + listItem["BBB"].ToString() + "-" 
                  + listItem["CCC"].ToString() + "-" 
                  + listItem["DDD"].ToString() + "-" 
                  + listItem["EEE"].ToString() + "-" 
                  + listItem["FFF"].ToString();

        }

        public override string[] GetDocumentUrlsById(Microsoft.SharePoint.SPSite site, string documentId)
        {
            //Return an empty string array if you don't have any results. return new string[]{};

          }//eofGetDoc public override string GetSampleDocumentIdText(Microsoft.SharePoint.SPSite site)
        {
            //DocumentID model return "AAA-BBB-CCC-DDD-EEE-FFF";
        }
    }
}

Une fois la solution compilée, deux choses sont à vérifier. Premièrement rendez-vous dans Site Collection Administration > Document ID settings , le paragraphe en rouge vous indique qu’un nouvel DocumentIDProvider a été trouvé

en l’occurrence le nôtre.

image

Deuxièmement vérifiez que la Feature a bien été déployée dans Site Collection Administration > Site Collection Features

image

Maintenant à chaque fois que vous ferez un upload de document, Sharepoint vous proposera de remplir les différents champs manquant afin que la génération du GUID se fasse en fonction des colonnes ou vous pouvez les renseignez avec une gestion d’upload de document.