Compartir a través de


Tutorial: Depurar una aplicación de SharePoint mediante IntelliTrace

Mediante IntelliTrace, puede depurar las aplicaciones más fácilmente, incluidas las que incorporan páginas web, como, por ejemplo, las soluciones de SharePoint.Los depuradores tradicionales solo proporcionan una instantánea del estado de la aplicación en el momento actual.Sin embargo, puede usar IntelliTrace para revisar los eventos pasados que se produjeron en la aplicación y el contexto en los que los eventos se produjeron, e incluso navegar a ellos.

Este tutorial muestra cómo usar IntelliTrace para depurar un proyecto de SharePoint en Visual Studio.Este proyecto incorpora un receptor de características que, cuando se activa la característica, agrega una tarea a la lista de tareas y un anuncio a la lista de anuncios.Cuando la característica está desactivada, la tarea se marca como completada y se agrega un segundo anuncio a la lista de anuncios.Sin embargo, el procedimiento contiene un error lógico que evita que el proyecto se ejecute correctamente.Mediante IntelliTrace, se puede localizar y corregir el error.

En este tutorial se muestran las tareas siguientes:

  • Crear una característica y un receptor de eventos de característica.

  • Responder a los eventos de característica mediante el código.

  • Hacer referencia a las listas Tarea y Anuncio mediante el código.

  • Buscar y manipular los elementos de lista mediante el código.

  • Usar IntelliTrace para localizar y corregir un error del código.

  • [!NOTA]

    Es posible que, para algunos de los elementos de la interfaz de usuario, el equipo muestre nombres o ubicaciones diferentes de los que aparecen en las instrucciones de este tema.Estos elementos varían dependiendo de la configuración y de la edición de Visual Studio.Para obtener más información, vea Valores de configuración de Visual Studio.

Requisitos previos

Necesita los componentes siguientes para completar este tutorial:

Crear un receptor de características

Primero, debe crear un proyecto de SharePoint vacío con un receptor de características.

Para crear un receptor de características

  1. Inicie Visual Studio con la opción Ejecutar como administrador.

  2. En la barra de menú, elija Archivo, Nuevo, Proyecto.

    Aparecerá el cuadro de diálogo Nuevo proyecto.

  3. En la parte superior del cuadro de diálogo, elija .NET Framework 3.5 en la lista de versiones de .NET Framework.

  4. Bajo el lenguaje que desea usar, expanda el nodo SharePoint y, a continuación el nodo 2010 .

  5. En el panel Plantillas , elija la plantilla Proyecto de SharePoint 2010 , cambie el nombre del proyecto a IntelliTraceTest, y elija el botón Aceptar .

    Aparece el Asistente para la personalización de SharePoint, en el que puede especificar el sitio de SharePoint para el proyecto y el nivel de confianza de la solución.

  6. Elija el botón de opción Implementar como solución de granja de servidores , y elija el botón Finalizar .

    IntelliTrace sólo funciona en soluciones de granja.

  7. En Explorador de soluciones, abra el menú contextual para el nodo Características y, a continuación Agregar característica.

    Aparece Feature1.feature.

  8. Abrir el menú contextual Feature1.feature y, a continuación Agregar receptor de eventos para agregar un módulo de código a la característica.

Agregar código al receptor de características

Luego, agregue el código a dos métodos del receptor de características: FeatureActivated y FeatureDeactivating.Estos métodos se activan cada vez que una característica se activa o se desactiva en SharePoint, respectivamente.

