Partager via


Procédure : Créer une solution personnalisée qui implémente l’interface IHold

Dernière modification : jeudi 15 avril 2010

S’applique à : SharePoint Server 2010

Vous pouvez activer la fonctionnalité Suspension et eDiscovery sur un site. Cette fonctionnalité vous permet de rechercher du contenu dans une collection de sites et de l’ajouter à une suspension à des fins d’audit ou de litige. Cette rubrique présente l’interface IHoldsHandler, qui fournit une interface pouvant être implémentée par un gestionnaire de suspension personnalisé en vue de fournir un traitement personnalisé des suspensions. Plutôt que de copier le contenu sur un autre site SharePoint Server ou de verrouiller les documents en place, le processeur de suspension personnalisé exporte les résultats de recherche vers un partage de fichiers.

Lorsqu’un élément de liste est suspendu ou que sa suspension est annulée, vous pouvez ajouter un gestionnaire de traitement personnalisé en implémentant la méthode IHoldsHandler.OnSetHold(Microsoft.SharePoint.SPListItem,Microsoft.SharePoint.SPListItem) et la méthode IHoldsHandler.OnRemoveHold(Microsoft.SharePoint.SPListItem,System.Collections.Generic.List{Microsoft.SharePoint.SPListItem}) dans l’interface IHoldsHandler. Une fois que le gestionnaire a traité l’élément de liste, il peut annuler, poursuivre ou ignorer le traitement par défaut en renvoyant l’objet HoldHandlerResult correspondant.

Pour configurer, générer et exécuter l’exemple

  1. Copiez l’exemple de code dans un projet Microsoft Visual Studio 2010, puis enregistrez le fichier sous le nom CustomHold.cs.

  2. Modifiez CustomHold.cs de façon à spécifier le dossier de destination (représenté par l’espace réservé de chemin d’accès \\myserver\myfolder\hold\ dans le code) où seront exportés les fichiers inclus dans les résultats de recherche.

  3. Générez l’exemple en tant que projet Version finale (et non Déboguer).

  4. Créez un dossier sur l’ordinateur SharePoint Server où sera enregistré le processeur de suspension personnalisé.

  5. À partir du dossier CustomHoldProcessor\MyNewCustomHoldProcessor\bin\x64\Release, copiez le contenu généré par ce projet dans le dossier que vous avez spécifié à l’étape 2.

  6. À partir du dossier registerholdprocesspr\registerholdprocesspr\bin\Release, copiez le contenu généré par ce projet dans le dossier que vous avez spécifié à l’étape 2.

  7. Naviguez jusqu’au dossier créé à l’étape 2 et modifiez le fichier config.xml de façon à spécifier la collection de sites pour laquelle enregistrer le processeur de suspension et l’emplacement du dossier spécifié à l’étape 2.

  8. Recherchez le fichier MyNewCustomHoldProcesser.dll et ajoutez-le au Global Assembly Cache (GAC).

  9. Exécutez registerholdprocesspr.exe.

Exemple

Les exemples de code suivants incluent l’implémentation personnalisée de l’interface IHoldsHandler, ainsi que le code requis pour enregistrer le processeur de suspension personnalisé et spécifier le site sur lequel enregistrer le processeur de suspension.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using Microsoft.SharePoint;
using Microsoft.Office.RecordsManagement;
using Microsoft.Office.RecordsManagement.Holds;

//This class specifies the custom hold processor that is used to export the contents
//of a search and process job to a file share. 
namespace Microsoft.SDK.ECM.Samples.WebControls.MyNewCustomHoldProccessor
{
    public class MyHoldProccessor : IHoldsHandler
    {
        //The action to perform when setting the hold; copy the file to the specified destination. 
        public HoldHandlerResult OnSetHold(SPListItem item, SPListItem hold)
        {
            WebClient client = new WebClient();
            client.UseDefaultCredentials = true;
            string source = item.Web.Url + item.File.ServerRelativeUrl;
            //The destination to export files to.
            string destination = @"\\myserver\myfolder\hold\" +item.Name;

            client.DownloadFile(source, destination);           
            return HoldHandlerResult.Cancel;
        }

        //The action to perform when a hold is being released.
        public HoldHandlerResult OnRemoveHold(SPListItem item, List<SPListItem> holds)
        {
            foreach (SPListItem eachitem in holds)
            {
                string str = eachitem.DisplayName;                
            }
            return HoldHandlerResult.SuccessContintueProcessing;
        }
    }
}
using System;
using System.Reflection;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using Microsoft.SharePoint;
using Microsoft.Office.RecordsManagement;
using Microsoft.Office.RecordsManagement.Holds;

//This class registers the custom hold processor. 
namespace Microsoft.SDK.ECM.Samples.WebControls.RegisterCustomHoldProccessor
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlDocument config = new XmlDocument();
            config.Load("config.xml");

            XmlElement rootEle = config.DocumentElement;
            XmlNodeList nodeList = rootEle.ChildNodes;

            string siteName = "";
            string libLocation = "";

            foreach (XmlNode eachNode in nodeList)
            {
                //This is the site collection to register the hold processor on; this is specified in config.xml.
                if (eachNode.Name == "site")
                {
                    siteName = eachNode.InnerText;
                }
                //This is the location of the files; this is specified in config.xml.
                if (eachNode.Name == "LibLocation")
                {
                    libLocation = eachNode.InnerText;
                }
            }
            Console.WriteLine("Customizing hold processor for " + siteName);
            Console.WriteLine("Search library location " + libLocation);


            SPSite site = new SPSite(siteName);
            Assembly searchengineassembly = Assembly.LoadFile(libLocation);
            Hold.RegisterCustomHoldProcessor(searchengineassembly.FullName, "MyNewCustomHoldProccessor.MyHoldProccessor", site.WebApplication);            
        }
    }
}

Voir aussi

Concepts

Gestion d’eDiscovery

Modèle de programmation de gestion des enregistrements

Autres ressources

Walkthrough: Creating Shared Events