Procedimiento para eliminar una reunión de un área de reuniones

Última modificación: miércoles, 07 de julio de 2010

Hace referencia a: SharePoint Foundation 2010

Las reuniones que se crean a través de una lista de eventos no se cancelan ni eliminan cuando se elimina el evento asociado, y no es posible cancelar ni eliminar una reunión de un sitio de área de reuniones a través de la interfaz de usuario. Esta tarea de programación muestra cómo quitar una reunión de un área de reuniones mediante la creación de una aplicación de consola que usa los métodos de los servicios web Lists y Meetings.

Para quitar una reunión de un área de reuniones

  1. Cree una aplicación de consola en Microsoft Visual Studio como se describe en Procedimiento para crear una aplicación de consola.

  2. Agregue referencias web para los servicios web Lists y Meetings de la siguiente manera:

    1. Haga clic con el botón secundario del mouse en Referencias en el Explorador de soluciones y, a continuación, haga clic en Agregar referencia de servicio.

    2. En el cuadro de diálogo Agregar referencia de servicio, haga clic en Avanzadas y, en el cuadro de diálogo Configuración de referencia de servicio, haga clic en Agregar referencia web.

    3. En el cuadro Dirección URL del cuadro de diálogo Agregar referencia Web escriba la dirección URL del servicio web, incluido el sitio al que se aplica el servicio y el directorio virtual de los servicios web, como se indica a continuación:

      http://Server/sites/Site\_Name/\_vti\_bin/Lists.a

    4. Haga clic en Agregar referencia.

    5. Repita este procedimiento para agregar una referencia a Meetings.asmx para el servicio web Meetings .

  3. Agregue una directiva de using (Imports en Visual Basic) para el espacio de nombres System.Xml a Class1.cs.

  4. Agregue el siguiente ejemplo de código al método Main, que se inicia mediante la creación de instancias de los servicios web Lists y Meetings, autentica al usuario actual para el uso de ambos servicios y, a continuación, recopila los datos introducidos por el usuario que especifica la reunión que desea eliminar.

    Dim listObj As New Web_Reference.Lists()
    listObj.Credentials = System.Net.CredentialCache.DefaultCredentials
    
    'Get Meeting Workspace URL.
    Console.Write("Enter the URL of the Meeting Workspace: ")
    Dim baseURL As String = Console.ReadLine()
    
    'Set URL properties for both objects.
    listObj.Url = baseURL + "/_vti_bin/lists.asmx"
    meetObj.Url = baseURL + "/_vti_bin/meetings.asmx"
    
    'Get meeting InstanceID.
    Console.Write("Enter the InstanceID of the meeting: ")
    Dim InstanceID As String = Console.ReadLine()
    
    Dim xmlDoc As New XmlDocument()
    
    Dim ndQuery As XmlNode = xmlDoc.CreateNode(XmlNodeType.Element, "Query", "")
    Dim ndViewFields As XmlNode = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", "")
    Dim ndQueryOptions As XmlNode = xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "")
    
    'Create Query to filter based on the InstanceID provided.
    ndQuery.InnerXml = "<Where><Eq><FieldRef Name=""ID""/> + 
         "<Value Type=""Counter""> + InstanceID + "</Value></Eq></Where>"
    
    Try
       'Call GetListItems Web service to get meeting UID.
       Dim ndResult As XmlNode = listObj.GetListItems("Meeting Series", "", ndQuery, ndViewFields, "0", ndQueryOptions)
       Dim MainNode As XmlNode = ndResult.ChildNodes.Item(1)
       MainNode = MainNode.ChildNodes.Item(1)
       Dim eventUID As XmlNode = MainNode.Attributes.GetNamedItem("ows_EventUID")
       Dim UID As String = eventUID.InnerText
    
       'Call RemoveMeeting Web service to cancel meeting.
       'NOTE: You might need to increase the sequence number depending
       'on how many updates have already been made to the meeting.
       meetObj.RemoveMeeting(0, UID, 0, DateTime.Now, True)
    
       Console.WriteLine("Meeting canceled successfully.")
    
       Catch ex As System.Web.Services.Protocols.SoapException
          Console.WriteLine(("Message:" + ControlChars.Lf + 
          ex.Message + ControlChars.Lf + "Detail:" + ControlChars.Lf + 
          ex.Detail.InnerText + ControlChars.Lf + "StackTrace:" + 
          ControlChars.Lf + ex.StackTrace))
    End Try
    
    /*Create necessary objects and set credentials.*/
    Web_Reference.Meetings meetObj = 
       new Web_Reference_Folder_Name.Meetings();
    meetObj.Credentials = System.Net.CredentialCache.DefaultCredentials;
    
    Web_Reference.Lists listObj = 
       new Web_Reference.Lists();
    listObj.Credentials = System.Net.CredentialCache.DefaultCredentials;
    
    /*Get Meeting Workspace URL.*/
    Console.Write("Enter the URL of the Meeting Workspace: ");
    string baseURL = Console.ReadLine();
    
    /*Set URL properties for both objects.*/
    listObj.Url = baseURL + "/_vti_bin/lists.asmx";
    meetObj.Url = baseURL + "/_vti_bin/meetings.asmx";
    
    /*Get meeting InstanceID.*/
    Console.Write("Enter the InstanceID of the meeting: ");
    string InstanceID = Console.ReadLine();
    
    XmlDocument xmlDoc = new XmlDocument();
    
    XmlNode ndQuery = 
       xmlDoc.CreateNode(XmlNodeType.Element,"Query", "");
    XmlNode ndViewFields = 
       xmlDoc.CreateNode(XmlNodeType.Element,"ViewFields","");
    XmlNode ndQueryOptions = 
       xmlDoc.CreateNode(XmlNodeType.Element,"QueryOptions","");
    
    // Create query to filter based on the InstanceID provided.
    ndQuery.InnerXml = 
       @"<Where><Eq><FieldRef Name=""ID""/><Value Type=""Counter"">" +
       InstanceID + "</Value></Eq></Where>";
    
    try
    {
       /*Call GetListItems Web service to get meeting UID.*/
       XmlNode ndResult = 
          listObj.GetListItems("Meeting Series", "", ndQuery, 
          ndViewFields, "0", ndQueryOptions);
       XmlNode MainNode = ndResult.ChildNodes.Item(1);
       MainNode = MainNode.ChildNodes.Item(1);
       XmlNode eventUID = 
          MainNode.Attributes.GetNamedItem("ows_EventUID");
       string UID = eventUID.InnerText;
    
       /*Call RemoveMeeting Web service to cancel meeting.
       NOTE: You might need to increase the sequence number depending
       on how many updates have already been made to the meeting.*/
       meetObj.RemoveMeeting(0, UID, 0, DateTime.Now, true);
    
       Console.WriteLine("Meeting canceled successfully.");
    }
    catch (System.Web.Services.Protocols.SoapException ex)
    {
       Console.WriteLine("Message:\n" + ex.Message + "\nDetail:\n" + 
          ex.Detail.InnerText + "\nStackTrace:\n" + ex.StackTrace);
    }
    

    En el ejemplo, se crea un objeto XmlDocument que se usa para crear nodos a fin de construir los parámetros pasados al método GetListItems. El método GetListItems(String, String, XmlNode, XmlNode, String, XmlNode, String) devuelve el elemento desde la lista Serie de reuniones del sitio cuyo identificador es igual que el identificador de instancia especificado por el usuario. El lenguaje de marcado de aplicaciones de colaboración (CAML) se usa para crear la consulta. El atributo ows_EventUID que se devuelve a través del método GetListItems contiene el GUID que identifica el sitio Área de reuniones que se va a eliminar, el cual se pasa al método RemoveMeeting.

  5. En el menú Depurar, haga clic en Iniciar depuración para probar la aplicación.