Para agregar código al receptor de características

  1. En la parte superior de la clase Feature1EventReceiver, agregue el siguiente código para declarar las variables que especifican el sitio y subsitio de SharePoint:

    ' SharePoint site/subsite.
    Private siteUrl As String = "https://localhost"
    Private webUrl As String = "/"
    
    // SharePoint site/subsite.
    private string siteUrl = "https://localhost";
    private string webUrl = "/";
    
  2. Reemplace el método FeatureActivated con el código siguiente:

    Public Overrides Sub FeatureActivated(ByVal properties As SPFeatureReceiverProperties)
        Try
            Using site As New SPSite(siteUrl)
                Using web As SPWeb = site.OpenWeb(webUrl)
                    ' Reference the lists.
                    Dim announcementsList As SPList = web.Lists("Announcements")
                    Dim taskList As SPList = web.Lists("Tasks")
    
                    ' Add a new announcement to the Announcements list.
                    Dim listItem As SPListItem = announcementsList.Items.Add()
                    listItem("Title") = "Activated Feature: " & Convert.ToString(properties.Definition.DisplayName)
                    listItem("Body") = Convert.ToString(properties.Definition.DisplayName) & " was activated on: " & DateTime.Now.ToString()
                    listItem.Update()
    
                    ' Add a to-do task to the Task list.
                    Dim newTask As SPListItem = taskList.Items.Add()
                    newTask("Title") = "Deactivate feature: " & Convert.ToString(properties.Definition.DisplayName)
                    newTask.Update()
                End Using
            End Using
    
        Catch e As Exception
            Console.WriteLine("Error: " & e.ToString())
        End Try
    
    End Sub
    
    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        try
        {
            using (SPSite site = new SPSite(siteUrl))
            {
                using (SPWeb web = site.OpenWeb(webUrl))
                {
                    // Reference the lists.
                    SPList announcementsList = web.Lists["Announcements"];
                    SPList taskList = web.Lists["Tasks"];
    
                    // Add a new announcement to the Announcements list.
                    SPListItem listItem = announcementsList.Items.Add();
                    listItem["Title"] = "Activated Feature: " + properties.Definition.DisplayName;
                    listItem["Body"] = properties.Definition.DisplayName + " was activated on: " + DateTime.Now.ToString();
                    listItem.Update();
    
                    // Add a to-do task to the Task list.
                    SPListItem newTask = taskList.Items.Add();
                    newTask["Title"] = "Deactivate feature: " + properties.Definition.DisplayName;
                    newTask.Update();
                }
            }
        }
    
        catch (Exception e)
        {
            Console.WriteLine("Error: " + e.ToString());
        }
    
    }
    
  3. Reemplace el método FeatureDeactivating con el código siguiente:

    Public Overrides Sub FeatureDeactivating(ByVal properties As SPFeatureReceiverProperties)
        Try
            Using site As New SPSite(siteUrl)
                Using web As SPWeb = site.OpenWeb(webUrl)
                    ' Reference the lists
                    Dim taskList As SPList = web.Lists("Tasks")
                    Dim announcementsList As SPList = web.Lists("Announcements")
    
                    ' Add an announcement that the feature was deactivated.
                    Dim listItem As SPListItem = announcementsList.Items.Add()
                    listItem("Title") = "Deactivated Feature: " & Convert.ToString(properties.Definition.DisplayName)
                    listItem("Body") = Convert.ToString(properties.Definition.DisplayName) & " was deactivated on: " & DateTime.Now.ToString()
                    listItem.Update()
    
                    ' Find the task the feature receiver added to the Task list when the
                    ' feature was activated.
                    Dim qry As New SPQuery()
                    qry.Query = "<Where><Contains><FieldRef Name='Title' /><Value Type='Text'>Deactive</Value></Contains></Where>"
                    Dim taskItems As SPListItemCollection = taskList.GetItems(qry)
    
                    For Each taskItem As SPListItem In taskItems
                        ' Mark the task as complete.
                        taskItem("PercentComplete") = 1
                        taskItem("Status") = "Completed"
                        taskItem.Update()
                    Next
                End Using
    
            End Using
    
        Catch e As Exception
            Console.WriteLine("Error: " & e.ToString())
        End Try
    
    
    End Sub
    
    public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
    {
        try
        {
            using (SPSite site = new SPSite(siteUrl))
            {
                using (SPWeb web = site.OpenWeb(webUrl))
                {
                    // Reference the lists
                    SPList taskList = web.Lists["Tasks"];
                    SPList announcementsList = web.Lists["Announcements"];
    
                    // Add an announcement that the feature was deactivated.
                    SPListItem listItem = announcementsList.Items.Add();
                    listItem["Title"] = "Deactivated Feature: " + properties.Definition.DisplayName;
                    listItem["Body"] = properties.Definition.DisplayName + " was deactivated on: " + DateTime.Now.ToString();
                    listItem.Update();
    
                    // Find the task the feature receiver added to the Task list when the
                    // feature was activated.
                    SPQuery qry = new SPQuery();
                    qry.Query = "<Where><Contains><FieldRef Name='Title' /><Value Type='Text'>Deactive</Value></Contains></Where>";
                    SPListItemCollection taskItems = taskList.GetItems(qry);
    
                    foreach (SPListItem taskItem in taskItems)
                    {
                        // Mark the task as complete.
                        taskItem["PercentComplete"] = 1;
                        taskItem["Status"] = "Completed";
                        taskItem.Update();
                    }
                }
            }
    
        }
    
        catch (Exception e)
        {
            Console.WriteLine("Error: " + e.ToString());
        }
    }
    

Probar el proyecto

Ahora que el código se ha agregado al receptor de características, ejecute la aplicación de SharePoint para probar si funciona correctamente.En este ejemplo, se ha incluido en el código un pequeño error.Después de que se produzca el error, use IntelliTrace para encontrar el problema.

Para probar el proyecto

  1. Elija la tecla F5 para ejecutar el proyecto.

    En la implementación, la característica se activa automáticamente, lo que hace que el receptor de características agregue un anuncio y una tarea.

  2. Después del inicio de SharePoint, en el panel Inicio rápido , elija el vínculo Listas , y a continuación elija tanto la lista de Anuncios y la lista de Tareas para ver su contenido.

    Se ha agregado un nuevo anuncio denominado Característica activada: IntelliTraceTest_Feature1 a la lista de anuncios y una nueva tarea denominada Desactivar característica: IntelliTraceTest_Feature1 a la lista de tareas.El estado de la tarea es "Sin iniciar".

  3. Para desactivar la característica abriendo el menú Acciones del sitio , eligiendo Configuración del sitio, y después elegir el vínculo Administrar las características del sitio en Acciones del sitio.Elija el botón Desactivar junto a IntelliTraceTest Característica1, y elija el vínculo Desactivar esta característica en la página advertencia.

  4. En el panel Inicio rápido , elija el vínculo Tareas .

    El valor de Estado de la tarea debería ser ahora "Completada" y su valor % completado debería ser "100%". Por el contrario, los valores todavía tienen su configuración predeterminada.Un error en el código evita que la tarea se actualice.

