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:
- Crear una instancia de la clase Appointment.
- Llamar al método Load() proporcionando la ruta del archivo ICS.
- 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.
- Crear una instancia de la clase Appointment e inicializarla con este constructor.
- Pasar los siguientes argumentos en el constructor anterior:
- Asistentes
- Descripción
- Fecha de Finalización
- Ubicación
- Organizador
- Fecha de Inicio
- Resumen
- Fecha de Creación
- Fecha de Última Modificación
- 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:
- La clase AppointmentMsgSaveOptions con opciones adicionales para guardar citas en formato msg.
- La clase AppointmentIcsSaveOptions con opciones adicionales para guardar citas en formato ics. Se añadió para reemplazar la obsoleta IcsSaveOptions.
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:
- Crear y agregar adjuntos a un objeto de clase Appointment.
- Recuperar información de adjuntos de una cita.
- 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);