Procedimiento para agregar un evento periódico a las listas de varios sitios
Esta tarea de programación muestra cómo agregar un evento periódico con un sitio de área de reuniones a la lista de eventos de cada sitio en una colección de subsitios.
Para agregar un evento periódico con un sitio de área de reuniones a la lista de eventos de cada sitio en una colección de subsitios
Cree una aplicación de consola en Microsoft Visual Studio 2005, tal y como se describe en Procedimiento para crear una aplicación de consola.
Agregue una directiva using o Imports a la apertura del archivo .cs o .vb para los espacios de nombres Microsoft.SharePoint y Microsoft.SharePoint.Meetings de la siguiente manera:
Imports Microsoft.SharePoint Imports Microsoft.SharePoint.Meetings
using Microsoft.SharePoint; using Microsoft.SharePoint.Meetings;
El constructor SPSite permite crear una instancia de una colección de sitios especificada. Este ejemplo usa un indizador en la propiedad AllWebs de la clase SPSite para devolver un sitio específico y la propiedad Webs de la clase SPWeb para devolver la colección de subsitios incluidos bajo el sitio. Configure un bucle foreach para hacer una repetición a través de todos los subsitios y obtener la lista de eventos de cada sitio y la colección de elementos de lista en cada lista de eventos de la siguiente manera:
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;
Cree un elemento de lista. En este ejemplo se usa el método Add de la clase SPListItemCollection para crear un elemento de lista no inicializado, se usan indizadores para establecer diversas propiedades del nuevo elemento y se usa el método Update para finalizar la creación del elemento.
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 contiene un fragmento de código XML que especifica las propiedades de un evento periódico que tiene lugar diariamente durante cinco días y el indizador XMLTZone asigna información de la zona horaria del sitio actual. El XML que define la periodicidad y que especifica la zona horaria se incluye en las columnas ntext3 y ntext4 de la tabla UserData de la base de datos de contenido.
La tabla siguiente muestra ejemplos de los distintos tipos de periodicidad que se pueden usar.
Descripción Ejemplo Todos los demás días hasta una fecha de finalización especificada
<recurrence><rule> <firstDayOfWeek>su</firstDayOfWeek> <repeat><daily dayFrequency='2' /></repeat> <windowEnd>2003-09- 20T09:00:00Z</windowEnd> </rule></recurrence>
El lunes de cada semana
<recurrence><rule> <firstDayOfWeek>su</firstDayOfWeek> <repeat><weekly mo='TRUE' weekFrequency='1' /></repeat> <repeatForever>FALSE</repeatForever> </rule></recurrence>
El tercer día de cada dos meses durante cinco sesiones
<recurrence><rule> <firstDayOfWeek>su</firstDayOfWeek> <repeat><monthly monthFrequency='2' day='3' /></repeat> <repeatInstances>5</repeatInstances> </rule></recurrence>
El primer martes de cada mes hasta una fecha de finalización especificada.
<recurrence><rule> <firstDayOfWeek>su</firstDayOfWeek> <repeat> <monthlyByDay tu='TRUE' weekdayOfMonth='first' monthFrequency='1' /> </repeat> <windowEnd>2003-08- 02T10:00:00Z</windowEnd> </rule></recurrence>
El día veinte del noveno mes de cada año hasta una fecha de finalización especificada.
<recurrence><rule> <firstDayOfWeek>su</firstDayOfWeek> <repeat><yearly yearFrequency='1' month='9' day='20' /></repeat> <windowEnd>2007-09- 20T07:00:00Z</windowEnd> </rule></recurrence>
Para agregar un sitio de área de reuniones al evento periódico, use uno de los métodos Add de la clase SPWebCollection y el método LinkWithEvent de la clase 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); } }
Después de crear el sitio de área de reuniones, el método GetMeetingInformation devuelve un objeto SPMeeting que representa el sitio.
Presione F5 para iniciar la aplicación de consola.
En el símbolo del sistema, escriba un nombre para el sitio de área de reuniones y, a continuación, presione ENTRAR para agregar un evento periódico con un sitio de área de reuniones a la lista de eventos de todos los subsitios incluidos bajo un sitio.