Compartir a través de


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

  1. 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.

  2. 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;
    
  3. 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;
    
  4. 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>
  5. 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.

  6. Presione F5 para iniciar la aplicación de consola.

  7. 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.