如何:从会议工作区移除会议

上次修改时间: 2010年7月7日

适用范围: SharePoint Foundation 2010

在删除关联的事件时,不会取消或删除通过事件列表创建的会议,并且不能通过用户界面从会议工作区网站中取消或删除会议。此编程任务演示如何通过创建使用 Lists 和 Meetings Web 服务的方法的控制台应用程序以从会议工作区中移除会议。

从会议工作区中移除会议

  1. 在 Microsoft Visual Studio 中创建控制台应用程序,如如何:创建控制台应用程序中所述。

  2. 为 Lists 和 Meetings Web 服务添加 Web 引用,如下所示:

    1. 在"解决方案资源管理器"中,右键单击"引用",再单击"添加服务引用"。

    2. 在"添加服务引用"对话框中单击"高级",然后在"服务引用设置"对话框中单击"添加 Web 引用"。

    3. 在"添加 Web 引用"对话框的"URL"框中,键入 Web 服务的 URL,其中包含将该服务应用于的网站和 Web 服务的虚拟目录,如下所示:

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

    4. 单击"添加引用"。

    5. 重复此过程以添加对 Meetings Web 服务的 Meetings.asmx 的引用。

  3. 将用于 System.Xml 命名空间的 using 指令(在 Visual Basic 中为 Imports)添加到"Class1.cs"。

  4. 向 Main 方法添加以下代码示例,通过实例化 Lists 和 Meetings Web 服务,对使用这两种服务的当前用户进行身份验证,然后收集来自指定要删除的会议的用户的输入可启动该方法。

    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) 方法从网站的"会议序列"列表返回其标识符 (ID) 等于用户指定的实例 ID 的项目。使用协作应用程序标记语言 (CAML) 可构建查询。通过 GetListItems 方法返回的 ows_EventUID 属性包含标识要删除的会议工作区网站的 GUID,此 GUID 将传递给 RemoveMeeting 方法。

  5. 在"调试"菜单上,单击"启动调试"以测试应用程序。