Compartir a través de


Procedimiento para crear una solución personalizada que implemente la interfaz IHold

Última modificación: jueves, 15 de abril de 2010

Hace referencia a: SharePoint Server 2010

Puede activar la característica Suspensión y exhibición de documentos electrónicos en un sitio. Esta característica permite buscar contenido en una colección de sitios y agregarlo a una suspensión con fines de litigio o auditoría. En este tema se describe la interfaz IHoldsHandler, que consiste en una interfaz que un controlador de suspensiones personalizado puede implementar para permitir el procesamiento de suspensiones personalizado. En lugar de copiar el contenido a otro sitio de SharePoint Server o bloquear los documentos existentes, el procesador de suspensiones personalizado exporta los resultados de búsqueda a un recurso compartido de archivos.

Cuando un elemento de lista se coloca en suspensión o se quita de la suspensión, puede agregar un controlador de procesamiento personalizado mediante la implementación de los métodos IHoldsHandler.OnSetHold(Microsoft.SharePoint.SPListItem,Microsoft.SharePoint.SPListItem)y IHoldsHandler.OnRemoveHold(Microsoft.SharePoint.SPListItem,System.Collections.Generic.List{Microsoft.SharePoint.SPListItem}) en la interfaz IHoldsHandler. Una vez que el controlador procesa el elemento de lista, puede cancelar, continuar u omitir el procesamiento predeterminado devolviendo el objeto HoldHandlerResult correspondiente.

Para configurar, crear y ejecutar el ejemplo

  1. Copie el ejemplo de código en un proyecto de Microsoft Visual Studio 2010 y, a continuación, guarde el archivo como CustomHold.cs.

  2. Edite CustomHold.cs de forma que especifique la carpeta de destino (representada por la ruta de acceso del marcador de posición \\myserver\myfolder\hold\ en el código) a la que se van a exportar los archivos incluidos en los resultados de búsqueda.

  3. Cree el ejemplo como un proyecto de liberación (no de depuración).

  4. Cree una carpeta en el equipo que ejecuta SharePoint Server donde se va a registrar el procesador de suspensiones personalizado.

  5. En la carpeta CustomHoldProcessor\MyNewCustomHoldProcessor\bin\x64\Release, copie el contenido creado por este proyecto en la carpeta especificada en el paso 2.

  6. En la carpeta registerholdprocesspr\registerholdprocesspr\bin\Release, copie el contenido creado por este proyecto en la carpeta especificada en el paso 2.

  7. Navegue a la carpeta que creó en el paso 2 y, a continuación, modifique el archivo config.xml de forma que especifique la colección de sitios en la que desea registrar el procesador de suspensiones y la ubicación de la carpeta que especificó en el paso 2.

  8. Busque el archivo MyNewCustomHoldProcesser.dll y, a continuación, agréguelo a la memoria caché global de ensamblados (GAC).

  9. Ejecute registerholdprocesspr.exe.

Ejemplo

Los siguientes ejemplos de código incluyen la implementación personalizada de la interfaz IHoldsHandler e incluyen el código necesario para registrar el procesador de suspensiones personalizado y especificar el sitio en el que desea registrarlo.

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

Vea también

Conceptos

Administración de la exhibición de documentos electrónicos

Modelo de programación para la administración de registros

Otros recursos

Walkthrough: Creating Shared Events