Trabajando con Citas

Cargar y Guardar una Cita en Formato ICS

La clase Appointment en Aspose.Email para Java se puede usar para cargar una cita en formato ICS, así como para crear una nueva cita y guardarla en un disco en formato ICS. En este artículo, primero creamos una cita y la guardamos en un disco en formato ICS y luego la cargamos.

Cargar una Cita en Formato ICS

Para cargar una cita en formato ICS, se requieren los siguientes pasos:

  1. Crear una instancia de la clase Appointment.
  2. Llamar al método Load() proporcionando la ruta del archivo ICS.
  3. Leer cualquier propiedad para obtener información de la cita (archivo ICS).

Los siguientes fragmentos de código muestran cómo cargar una cita en formato ICS.

Crear una Cita y Guardar en Disco en Formato ICS

Se requieren los siguientes pasos para crear una cita y guardarla en formato ICS.

  1. Crear una instancia de la clase Appointment e inicializarla con este constructor.
  2. Pasar los siguientes argumentos en el constructor anterior:
    1. Asistentes
    2. Descripción
    3. Fecha de Finalización
    4. Ubicación
    5. Organizador
    6. Fecha de Inicio
    7. Resumen
    8. Fecha de Creación
    9. Fecha de Última Modificación
  3. Llamar al método Save() y especificar el nombre y formato del archivo en los argumentos.

La cita se puede abrir en Microsoft Outlook o cualquier programa que pueda cargar un archivo ICS. Si el archivo se abre en Microsoft Outlook, automáticamente agrega la cita al calendario de Outlook.

Los siguientes fragmentos de código muestran cómo crear y guardar una cita en un disco en formato ICS.

Guardar Citas en Formato MSG

Aspose.Email permite guardar citas directamente en archivos .msg. Las siguientes clases públicas están disponibles para personalizar el proceso de guardado de citas:

El siguiente ejemplo de código muestra cómo cargar una cita desde un archivo, y luego guardarla en dos formatos diferentes: .ics y .msg.

Appointment appointment = Appointment.load("fileName");
appointment.save("fileName.ics", new AppointmentIcsSaveOptions());
appointment.save("fileName.msg", new AppointmentMsgSaveOptions());

Crear una Cita con Contenido HTML

Es una práctica común usar el encabezado X-ALT-DESC en formato iCalendar (RFC 5545). Es una propiedad extendida que proporciona una descripción alternativa en formato legible por humanos de un elemento o evento del calendario. Este encabezado se utiliza a menudo para incluir una representación en texto simple o HTML de la descripción del evento, lo que puede ser útil para la compatibilidad con software de calendario más antiguo o para proporcionar una versión simplificada de la descripción. En casos en los que la descripción principal no es compatible o no se muestra correctamente en la aplicación de calendario del destinatario, se utiliza el encabezado X-ALT-DESC para proporcionar una descripción alternativa del evento. Permite al remitente incluir diferentes representaciones de la descripción del evento para asegurar una mejor compatibilidad y accesibilidad entre diferentes softwares y plataformas de calendario. Para crear una cita con contenido HTML, establezca la propiedad HtmlDescription en ‘true’. Pruebe el siguiente ejemplo de código que demuestra cómo crear y definir un objeto cita con detalles y configuraciones específicas, incluyendo la fecha, hora, ubicación, organizador, asistentes y una descripción formateada:

Date startDate = new Date();
Appointment appointment = new Appointment("Bygget 83",
        startDate, // fecha de inicio
        addHours(startDate, 1), // fecha de finalización
        new MailAddress("TintinStrom@from.com", "Tintin Strom"), // organizador
        MailAddressCollection.to_MailAddressCollection(
                new MailAddress("AinaMartensson@to.com", "Aina Martensson"))); // asistente
appointment.setHtmlDescription("<html>\n"
        + "     <style type=\"\"text/css\"\">\n"
        + "      .text {\n"
        + "             font-family:'Comic Sans MS';\n"
        + "             font-size:16px;\n"
        + "            }\n"
        + "     </style>\n"
        + "    <body>\n"
        + "     <p class=\"\"text\"\">Hola, estoy feliz de invitarte a nuestra fiesta.</p>\n"
        + "    </body>\n"
        + "    </html>");

Crear una Solicitud de Cita Borrador