Depurar el proyecto

Use IntelliTrace para buscar y corregir el problema en el código.

Para depurar el proyecto

  1. En Visual Studio, en el método FeatureDeactivating , busque la línea SPQuery qry = new SPQuery(); en Visual c# o la línea Dim qry As New SPQuery() en Visual Basic.Elija la F9 para insertar un punto de interrupción en esa línea.

    Dado que el problema se produce cuando la característica está desactivada, esta línea es un lugar lógico para iniciar la depuración.

  2. Elija la tecla F5 para ejecutar de nuevo el programa, y active y desactive la característica repitiendo los pasos descritos en “para probar el proyecto” anteriormente en este tema.

    Cuando se alcanza el punto de interrupción en FeatureDeactivating, aparece la ventana IntelliTrace, que hace una lista de los pasos que la aplicación ha realizado hasta ahora.

  3. En el panel IntelliTrace , en la categoría Evento en directo , elija el vínculo Variables locales .

  4. Elija la F11 para ir a la línea siguiente de código.

    Cada vez que elija la F11, otro “depurador: la” línea se agrega al historial de depuración de IntelliTrace de la aplicación.

  5. Elija la F11 para ir a la línea siguiente de código.

  6. En el panel Variables locales , expanda el nombre qry y observe que el valor Consulta aparece en rojo.

    Esta distinción indica que la consulta para buscar la tarea busca incorrectamente “Deactive” en lugar de “deactivate”. Este error significa que la tarea nunca se encuentra en la consulta de la lista de Tareas.

  7. Elija la F11 para ir a la línea siguiente de código.

  8. En el panel Variables locales , expanda el nombre taskItems , y observe que el valor Cuenta es cero (0).

    Este valor indica que la colección taskItems no contiene ningún elemento qry .

  9. Elija la tecla F5 para continuar depurando.

  10. Una vez completado el programa, elija el vínculo Interrumpir todos en la ventana IntelliTrace.

    Debe realizar este paso para guardar los datos de IntelliTrace.

    Puede ver la información de llamadas de la aplicación por, en la barra de herramientas de Intellitrace, eligiendo el vínculo Abrir configuración de IntelliTrace y, a continuación, en el cuadro de diálogo Opciones , elija el botón de opción Eventos de IntelliTrace e información de llamadas .

  11. En la barra de herramientas de IntelliTrace, elija el botón Guardar la sesión actual de IntelliTrace para guardar los datos de depuración.

    El archivo tendrá una extensión .iTrace.

  12. En la barra de menús Visual Studio , elija Depurar, Detener depuración.

  13. Abra el archivo .iTrace.

    Este paso abre la página resumen de IntelliTrace, que proporciona información de depuración como datos de excepciones y una lista de subprocesos que se usan en el programa.

  14. Expanda Lista de subprocesos, elija Subproceso principal, y después elija el botón Iniciar depuración .

    Este paso inicia una sesión de depuración en Visual Studio que usa los datos de .iTrace.Para ver los detalles adicionales sobre un evento en la ventana IntelliTrace, elija el evento.

  15. Elija el vínculo Variables locales en el paso Depurador: para SPListItemCollection taskItems = taskList.GetItems(qry);.

    Aparece la ventana Variables locales.

  16. En la ventana Variables locales, expanda la lista de variables, busque qry.Query y compruebe que la consulta para buscar la tarea busca incorrectamente "Deactive" en lugar de "Deactivate".

Volver a probar el proyecto

Ahora que ha identificado el problema con IntelliTrace, corrija el error y, a continuación, vuelva a probar el proyecto.

Para volver a probar el proyecto

  1. Cierre la sesión de depuración de Visual Studio y, a continuación, vuelva a abrir el proyecto IntelliTraceTest si no está ya abierto.

  2. En la cadena de consulta del código (qry.Query = "<Where><Contains><FieldRef Name='Title' /><Value Type='Text'>Deactive</Value></Contains></Where>"), cambie el valor de Deactive a Deactivate.

  3. Elija la tecla F5 para ejecutar de nuevo el proyecto.

  4. Abra la lista de tareas y compruebe que el valor Estado de la tarea Deactivate está establecido ahora correctamente como "Completada" y el valor % completado es 100%.

Vea también

Conceptos

Comprobar y depurar código de SharePoint

Depurar la aplicación grabando la ejecución de código con IntelliTrace

Otros recursos

Tutorial: Comprobar código de SharePoint mediante pruebas unitarias