Gewusst wie: Erstellen einer benutzerdefinierten Lösung zum Implementieren der IHold-Schnittstelle

Letzte Änderung: Donnerstag, 15. April 2010

Gilt für: SharePoint Server 2010

Das Feature "Haltebereichstatus und eDiscovery" kann auf einer Website aktiviert werden. Mit diesem Feature können Sie in einer Websitesammlung nach Inhalt suchen und diesen aufgrund von Rechtsstreitigkeiten oder zu Überwachungszwecken einem Haltebereich hinzufügen. In diesem Thema wird die IHoldsHandler-Schnittstelle vorgestellt. Diese Schnittstelle kann von einem benutzerdefinierten Haltebereichhandler implementiert werden, um die benutzerdefinierte Haltebereichsverarbeitung zu ermöglichen. Anstatt Inhalt in eine andere SharePoint Server-Website zu kopieren oder Dokumente lokal zu sperren, werden die Suchergebnisse von der benutzerdefinierten Haltebereichsverarbeitung in eine Dateifreigabe exportiert.

Wenn ein Listenelement einem Haltebereich hinzugefügt oder daraus entfernt wird, können Sie einen benutzerdefinierten Verarbeitungshandler hinzufügen, indem Sie die IHoldsHandler.OnSetHold(Microsoft.SharePoint.SPListItem,Microsoft.SharePoint.SPListItem)-Methode und die IHoldsHandler.OnRemoveHold(Microsoft.SharePoint.SPListItem,System.Collections.Generic.List{Microsoft.SharePoint.SPListItem})-Methode in der IHoldsHandler-Schnittstelle implementieren. Wenn das Listenelement vom Handler verarbeitet wurde, kann die Standardverarbeitung durch Zurückgeben des entsprechenden HoldHandlerResult-Objekts storniert, fortgesetzt oder übersprungen werden.

So konfigurieren und erstellen Sie das Beispiel und führen es aus

  1. Kopieren Sie das Codebeispiel in ein Microsoft Visual Studio 2010-Projekt, und speichern Sie dann die Datei mit dem Namen CustomHold.cs.

  2. Bearbeiten Sie CustomHold.cs, und geben Sie den Zielordner an (dargestellt durch den Platzhalterpfad \\myserver\myfolder\hold\ im Code), in den die in den Suchergebnissen enthaltenen Dateien exportiert werden.

  3. Erstellen Sie das Beispiel als Releaseprojekt (nicht als Debugprojekt).

  4. Erstellen Sie einen Ordner auf dem Computer mit SharePoint Server, in dem die benutzerdefinierte Haltebereichsverarbeitung registriert wird.

  5. Kopieren Sie die von diesem Projekt erstellten Inhalte aus dem Ordner CustomHoldProcessor\MyNewCustomHoldProcessor\bin\x64\Release in den Ordner, den Sie in Schritt 2 angegeben haben.

  6. Kopieren Sie die von diesem Projekt erstellten Inhalte aus dem Ordner registerholdprocesspr\registerholdprocesspr\bin\Release in den Ordner, den Sie in Schritt 2 angegeben haben.

  7. Navigieren Sie zu dem in Schritt 2 erstellten Ordner, und ändern Sie die Datei config.xml , um die Websitesammlung, für die die Haltebereichsverarbeitung registriert werden soll, und den Speicherort des Ordners anzugeben, den Sie in Schritt 2 angegeben haben.

  8. Suchen Sie die Datei MyNewCustomHoldProcesser.dll, und fügen Sie sie dem globalen Assemblycache (GAC) hinzu.

  9. Führen Sie registerholdprocesspr.exe aus.

Beispiel

Die folgenden Codebeispiele enthalten die benutzerdefinierte Implementierung der IHoldsHandler-Schnittstelle und den Code, der zum Registrieren der benutzerdefinierten Haltebereichsverarbeitung und zum Angeben der Website, für die die Haltebereichsverarbeitung registriert werden soll, erforderlich ist.

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);            
        }
    }
}

Siehe auch

Konzepte

Verwalten von eDiscovery

Programmiermodell für die Datensatzverwaltung

Weitere Ressourcen

Walkthrough: Creating Shared Events