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
Créez une application console dans Microsoft Visual Studio 2005, comme décrit dans Procédure : créer une application console.
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;
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;
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>
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.
Appuyez sur F5 pour démarrer l'application console.
À 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.