Para guardar una cita en modo borrador, la propiedad Method de la clase Appointment debe establecerse en Publicar. El siguiente ejemplo de código demuestra el uso de esta propiedad como ejemplo.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
String sender = "test@gmail.com";
String recipient = "test@email.com";
MailMessage message = new MailMessage(sender, recipient, "", "");
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
calendar.set(2016, Calendar.NOVEMBER, 1, 0, 0, 0);
Date startDate = calendar.getTime();
calendar.set(2016, Calendar.DECEMBER, 1);
Date endDate = calendar.getTime();
MailAddressCollection attendees = new MailAddressCollection();
attendees.addMailAddress(new MailAddress("attendee_address@aspose.com", "Attendee"));
//WeeklyRecurrencePattern expected = new WeeklyRecurrencePattern(3);
Appointment app = new Appointment("", startDate, endDate, new MailAddress("organizer_address@aspose.com", "Organizer"), attendees);
/*
* Appointment app = new Appointment("Appointment Location",
* "Appointment Summary", "Appointment Description", startDate, endDate,
* new MailAddress("organizer_address@aspose.com", "Organizer"),
* attendees, expected);
*/
//Set the Appointment as Draft
app.setMethod(AppointmentMethodType.Publish);
message.addAlternateView(app.requestApointment());
MapiMessage msg = MapiMessage.fromMailMessage(message);
// Save the appointment as draft.
msg.save(dataDir + "appointment-draft.msg");

Creación de Cita Borrador desde Texto

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
String ical = "BEGIN:VCALENDAR\r\nMETHOD:PUBLISH\r\nPRODID:-//Aspose Ltd//iCalender Builder (v3.0)//EN\r\nVERSION:2.0\r\nBEGIN:VEVENT\r\nATTENDEE;CN=test@gmail.com:mailto:test@gmail.com\r\nDTSTART:20130220T171439\r\nDTEND:20130220T174439\r\nDTSTAMP:20130220T161439Z\r\nEND:VEVENT\r\nEND:VCALENDAR";
String sender = "test@gmail.com";
String recipient = "test@email.com";
MailMessage message = new MailMessage(sender, recipient, "", "");
AlternateView av = AlternateView.createAlternateViewFromString(ical, new ContentType("text/calendar"));
message.getAlternateViews().addItem(av);
MapiMessage msg = MapiMessage.fromMailMessage(message);
// Save the appointment as draft.
msg.save(dataDir + "DraftAppointment.msg");

Agregar y Quitar Adjuntos de Elementos del Calendario

Aspose.Email proporciona una colección de adjuntos que se puede usar para agregar y recuperar adjuntos asociados con elementos del calendario. Este artículo muestra cómo:

  1. Crear y agregar adjuntos a un objeto de clase Appointment.
  2. Recuperar información de adjuntos de una cita.
  3. Extraer adjuntos de una cita.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the resource directory.
String dataDir = Utils.getSharedDataDir(AddAndRetrieveAttachmentFromCalendarItems.class) + "email/";
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
calendar.set(2016, Calendar.NOVEMBER, 1, 0, 0, 0);
Date startDate = calendar.getTime();
calendar.set(2016, Calendar.DECEMBER, 1);
Date endDate = calendar.getTime();
MailAddressCollection attendees = new MailAddressCollection();
attendees.addMailAddress(new MailAddress("attendee_address@domain.com", "Attendee"));
WeeklyRecurrencePattern expected = new WeeklyRecurrencePattern(3);
Appointment app = new Appointment("Appointment Location", "Appointment Summary", "Appointment Description", startDate, endDate, new MailAddress("organizer_address@domain.com", "Organizer"),
attendees, expected);
//Attach a file from disc to this appointment
File file = new File(dataDir + "sample.xlsx");
FileInputStream fis = new FileInputStream(file);
Attachment att = new Attachment(fis, file.getName());
app.getAttachments().addItem(att);
fis.close();
String savedFile = "appWithAttachments.ics";
app.save(dataDir + savedFile, AppointmentSaveFormat.Ics);
Appointment app2 = Appointment.load(dataDir + savedFile);
System.out.println("Total Attachments: " + app2.getAttachments().size());
for (int i = 0; i < app2.getAttachments().size(); i++) {
att = app2.getAttachments().get_Item(i);
System.out.println(att.getName());
//Save the attachment to disc
att.save(dataDir + att.getName());
}

Formatear Citas

Los ejemplos de programación a continuación demuestran cómo usar la clase AppointmentFormattingOptions para formatear texto y HTML.

Ejemplo de Programación - Formateo de Texto

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
Appointment appointment = Appointment.load(dataDir + "test.ics");
AppointmentFormattingOptions formattingOptions = new AppointmentFormattingOptions();
formattingOptions.setLocationFormat("Where: {0}");
formattingOptions.setTitleFormat("Subject: {0}");
formattingOptions.setDescriptionFormat("\r\n*~*~*~*~*~*~*~*~*~*\r\n{0}");
System.out.println(appointment.getAppointmentText(formattingOptions));

