Partager via


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

Dernière modification : mardi 30 mars 2010

S’applique à : SharePoint Foundation 2010

Disponible dans SharePoint Online

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 de calendriers de chaque site Web d’une collection de sites.

Pour ajouter un événement périodique avec un site d’espace de travail de réunion à la liste de calendriers de chaque site d’une collection de sites

  1. Créez une application console dans Microsoft Visual Studio 2010, 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 la propriété AllWebs de la classe SPSite pour retourner tous les sites Web de la collection de sites. L’exemple utilise une boucle foreach pour énumérer les sites Web et, si un site Web a été créé par le biais du modèle SharePoint Foundation standard (WebTemplateSTS), l’exemple obtient la liste de calendriers pour le site et la collection d’éléments de liste dans la liste.

    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. Pour créer un élément de liste, utilisez la méthode Add de la classe SPListItemCollection pour créer un élément de liste non initialisé, utilisez des indexeurs afin de définir plusieurs propriétés pour le nouvel élément, puis utilisez 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(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();
    

    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 de base à l’événement périodique, utilisez la méthode Add() de la classe SPWebCollection pour créer le site (spécifié par MPS#0) et la méthode LinkWithEvent de la classe SPMeeting pour lier le site à l’élément de calendrier.

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

    Après la création du site d’espace de travail de réunion, la méthode GetMeetingInformation retourne un objet SPMeeting qui représente 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 avec un site d’espace de travail de réunion à la liste de calendriers de tous les sites Web d’une collection de sites.