Programar citas repetidas como eventos periódicos en Outlook

Los eventos periódicos son una parte importante del Calendario de Outlook. Ya sea una reunión semanal personal con su jefe o una reunión de revisión de todo un departamento que tiene lugar el segundo martes de cada mes, los eventos periódicos facilitan la tarea al crear el evento una sola vez y que el servidor complete el resto de la serie.

La clave de información que permite a los eventos periódicos "expandirse" en las repeticiones periódicas individuales es la regla de periodicidad. La regla especifica con qué frecuencia se repite un evento y durante cuánto tiempo. Las API de REST de Outlook definen las reglas de periodicidad en la propiedad recurrence del recurso de evento.

Cada recurrencia se compone de dos partes: el patrón de periodicidad (la frecuencia) y el intervalo de periodicidad (la duración).

Patrones de periodicidad

La primera parte de una repetición es el patrón. Especifica la frecuencia con que se repite el evento. Por ejemplo, un evento podría repetir "cada 3 días", "cada jueves" o "el 22 de julio de cada año". El recurso recurrencePattern representa un patrón en la API.

Según el tipo de patrón, ciertos campos de recurrencePattern son obligatorios, opcionales u omitidos.

Nota:

Incluso si se omite un campo, también se valida. Si un campo tiene una lista determinada de valores posibles, utilizar un valor fuera del conjunto permitido provocará un error, incluso si ese campo se omite.

Analicemos cada uno de los tipos de patrones posibles.

Diario

El patrón de periodicidad diario hace que se repita basándose en el número de días que transcurre entre cada evento.

Propiedades relevantes

Propiedad Relevancia Descripción
interval Obligatorio Especifica el número de días entre cada repetición.
type Obligatorio Se debe establecer en daily.

Ejemplos

  • Repetir este evento cada día

      "pattern": {
        "type": "daily",
        "interval": 1
      }
    
  • Repetir este evento cada tres días

      "pattern": {
        "type": "daily",
        "interval": 3
      }
    

Semanal

El patrón de periodicidad semanal provoca que un evento se repita en el mismo día o días de la semana, en función del número de semanas que transcurren entre cada conjunto de eventos.

Propiedades relevantes

Propiedad Relevancia Descripción
daysOfWeek Obligatorio Especifica en qué días de la semana se produce el evento.
firstDayOfWeek Opcional Especifica qué día se considera el primer día de la semana. Valor predeterminado: Sunday.
interval Obligatorio Especifica el número de semanas entre cada conjunto de eventos.
type Obligatorio Se debe establecer en weekly.

Ejemplos

  • Repetir este evento cada jueves

      "pattern": {
        "type": "weekly",
        "interval": 1,
        "daysOfWeek": [ "Thursday" ]
      }
    
  • Repetir este evento lunes y martes cada dos semanas

      "pattern": {
        "type": "weekly",
        "interval": 2,
        "daysOfWeek": [
          "Monday",
          "Tuesday"
        ]
      }
    

Mensual absoluto

El patrón mensual absoluto hace que un evento se repita el mismo día del mes (por ejemplo, el día 15), en función del número de meses entre cada repetición.

Propiedades relevantes

Propiedad Relevancia Descripción
dayOfMonth Obligatorio Especifica el día del mes en que se produce el evento.
interval Obligatorio Especifica el número de meses entre cada repetición.
type Obligatorio Se debe establecer en absoluteMonthly.

Ejemplos

  • Repetir este evento el día 15 de cada mes

      "pattern": {
        "type": "absoluteMonthly",
        "interval": 1,
        "dayOfMonth": 15
      }
    
  • Repetir este evento trimestralmente (cada 3 meses) el día 7

      "pattern": {
        "type": "absoluteMonthly",
        "interval": 3,
        "dayOfMonth": 7
      }
    

Mensual relativo

El patrón mensual relativo hace que un evento se repita el mismo día de la semana en la misma posición relativa en el mes, en función del número de meses entre cada repetición. Por ejemplo, "cada segundo miércoles del mes".

Propiedades relevantes

