Procédure : ajouter un événement périodique à des listes sur plusieurs sites

Cette tâche de programmation montre comment ajouter un événement périodique avec un site d'espace de travail de réunion à la liste des événements de chaque site d'une collection de sous-sites.

Pour ajouter un événement périodique avec un site d'espace de travail de réunion à la liste des événements de chaque site d'une collection de sous-sites

  1. Créez une application console dans Microsoft Visual Studio 2005, comme décrit dans Procédure : créer une application console.

  2. Ajoutez une directive using ou Imports à l'ouverture du fichier .cs ou .vb pour les espaces de noms Microsoft.SharePoint et Microsoft.SharePoint.Meetings, comme suit :

    Imports Microsoft.SharePoint
    Imports Microsoft.SharePoint.Meetings
    
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Meetings;
    
  3. Utilisez le constructeur SPSite pour instancier une collection de sites spécifiée. Cet exemple utilise un indexeur sur la propriété AllWebs de la classe SPSite pour retourner un site particulier et la propriété Webs de la classe SPWeb pour retourner la collection de sous-sites sous le site. Définissez une boucle foreach pour parcourir tous les sous-sites et obtenir la liste des événements pour chaque site ainsi que la collection des éléments de liste dans chaque liste d'événements, comme suit :

    Dim evtTitle As String = Console.ReadLine()
    
    Dim siteCollection As New SPSite("Absolute_Url")
    Dim site As SPWeb = siteCollection.AllWebs("Site_Name")
    Dim subSites As SPWebCollection = site.Webs
    Dim subSite As SPWeb
    
    For Each subSite In subSites
    
        Dim list As SPList = subSite.Lists("Events")
        Dim listItems As SPListItemCollection = list.Items
    
    string evtTitle = Console.ReadLine();
    
    SPSite siteCollection = new SPSite("Absolute_Url");
    SPWeb site = siteCollection.AllWebs["Site_Name"];
    SPWebCollection subSites = site.Webs;
    
    foreach (SPWeb subSite in subSites)
    {
        SPList list = subSite.Lists["Events"];
        SPListItemCollection listItems = list.Items;
    
  4. Créez un élément de liste. Cet exemple utilise la méthode Add de la classe SPListItemCollection pour créer un élément de liste non initialisé, utilise des indexeurs afin de définir plusieurs propriétés pour le nouvel élément, puis utilise la méthode Update pour terminer la création de l'élément.

    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(2003, 8, 15, 8, 0, 0)
    recEvent("EndDate") = New DateTime(2003, 9, 25, 9, 0, 0)
    recEvent("UID") = 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(2003,8,15,8,0,0);
        recEvent["EndDate"] = new DateTime(2003,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();
    

    La variable recData contient un fragment XML qui spécifie les propriétés d'un événement périodique ayant lieu tous les jours pendant cinq jours, tandis que l'indexeur XMLTZone affecte les informations de fuseau horaire pour le site actif. Le code XML qui définit la périodicité et spécifie les informations de fuseau horaire est contenu dans les colonnes ntext3 et ntext4 de la table UserData dans la base de données de contenu.

    Le tableau suivant montre des exemples des différents types de périodicité disponibles.

    Description Exemple

    Un jour sur deux jusqu'à une date de fin spécifiée

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

    Tous les lundi

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

    Tous les deux mois, le troisième jour pendant cinq sessions

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

    Tous les premiers mardi du mois jusqu'à une date de fin spécifiée.

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

    Le vingtième jour du neuvième mois de chaque année jusqu'à une date de fin spécifiée.

    <recurrence><rule>
       <firstDayOfWeek>su</firstDayOfWeek>
       <repeat><yearly yearFrequency='1' 
          month='9' day='20' /></repeat>
       <windowEnd>2007-09-
          20T07:00:00Z</windowEnd>
    </rule></recurrence>
  5. Pour ajouter un site d'espace de travail de réunion à l'événement périodique, utilisez l'une des méthodes Add de la classe SPWebCollection et la méthode LinkWithEvent de la classe SPMeeting.

        Dim mwsSites As SPWebCollection = subSite.Webs
    
        Dim path As String = recEvent("Title").ToString()
    
        Dim newSite As SPWeb = mwsSites.Add(path, "Workspace_Name", _
            "Description", Convert.ToUInt32(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(subSite, guid, id, "WorkspaceLink", 
                "Workspace")
    
        Catch ex As System.Exception
    
            Console.WriteLine(ex.Message)
    
        End Try
    
    Next subSite
    
        SPWebCollection mwsSites = subSite.Webs;
    
        string path = recEvent["Title"].ToString();
    
        SPWeb newSite = mwsSites.Add(path, "Workspace_Name", 
            "Description", 1033, "MPS#0", false, false);
    
        SPMeeting mwsSite = SPMeeting.GetMeetingInformation(newSite);
    
        string guid = list.ID.ToString();
        int id = recEvent.ID;
    
        try
        {
            mwsSite.LinkWithEvent(subSite, guid, id, "WorkspaceLink", 
                "Workspace");
        }
    
        catch (System.Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
    

    Après la création du site d'espace de travail de réunion, la méthode GetMeetingInformation retourne un objet SPMeeting représentant le site.

  6. Appuyez sur F5 pour démarrer l'application console.

  7. À l'invite de commandes, tapez un nom pour le site d'espace de travail de réunion, puis appuyez sur Entrée pour ajouter un événement périodique à un site d'espace de travail de réunion à la liste des événements dans tous les sous-sites sous un site.