Gewusst wie: Entfernen einer Besprechung aus einem Besprechungsarbeitsbereich

Letzte Änderung: Mittwoch, 7. Juli 2010

Gilt für: SharePoint Foundation 2010

Besprechungen, die Sie über eine Ereignisliste erstellen, werden nicht abgebrochen oder gelöscht, wenn das zugeordnete Ereignis gelöscht wird, und es ist nicht möglich, eine Besprechung über die Benutzeroberfläche abzubrechen oder von einer Besprechungsarbeitsbereich-Website zu löschen. In dieser Programmieraufgabe wird gezeigt, wie Sie eine Besprechung aus einem Besprechungsarbeitsbereich entfernen können, indem Sie eine Konsolenanwendung erstellen, die Methoden der Webdienste Lists und Meetings verwendet.

So entfernen Sie eine Besprechung aus einem Besprechungsarbeitsbereich

  1. Erstellen Sie in Microsoft Visual Studio eine Konsolenanwendung, wie in Gewusst wie: Erstellen einer Konsolenanwendung beschrieben.

  2. Fügen Sie wie folgt Webverweise für die beiden Webdienste Lists und Meetings hinzu:

    1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Verweise, und klicken Sie dann auf Dienstverweis hinzufügen.

    2. Klicken Sie im Dialogfeld Dienstverweis hinzufügen auf Erweitert, und klicken Sie im Dialogfeld Dienstverweiseinstellungen auf Webverweis hinzufügen.

    3. Geben Sie im Feld URL des Dialogfelds Webverweis hinzufügen die URL für den Webdienst ein, einschließlich der Website des Diensts und des virtuellen Verzeichnisses für Webdienste, z. B. die folgende URL:

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

    4. Klicken Sie auf Verweis hinzufügen.

    5. Wiederholen Sie dieses Verfahren, um für den Meetings-Webdienst einen Verweis auf Meetings.asmx hinzuzufügen.

  3. Fügen Sie Class1.cs eine using-Direktive (Imports in Visual Basic) für den System.Xml-Namespace hinzu.

  4. Fügen Sie der Main-Methode das folgende Codebeispiel hinzu. In diesem werden zunächst die Webdienste Lists und Meetings instanziiert, dann wird der aktuelle Benutzer für die Verwendung beider Dienste authentifiziert, und anschließend wird die Eingabe von diesem Benutzer erfasst, in der angegeben wird, welche Besprechung gelöscht werden soll.

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

    In dem Beispiel wird ein XmlDocument-Objekt erstellt, mit dem Knoten zum Erstellen der an die GetListItems-Methode übergebenen Parameter erzeugt werden. Die GetListItems(String, String, XmlNode, XmlNode, String, XmlNode, String)-Methode gibt das Element von der Liste Besprechungsserie der Website zurück, dessen Bezeichner (ID) mit der Instanz-ID übereinstimmt, die vom Benutzer angegeben wurde. Die Abfrage wird mit Collaborative Application Markup Language (CAML) erstellt. Das über die GetListItems-Methode zurückgegebene ows_EventUID-Attribut enthält die GUID, die die zu löschende Besprechungsarbeitsbereich-Website angibt, und diese wird an die RemoveMeeting-Methode übergeben.

  5. Klicken Sie im Menü Debuggen auf Debuggen starten, um die Anwendung zu testen.