Поделиться через


Удаление собрания из рабочей области для собраний

Дата последнего изменения: 7 июля 2010 г.

Применимо к: SharePoint Foundation 2010

События, создаваемые посредством списков событий, не отменяются и не удаляются при удалении сопоставленного события, и невозможно отменить или удалить собрание с сайта рабочей области для собраний посредством пользовательского интерфейса. Эта задача программирования показывает, как удалять собрание из рабочей области для собраний путем создания приложения, использующего методы веб-служб Lists и Meetings.

Удаление собрания из рабочей области для собраний

  1. Создайте консольное приложение в Visual Studio, как описано в разделе Создание консольного приложения.

  2. Добавьте веб-ссылки на обе веб-службы Lists и Meetings, как показано ниже.

    1. Щелкните правой кнопкой мыши Ссылки в обозревателе решений, а затем выберите Добавить ссылку на службу.

    2. В диалоговом окне Добавление ссылки на службу щелкните Дополнительно и в диалоговом окне Настройки ссылок на службу выберите Добавить веб-ссылку.

    3. В поле URL диалогового окна Добавить веб-ссылку введите URL-адрес веб-службы, включая сайт, к которому служба применима, и виртуальный каталог для веб-служб, как показано ниже:

      https://Server/sites/Site_Name/_vti_bin/Lists.asmx

    4. Нажмите кнопку Добавить ссылку.

    5. Повторите эту процедуру для добавления ссылки на Meetings.asmx для веб-службы Meetings.

  3. Добавьте директиву using (в Visual Basic — Imports) для пространства имен System.Xml в Class1.cs.

  4. Добавьте в метод Main следующий пример кода, который начинает с создания экземпляров веб-служб Lists и Meetings, выполняющих проверку подлинности текущего пользователя для обеих служб, а затем собирает от пользователей данные, указывающие, какое собрание следует удалить.

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

    Пример создает объект XmlDocument, используемый для создания сайтов для построения параметров, передаваемых методу GetListItems. Метод GetListItems(String, String, XmlNode, XmlNode, String, XmlNode, String) возвращает элемент из списка Серия собраний сайта, идентификатор которого равен идентификатору экземпляра, указываемого пользователем. Для построения запроса используется CAML. Атрибут ows_EventUID, возвращаемый с помощью метода GetListItems, содержит идентификатор GUID, идентифицирующий сайт рабочей области для собраний, подлежащий удалению, который передается методу RemoveMeeting.

  5. Для тестирования приложения выберите Начать отладку в меню Отладка.