Propiedad Relevancia Descripción
daysOfWeek Obligatorio Especifica en qué días de la semana puede producirse el evento. Los eventos mensuales relativos sólo ocurren una vez al mes, por lo que si especifica más de un valor, el evento tendrá lugar en el primer día que se ajuste al patrón.
index Opcional Especifica en qué instancia de los días permitidos especificados en daysOfsWeek se produce el evento, contados a partir de la primera instancia del mes. Valores posibles: first, second, third, fourth y last. Valor predeterminado: first.
interval Obligatorio Especifica el número de meses entre cada repetición.
type Obligatorio Se debe establecer en relativeMonthly.

Ejemplos

  • Repetir este evento el segundo miércoles de cada mes

      "pattern": {
        "type": "relativeMonthly",
        "interval": 1,
        "daysOfWeek": [ "Wednesday" ],
        "index": "second"
      }
    
  • Repetir este evento en el primer jueves o viernes de cada mes

      "pattern": {
        "type": "relativeMonthly",
        "interval": 1,
        "daysOfWeek": [ "Thursday", "Friday" ],
        "index": "first"
      }
    

Anual absoluto

El patrón anual absoluto hace que un evento se repita en el mismo mes y día (por ejemplo, 15 de abril), basándose en el número de años entre cada repetición.

Propiedades relevantes

Propiedad Relevancia Descripción
dayOfMonth Obligatorio Especifica el día del mes en que se produce el evento.
month Obligatorio Especifica en qué mes se produce el evento.
interval Obligatorio Especifica el número de años entre cada repetición.
type Obligatorio Se debe establecer en absoluteYearly.

Ejemplo

  • Repetir este evento el 15 de abril de cada año

      "pattern": {
        "type": "absoluteYearly",
        "interval": 1,
        "dayOfMonth": 15,
        "month": 4
      }
    

Anual relativo

El patrón anual relativo hace que un evento se repita el mismo día de la semana en la misma posición relativa de un mes concreto, en función del número de años entre cada repetición. Por ejemplo, "cada último miércoles de noviembre".

Propiedades relevantes

Propiedad Relevancia Descripción
daysOfWeek Obligatorio Especifica en qué días de la semana puede producirse el evento. Los eventos anuales relativos sólo ocurren una vez al año, por lo que si especifica más de un valor, el evento tendrá lugar en el primer día que se ajuste al patrón.
index Opcional Especifica en qué instancia de los días permitidos especificados en daysOfsWeek se produce el evento, contados a partir de la primera instancia del mes. Valores posibles: first, second, third, fourth y last. Valor predeterminado: first.
month Obligatorio Especifica en qué mes se produce el evento.
interval Obligatorio Especifica el número de años entre cada repetición.
type Obligatorio Se debe establecer en relativeYearly.

Ejemplos

  • Repetir este evento el último miércoles de noviembre de cada año

      "pattern": {
        "type": "relativeYearly",
        "interval": 1,
        "daysOfWeek": [ "Wednesday" ],
        "index": "last",
        "month": 11
      }
    

Intervalos de periodicidad

La segunda parte de una repetición es el rango. Especifica cuánto tiempo se repite el patrón. Por ejemplo, un evento podría terminar después de 10 repeticiones, en una fecha específica, o podría no tener fin. Un intervalo se representa en la API por el recurso recurrenceRange.

Según el tipo de intervalo, ciertos campos de recurrenceRange son obligatorios o ignorados.

Nota:

Incluso si se omite un campo, también se valida. Si un campo tiene una lista determinada de valores posibles, utilizar un valor fuera del conjunto permitido provocará un error, incluso si ese campo se omite.

Analicemos cada uno de los tipos de intervalo posibles.

Rango numerado

El rango numerado hace que un evento se produzca un número fijo de veces (según el modelo) desde la fecha de inicio.

Propiedades relevantes

Propiedad Relevancia Descripción
numberOfOccurrences Obligatorio Especifica el número de repeticiones. Debe ser un número entero positivo.
recurrenceTimeZone Opcional Especifica la zona horaria de la propiedad startDate. Si no se especifica, se usa la zona horaria del evento.
startDate Obligatorio Especifica la fecha para comenzar a aplicar el patrón. El valor de startDate DEBE corresponderse con el valor de la fecha de la propiedad start en el recurso de evento. Tenga en cuenta que no puede producirse la primera aparición de la reunión en esta fecha si no encaja en el patrón.
type Obligatorio Se debe establecer en numbered.

