Freigeben über


Gewusst wie: Hinzufügen einer Ereignisserie zu Listen auf mehreren Websites

Letzte Änderung: Dienstag, 30. März 2010

Gilt für: SharePoint Foundation 2010

Verfügbar in SharePoint Online

Diese Programmieraufgabe illustriert, wie der Kalenderliste jeder Website in einer Websitesammlung ein wiederkehrendes Ereignis mit einer Besprechungsarbeitsbereich-Website hinzugefügt wird.

So fügen Sie der Kalenderliste jeder Website in einer Websitesammlung ein wiederkehrendes Ereignis mit einer Besprechungsarbeitsbereich-Website hinzu

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

  2. Fügen Sie am Anfang der CS- oder VB-Datei wie folgt eine using- oder eine Imports-Direktive für die Namespaces Microsoft.SharePoint und Microsoft.SharePoint.Meetings hinzu.

    Imports Microsoft.SharePoint
    Imports Microsoft.SharePoint.Meetings
    
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Meetings;
    
  3. Verwenden Sie den SPSite-Konstruktor, um eine bestimmte Websitesammlung zu instanziieren. In diesem Beispiel werden mithilfe der AllWebs-Eigenschaft der SPSite-Klasse alle Websites innerhalb der Websitesammlung zurückgegeben. Im Beispiel wird eine foreach-Schleife zur Aufzählung der Websites verwendet. Wenn eine Website mit der SharePoint Foundation-Standardvorlage (WebTemplateSTS) erstellt wurde, werden die Kalenderliste für die Website sowie die Sammlung der Listenelemente in der Liste abgerufen.

    Dim evtTitle As String = Console.ReadLine()
    
    Using siteCollection As New SPSite("https://Server/sites/SiteCollection")
        Dim collWeb As SPWebCollection = siteCollection.AllWebs
    
        For Each oWebsite As SPWeb In collWeb
            If oWebsite.WebTemplate = SPWebTemplate.WebTemplateSTS Then
                Dim list As SPList = oWebsite.Lists("Calendar")
                Dim listItems As SPListItemCollection = list.Items
    
    string evtTitle = Console.ReadLine();
    
    using (SPSite siteCollection = new SPSite("https://Server/sites/SiteCollection"))
    {
        SPWebCollection collWeb = siteCollection.AllWebs;
    
        foreach (SPWeb oWebsite in collWeb)
        {
            if (oWebsite.WebTemplate == SPWebTemplate.WebTemplateSTS)
            {
                SPList list = oWebsite.Lists["Calendar"];
                SPListItemCollection listItems = list.Items;
    
  4. Verwenden Sie zum Erstellen eines Listenelements die Add-Methode der SPListItemCollection-Klasse, um zunächst ein nicht initialisiertes Listenelement zu erstellen. Legen Sie mithilfe der Indexerstellung verschiedene Eigenschaften für das neue Element fest, und schließen Sie das Erstellen des Elements dann mit der Update-Methode ab.

    Dim recEvent As SPListItem = listItems.Add()
    
    Dim recdata As String = "<recurrence><rule>" &
        "<firstDayOfWeek>su</firstDayOfWeek>" & 
        "<repeat><daily dayFrequency='1' /></repeat>" & 
        "<repeatInstances>5</repeatInstances></rule></recurrence>"
    
    recEvent("Title") = evtTitle
    recEvent("RecurrenceData") = recdata
    recEvent("EventType") = 1
    recEvent("EventDate") = New DateTime(2011, 8, 15, 8, 0, 0)
    recEvent("EndDate") = New DateTime(2011, 9, 25, 9, 0, 0)
    recEvent("UID") = System.Guid.NewGuid()
    recEvent("TimeZone") = 13
    recEvent("Recurrence") = - 1
    recEvent("XMLTZone") = "<timeZoneRule>" &
        "<standardBias>480</standardBias>" &
        "<additionalDaylightBias>-60</additionalDaylightBias>" &
        "<standardDate><transitionRule  month='10' day='su' weekdayOfMonth='last' />" &
        "<transitionTime>2:0:0</transitionTime></standardDate>" &
        "<daylightDate><transitionRule  month='4' day='su' weekdayOfMonth='first' />" &
        "<transitionTime>2:0:0</transitionTime>" &
        "</daylightDate></timeZoneRule>"
    
    recEvent.Update()
    
    SPListItem recEvent = listItems.Add();
    
    string recData = "<recurrence><rule>" + 
        "<firstDayOfWeek>su</firstDayOfWeek>" +
        "<repeat><daily dayFrequency='1' /></repeat>" +
        "<repeatInstances>5</repeatInstances></rule></recurrence>";
    
    recEvent["Title"] = evtTitle;
    recEvent["RecurrenceData"] = recData;
    recEvent["EventType"] = 1;
    recEvent["EventDate"] = new DateTime(2011,8,15,8,0,0);
    recEvent["EndDate"] = new DateTime(2011,9,25,9,0,0);
    recEvent["UID"] = System.Guid.NewGuid();
    recEvent["TimeZone"] = 13;
    recEvent["Recurrence"] = -1;
    recEvent["XMLTZone"] = "<timeZoneRule>" +
        "<standardBias>480</standardBias>" +
        "<additionalDaylightBias>-60</additionalDaylightBias>" +
        "<standardDate><transitionRule  month='10' day='su' weekdayOfMonth='last' />" +
        "<transitionTime>2:0:0</transitionTime></standardDate>" +
        "<daylightDate><transitionRule  month='4' day='su' weekdayOfMonth='first' />" +
        "<transitionTime>2:0:0</transitionTime>" +
        "</daylightDate></timeZoneRule>";
    
        recEvent.Update();
    

    Die recData-Variable enthält ein XML-Fragment, das Eigenschaften für ein wiederkehrendes Ereignis angibt, das fünf Tage lang täglich stattfindet, und die XMLTZone-Indexerstellung weist Zeitzoneninformationen für die aktuelle Website zu. Der XML-Code mit der Definition der Wiederholungen und der Angabe der Zeitzoneninformationen befindet sich in den Spalten ntext3 und ntext4 der UserData-Tabelle in der Inhaltsdatenbank.

    In der folgenden Tabelle sind Beispiele für die verschiedenen Wiederholungstypen aufgeführt, die verwendet werden können.

    Beschreibung

    Beispiel

    Jeden zweiten Tag bis zum angegebenen Enddatum

    <recurrence><rule>
       <firstDayOfWeek>su</firstDayOfWeek>
       <repeat><daily dayFrequency='2' 
          /></repeat>
       <windowEnd>2003-09-
          20T09:00:00Z</windowEnd>
    </rule></recurrence>

    Wöchentlich am Montag

    <recurrence><rule>
       <firstDayOfWeek>su</firstDayOfWeek>
       <repeat><weekly mo='TRUE' 
          weekFrequency='1' /></repeat>
       <repeatForever>FALSE</repeatForever>
    </rule></recurrence>

    Fünf Sitzungen alle zwei Monate am dritten Tag

    <recurrence><rule>
       <firstDayOfWeek>su</firstDayOfWeek>
       <repeat><monthly monthFrequency='2'
          day='3' /></repeat>
       <repeatInstances>5</repeatInstances>
    </rule></recurrence>

    Monatlich am ersten Dienstag bis zum angegebenen Enddatum

    <recurrence><rule>
       <firstDayOfWeek>su</firstDayOfWeek>
       <repeat>
          <monthlyByDay tu='TRUE' 
             weekdayOfMonth='first' 
             monthFrequency='1' />
       </repeat>
       <windowEnd>2003-08-
          02T10:00:00Z</windowEnd>
    </rule></recurrence>

    Jährlich am 20. Tag des neunten Monats bis zum angegebenen Enddatum

    <recurrence><rule>
       <firstDayOfWeek>su</firstDayOfWeek>
       <repeat><yearly yearFrequency='1' 
          month='9' day='20' /></repeat>
       <windowEnd>2007-09-
          20T07:00:00Z</windowEnd>
    </rule></recurrence>
  5. Wenn Sie dem wiederkehrenden Ereignis eine einfache Besprechungsarbeitsbereich-Website hinzufügen möchten, erstellen Sie mithilfe der Add()-Methode der SPWebCollection-Klasse die Website (angegeben mit MPS#0) und verknüpfen die Website mithilfe der LinkWithEvent-Methode der SPMeeting-Klasse mit dem Calendar-Element.

                Dim mwsSites As SPWebCollection = oWebsite.Webs
    
                Dim path As String = recEvent("Title").ToString()
    
                Dim newSite As SPWeb = mwsSites.Add(path, "Workspace_Name", "Description", 1033, _
                                                            "MPS#0", False, False)
    
                Dim mwsSite As SPMeeting = SPMeeting.GetMeetingInformation(newSite)
    
                Dim guid As String = list.ID.ToString()
                Dim id As Integer = recEvent.ID
    
                Try
                    mwsSite.LinkWithEvent(oWebsite, guid, id, "WorkspaceLink", "Workspace")
                Catch ex As System.Exception
    
                    Console.WriteLine(ex.Message)
    
                End Try
    
           End If
    
           oWebsite.Close()
    
        Next
    
    End Using
    
                SPWebCollection mwsSites = oWebsite.Webs;
    
                string path = recEvent["Title"].ToString();
    
                SPWeb newSite = mwsSites.Add(path, "MyNewWorkspace", "Description", 1033, "MPS#0", false, false);
    
                SPMeeting mwsSite = SPMeeting.GetMeetingInformation(newSite);
    
                string guid = list.ID.ToString();
                int id = recEvent.ID;
    
                try
                {
                    mwsSite.LinkWithEvent(oWebsite, guid, id, "WorkspaceLink", "Workspace");
                }
    
                catch (System.Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
    
            oWebsite.Close();
        }
    }
    

    Nachdem die Besprechungsarbeitsbereich-Website erstellt wurde, gibt die GetMeetingInformation-Methode ein SPMeeting-Objekt für die Website zurück.

  6. Drücken Sie F5, um die Konsolenanwendung zu starten.

  7. Geben Sie an der Eingabeaufforderung einen Namen für die Besprechungsarbeitsbereich-Website ein, und drücken Sie die EINGABETASTE, um ein wiederkehrendes Ereignis mit einer Besprechungsarbeitsbereich-Website zur Kalenderliste aller Websites innerhalb der Websitesammlung hinzuzufügen.