Trabajando con Calendarios de Gmail
Agregar, Editar y Eliminar un Calendario
Aspose.Email permite a las aplicaciones gestionar los calendarios de Gmail usando IGmailClient, que proporciona características como agregar, eliminar y actualizar calendarios de Gmail. Esta clase de cliente devuelve una lista de objetos del tipo ExtendedCalendar que contienen información sobre los elementos del calendario de Gmail. La clase IGmailClient expone las siguientes funciones para los calendarios:
- createCalendar Para insertar un nuevo calendario
- listCalendars
Obtener la lista de todos los calendarios de un cliente
- deleteCalendar Se puede usar para eliminar un calendario
- fetchCalendar Se puede usar para obtener un calendario particular de un cliente
- updateCalendar Esta función se utiliza para insertar de nuevo un calendario modificado de un cliente
Para acceder a los calendarios, GoogleTestUser se inicializa utilizando las credenciales de la cuenta de gmail. GoogleOAuthHelper se usa para obtener el token de acceso para el usuario, el cual se utiliza posteriormente para inicializar IGmailClient.
Insertar, Obtener y Actualizar
Para insertar un calendario, inicializa un objeto del tipo Calendar e insértalo utilizando la función createCalendar. createCalendar devuelve el id del calendario recién insertado. Este id se puede usar para obtener el calendario del servidor. El siguiente fragmento de código te muestra cómo insertar, obtener y actualizar un calendario.
try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
// Insertar, obtener y actualizar calendario
Calendar calendar = new Calendar("Resumen", "Descripción", "Ubicación", "America/Los_Angeles");
// Insertar calendario y recuperar el mismo calendario usando el id
String id = client.createCalendar(calendar);
Calendar cal = client.fetchCalendar(id);
// Cambiar información en el calendario obtenido y actualizar el calendario
cal.setDescription("Nueva Descripción");
cal.setLocation("Nueva Ubicación");
client.updateCalendar(cal);
}
Eliminar un Calendario Particular
Para eliminar un calendario particular, necesitamos obtener la lista de todos los calendarios de un cliente y luego eliminar según sea necesario. listCalendars devuelve la lista de ExtendedCalendar que contiene los calendarios de Gmail. El siguiente fragmento de código te muestra cómo eliminar un calendario particular.
try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
// Acceder y eliminar calendario con resumen comenzando desde "Resumen del calendario"
String summary = "Resumen del calendario";
// Obtener lista de calendarios
ExtendedCalendar[] lst = client.listCalendars();
for (ExtendedCalendar extCal : lst) {
// Eliminar calendarios seleccionados
if (extCal.getSummary().startsWith(summary))
client.deleteCalendar(extCal.getId());
}
}
Trabajando con el Control de Acceso del Calendario
Aspose.Email proporciona control total sobre el control de acceso a los elementos del calendario. La función listAccessRules es expuesta por IGmailClient, que devuelve una lista de AccessControlRule. La información de cada regla puede ser recuperada, modificada y guardada de nuevo para el calendario de un cliente. IGmailClient contiene las siguientes funciones para gestionar las reglas de control de acceso.
- listAccessRules Esta función proporciona una lista de AccessControlRule
- createAccessRule Esta función crea una nueva regla de acceso para un calendario.
- updateAccessRule Esta función se utiliza para actualizar una regla de acceso.
- fetchAccessRule Se puede usar para obtener una regla de acceso particular para el calendario de un cliente
- deleteAccessRule Esta función se usa para eliminar una regla de acceso.
El siguiente fragmento de código te muestra cómo se utilizan las funciones para gestionar las reglas de acceso:
try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
// Recuperar lista de calendarios para el cliente actual
ExtendedCalendar[] calendarList = client.listCalendars();
// Obtener el id del primer calendario y recuperar la lista de AccessControlRule para el primer calendario
String calendarId = calendarList[0].getId();
AccessControlRule[] roles1 = client.listAccessRules(calendarId);
// Crear una regla de control de acceso local y establecer las propiedades de la regla
AccessControlRule rule = new AccessControlRule();
rule.setRole(AccessRole.reader);
rule.setScope(new AclScope(AclScopeType.user, email2));
// Insertar nueva regla para el calendario. Devuelve la regla recién creada
AccessControlRule createdRule = client.createAccessRule(calendarId, rule);
// Obtener lista de reglas
AccessControlRule[] roles2 = client.listAccessRules(calendarId);
// La longitud de la lista actual debería ser 1 más que la anterior
if (roles1.length + 1 == roles2.length) {
System.out.println("Las longitudes de las listas son correctas");
} else {
System.out.println("Las longitudes de las listas no son correctas");
return;
}
// Cambiar regla y actualizar la regla para el calendario seleccionado
createdRule.setRole(AccessRole.writer);
AccessControlRule updatedRule = client.updateAccessRule(calendarId, createdRule);
// Recuperar regla individual contra un calendario
AccessControlRule fetchedRule = client.fetchAccessRule(calendarId, createdRule.getId());
// Eliminar regla particular contra un calendario dado y recuperar la lista de todas las reglas para el mismo calendario
client.deleteAccessRule(calendarId, createdRule.getId());
AccessControlRule[] roles3 = client.listAccessRules(calendarId);
// Verificar que la longitud de la lista actual de reglas debería ser igual a la longitud de la lista original antes de agregar y eliminar la regla
if (roles1.length == roles3.length) {
System.out.println("Las longitudes de las listas son las mismas");
} else {
System.out.println("Las longitudes de las listas no son iguales");
return;
}
}
Trabajando con Configuración del Cliente e Información de Color
Aspose.Email admite el acceso a la configuración del cliente utilizando IGmailClient.getSettings. Devuelve una lista de configuraciones como se indica a continuación:
- dateFieldOrder
- displayAllTimezones
- hideInvitations
- format24HourTime
- defaultCalendarMode
- defaultEventLength
- locale
- remindOnRespondedEventsOnly
- alternateCalendar
- userLocation
- hideWeekends
- showDeclinedEvents
- weekStart
- weather
- customCalendarMode
- timezoneLabel
- timezone
- useKeyboardShortcuts
- country
De manera similar, la información de color para los clientes también se puede recuperar utilizando IGmailClient.getColors. Este objeto de información de color devuelve la lista de colores de primer plano, colores de fondo y fecha y hora de actualización.
Acceder a la Configuración del Cliente
El siguiente fragmento de código te muestra cómo se utilizan las funciones para acceder a la configuración del cliente:
try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
// Recuperar configuración del cliente
Dictionary<String, String> settings = client.getSettings();
if (settings.size() < 1) {
System.out.println("No hay configuraciones disponibles.");
return;
}
// Recorrer la lista de configuraciones
for (KeyValuePair<String, String> pair : settings) {
// Obtener el valor de la configuración y probar si las configuraciones son correctas
String value = client.getSetting(pair.getKey());
if (pair.getValue().equals(value)) {
System.out.println("Clave = " + pair.getKey() + ", Valor = " + pair.getValue());
} else {
System.out.println("No se pudieron recuperar las configuraciones");
}
}
}
Acceder a la Información de Color
El siguiente fragmento de código te muestra cómo se utilizan las funciones para acceder a la configuración de color del cliente.
try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
ColorsInfo colors = client.getColors();
Dictionary<String, Colors> palettes = colors.getCalendar();
// Recorrer la lista de configuraciones
for (KeyValuePair<String, Colors> pair : palettes) {
System.out.println("Clave = " + pair.getKey() + ", Color = " + pair.getValue());
}
System.out.println("Fecha de Actualización = " + colors.getUpdated());
}
Trabajando con Citas
Aspose.Email proporciona características para trabajar con Citas en los calendarios de Google. La siguiente es la lista de tareas que se pueden realizar en citas en el calendario de Google:
- Agregar Citas - createAppointment, importAppointment
- Recuperar lista de citas - listAppointments
- Recuperar cita particular - fetchAppointment, listAppointmentInstances
- Actualizar una cita - updateAppointment
- Mover cita de un calendario a otro - moveAppointment
- Eliminar cita - deleteAppointment
Agregar una Cita
El siguiente ejemplo de código demuestra la función de agregar una cita en un calendario. En este ejemplo se siguen los siguientes pasos:
- Crear e insertar un calendario.
- Recuperar lista de citas de un nuevo calendario.
- Crear una cita.
- Insertar la cita.
try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
// Crear calendario local
Calendar calendar1 = new Calendar("Resumen", null, null, "Europe/Kiev");
// Insertar calendario y obtener id del calendario insertado y recuperar el calendario usando un id
String id = client.createCalendar(calendar1);
Calendar cal1 = client.fetchCalendar(id);
String calendarId1 = cal1.getId();
try {
// Recuperar lista de citas del primer calendario
Appointment[] appointments = client.listAppointments(calendarId1);
if (appointments.length > 0) {
System.out.println("Número incorrecto de citas");
return;
}
// Obtener hora actual y calcular la hora después de una hora desde ahora
java.util.Calendar c = java.util.Calendar.getInstance();
Date startDate = c.getTime();
c.add(java.util.Calendar.HOUR_OF_DAY, 1);
Date endDate = c.getTime();
// Inicializar una colección de direcciones de correo y establecer las direcciones de correo de los asistentes
MailAddressCollection attendees = new MailAddressCollection();
attendees.add("User1.EMail@domain.com");
attendees.add("User3.EMail@domain.com");
// Crear una cita con los asistentes anteriores
Appointment app1 = new Appointment("Ubicación", startDate, endDate, MailAddress.to_MailAddress(email2), attendees);
// Establecer resumen de la cita, descripción, zona horaria de inicio/final
app1.setSummary("Nuevo Resumen");
app1.setDescription("Nueva Descripción");
app1.setStartTimeZone("Europe/Kiev");
app1.setEndTimeZone("Europe/Kiev");
// Insertar cita en el primer calendario insertado arriba y obtener la cita insertada
Appointment app2 = client.createAppointment(calendarId1, app1);
// Recuperar cita usando el id único
Appointment app3 = client.fetchAppointment(calendarId1, app2.getUniqueId());
} catch (Exception ex) {
System.err.println(ex);
}
}
Recuperar y Actualizar Cita
Aquí se demuestra la recuperación y actualización de calendarios de la siguiente manera:
- Recuperar una cita particular.
- Modificar la cita.
- Actualizar la cita en el calendario.
Se asume que un calendario con id “calendarId” y un id único de cita “AppointmentUniqueId” ya han sido extraídos. El siguiente fragmento de código te muestra cómo recuperar y actualizar una cita.
try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
String calendarId = client.listCalendars()[0].getId();
String AppointmentUniqueId = client.listAppointments(calendarId)[0].getUniqueId();
// Recuperar Cita
Appointment app3 = client.fetchAppointment(calendarId, AppointmentUniqueId);
// Cambiar la información de la cita
app3.setSummary("Nuevo Resumen");
app3.setDescription("Nueva Descripción");
app3.setLocation("Nueva Ubicación");
app3.setFlags(AppointmentFlags.AllDayEvent);
java.util.Calendar c = java.util.Calendar.getInstance();
c.add(java.util.Calendar.HOUR_OF_DAY, 2);
app3.setStartDate(c.getTime());
c.add(java.util.Calendar.HOUR_OF_DAY, 1);
app3.setEndDate(c.getTime());
app3.setStartTimeZone("Europe/Kiev");
app3.setEndTimeZone("Europe/Kiev");
// Actualizar la cita y obtener la cita actualizada
Appointment app4 = client.updateAppointment(calendarId, app3);
}
Mover y Eliminar Cita
Appointment se puede mover proporcionando el calendario de origen, el calendario de destino y el id único de la cita en el calendario de origen. El siguiente fragmento de código te muestra cómo mover y eliminar una cita.
try (IGmailClient client = GmailClient.getInstance(accessToken, email)) {
String SourceCalendarId = client.listCalendars()[0].getId();
String DestinationCalendarId = client.listCalendars()[1].getId();
String TargetAppUniqueId = client.listAppointments(SourceCalendarId)[0].getUniqueId();
// Recuperar la lista de citas en el calendario de destino antes de mover la cita
Appointment[] appointments = client.listAppointments(DestinationCalendarId);
System.out.println("Conteo antes de mover = " + appointments.length);
Appointment Movedapp = client.moveAppointment(SourceCalendarId, DestinationCalendarId, TargetAppUniqueId);
// Recuperar la lista de citas en el calendario de destino después de mover la cita
appointments = client.listAppointments(DestinationCalendarId);
System.out.println("Conteo después de mover = " + appointments.length);
// Eliminar una cita particular de un calendario usando el id único
client.deleteAppointment(DestinationCalendarId, Movedapp.getUniqueId());
// Recuperar la lista de citas. Debe ser una menos que las citas anteriores en el calendario de destino
appointments = client.listAppointments(DestinationCalendarId);
System.out.println("Conteo después de eliminar = " + appointments.length);
}