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.

Advertisements

3 thoughts on “SharePoint 2010 – Custom Feature DocumentID

    Melinda said:
    October 10, 2011 at 11:35 am

    Thanks for the share! Very useful info, looking to communicate!

    Like

      Judy said:
      December 17, 2011 at 2:38 am

      Deep tinhknig – adds a new dimension to it all.

      Like

        Billybob said:
        December 26, 2011 at 8:15 am

        You’ve really impressed me with that ansewr!

        Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s