Ejemplo de Programación - Formateo HTML

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
Appointment appointment = Appointment.load(dataDir + "test.ics");
AppointmentFormattingOptions formattingOptions = AppointmentFormattingOptions.createAsHtml();
formattingOptions.setLocationFormat("<FONT SIZE=2 FACE=\"Arial\"><b>Where: {0}</b></FONT><BR>");
formattingOptions.setTitleFormat("<FONT SIZE=2 FACE=\"Arial\"><b>Subject: {0}</b></FONT><BR>");
formattingOptions.setDescriptionFormat("<P><FONT SIZE=2 FACE=\"Arial\">-----------<br><i>{0}</i></FONT></P>");
System.out.println(appointment.getAppointmentText(formattingOptions));

Leer Múltiples Eventos de un Archivo ICS

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
String dataDir = Utils.getSharedDataDir(DisplayEmailInformation.class) + "email/";
List<Appointment> appointments = new ArrayList<Appointment>();
CalendarReader reader = new CalendarReader(dataDir + "US-Holidays.ics");
while (reader.nextEvent())
{
appointments.add(reader.getCurrent());
}
System.out.println("Number of events read: " + appointments.size());
//Process appointments loaded from events
//Reading events from a specific index
appointments = new ArrayList<Appointment>();
AppointmentLoadOptions options = new AppointmentLoadOptions();
options.setEventIndex(4);
reader = new CalendarReader(dataDir + "US-Holidays.ics", options);
//start reading from 4th appointment...
while (reader.nextEvent())
{
appointments.add(reader.getCurrent());
}

Escribir Múltiples Eventos en un Archivo ICS

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
IcsSaveOptions saveOptions = new IcsSaveOptions();
saveOptions.setAction(AppointmentAction.Create);
CalendarWriter writer = new CalendarWriter("WirteMultipleEventsToICS_out.ics", saveOptions);
//Set the start and end date of meeting
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
calendar.set(2018, Calendar.JUNE, 19, 19, 0, 0); //19 Jan, 2015 - 1900
Date startDate = calendar.getTime();
calendar.set(2018, Calendar.JUNE, 19, 20, 0, 0);
Date endDate = calendar.getTime();
MailAddressCollection attendees = new MailAddressCollection();
attendees.addItem(new MailAddress("recepientEmail@gmail.com"));
try {
for (int i = 0; i < 10; i++) {
//create Appointment instance
Appointment app = new Appointment("Room 112", //location
startDate, //start time
endDate, //end time
new MailAddress("organizer@domain.com"), //organizer
attendees //attendee
);
app.setDescription("Test body " + i);
app.setSummary("Test summary:" + i);
writer.write(app);
}
} finally {
writer.dispose();
}

Establecer el Estado de los Participantes de los Asistentes a la Cita

Aspose.Email para .NET API permite establecer el estado de los asistentes a la cita mientras se formula un mensaje de respuesta. Esto agrega la propiedad PARTSTAT al archivo ICS.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
String location = "Room 5";
java.util.Calendar c = java.util.Calendar.getInstance();
c.set(2011, 11, 10, 10, 12, 11);
Date startDate = c.getTime();
c.set(2012, 10, 13, 13, 11, 12);
Date endDate = c.getTime();
MailAddress organizer = new MailAddress("aaa@amail.com", "Organizer");
MailAddressCollection attendees = new MailAddressCollection();
MailAddress attendee1 = new MailAddress("bbb@bmail.com", "First attendee");
MailAddress attendee2 = new MailAddress("ccc@cmail.com", "Second attendee");
attendee1.setParticipationStatus(ParticipationStatus.Accepted);
attendee2.setParticipationStatus(ParticipationStatus.Declined);
attendees.addMailAddress(attendee1);
attendees.addMailAddress(attendee2);
Appointment target = new Appointment(location, startDate, endDate, organizer, attendees);

Personalizar el Identificador del Producto para iCalendar

Aspose.Email para Java API permite obtener o establecer el identificador del producto que creó el objeto iCalendar.

Cómo evitar la Validación de Direcciones al intentar Cargar Citas

Aspose.Email para Java API permite eludir el error de validación de correo electrónico estableciendo la opción IgnoreSmtpAddressCheck en el objeto AppointmentLoadOptions y pasándolo a la llamada de carga.

AppointmentLoadOptions lo = new AppointmentLoadOptions();
lo.setIgnoreSmtpAddressCheck(true);
Appointment appointment = Appointment.load("app.ics", lo);