Ejemplos

  • Repetir este evento 10 veces

      "range": {
        "type": "numbered",
        "startDate": "2017-04-02",
        "numberOfOccurrences": 10
      }
    

Intervalo de fecha de finalización

El intervalo de fecha de finalización hace que un evento se repita todos los días que encajan en el patrón aplicable entre una fecha inicial y una fecha de finalización.

Propiedades relevantes

Propiedad Relevancia Descripción
endDate Obligatorio Especifica la fecha para dejar de aplicar el patrón. Tenga en cuenta que no puede producirse la última aparición de la reunión en esta fecha si no encaja en el patrón.
recurrenceTimeZone Opcional Especifica la zona horaria de las propiedades startDate y endDate. Si no se especifica, se usa la zona horaria del evento.
startDate Obligatorio Especifica la fecha para comenzar a aplicar el patrón. El valor de startDate DEBE corresponderse con el valor de la fecha de la propiedad start en el recurso de evento. Tenga en cuenta que no puede producirse la primera aparición de la reunión en esta fecha si no encaja en el patrón.
type Obligatorio Se debe establecer en endDate.

Ejemplos

  • Repetir este evento desde el 1 de julio de 2017 hasta el 31 de julio de 2017

      "range": {
        "type": "endDate",
        "startDate": "2017-07-01",
        "endDate": "2017-07-31"
      }
    

Sin fecha de finalización

Sin fecha de finalización hace que un evento se repita todos los días que encajen en el patrón aplicable después de una fecha de inicio.

Propiedades relevantes

Propiedad Relevancia Descripción
recurrenceTimeZone Opcional Especifica la zona horaria de la propiedad startDate. Si no se especifica, se usa la zona horaria del evento.
startDate Obligatorio Especifica la fecha para comenzar a aplicar el patrón. El valor de startDate DEBE corresponderse con el valor de la fecha de la propiedad start en el recurso de evento. Tenga en cuenta que no puede producirse la primera aparición de la reunión en esta fecha si no encaja en el patrón.
type Obligatorio Se debe establecer en noEnd.

Ejemplos

  • Repetir este evento desde 15 de mayo de 2017 para siempre

      "range": {
        "type": "noEnd",
        "startDate": "2017-05-15"
      }
    

Usar patrones y rangos para crear eventos periódicos

Ahora que hemos visto los patrones y rangos por separado, analicemos cómo funcionan e interactúan con las propiedades start y end en el evento.

Crear una regla de periodicidad

Para crear una regla de periodicidad, debe especificar tanto un patrón como un rango. Cualquier tipo de patrón puede funcionar con cualquier tipo de rango. A continuación, se muestran algunos ejemplos.

Ejemplos

  • Reunión de 13:00 a 13:30 todos los lunes a partir del 4 de septiembre de 2017 hasta el final del año

    • El requisito "cada lunes" se cumple fácilmente por el tipo de patrón de periodicidad weekly.
    • El requisito "hasta el final del año" indica un tipo de intervalo de repetición endDate.
      "recurrence": {
        "pattern": {
          "type": "weekly",
          "interval": 1,
          "daysOfWeek": [ "Monday" ]
        },
        "range": {
          "type": "endDate",
          "startDate": "2017-09-04",
          "endDate": "2017-12-31"
        }
      }
    

    Dado que el 31 de diciembre de 2017 es domingo, la última aparición en esta serie será el lunes 25 de diciembre.

  • Reunión de 14:00 a 15:00 el primer jueves de meses alternos a partir del 29 de agosto de 2017

    • El requisito "primer jueves de meses alternos" se consigue estableciendo un patrón mensual relativo. La parte "de meses alternos" indica que interval debe establecerse en 2.
    • Dado que no hay ningún requisito de fecha de finalización, puede usarse un tipo de rango noEnd.
      "recurrence": {
        "pattern": {
          "type": "relativeMonthly",
          "interval": 2,
          "daysOfWeek": [ "Thursday" ],
          "index": "first"
        },
        "range": {
          "type": "noEnd",
          "startDate": "2017-08-29"
        }
      }
    

    Dado que el valor de startDate comienza tras el primer jueves de agosto, la primera aparición de esta serie será en septiembre.