Trabalhando com Itens de Calendário em Arquivo PST

Adicionando MapiCalendar ao PST

Criar Novo PST, Adicionar Subpastas e Mensagens mostrou como criar um arquivo PST e adicionar uma subpasta a ele. Com Aspose.Email, você pode adicionar MapiCalendar à subpasta Calendário de um arquivo PST que você criou ou carregou.

Abaixo estão os passos para adicionar MapiCalendar a um PST:

  1. Crie um objeto MapiCalendar.
  2. Defina as propriedades do MapiCalendar usando um construtor e métodos.
  3. Crie um PST usando o método PersonalStorage.create().
  4. Crie uma pasta predefinida (Calendário) na raiz do arquivo PST acessando a pasta raiz e, em seguida, chamando o método addMapiMessageItem().

O trecho de código abaixo mostra como criar um MapiCalendar e, em seguida, adicioná-lo à pasta Calendário de um arquivo PST recém-criado.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2016);
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.DAY_OF_MONTH, 1);
Date startDate = cal.getTime();
cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2016);
cal.set(Calendar.MONTH, Calendar.FEBRUARY);
cal.set(Calendar.DAY_OF_MONTH, 1);
Date endDate = cal.getTime();
// Create the appointment
MapiCalendar appointment = new MapiCalendar("LAKE ARGYLE WA 6743", "Appointment", "This is a very important meeting.", startDate, endDate);
// Create the meeting
MapiRecipientCollection attendees = new MapiRecipientCollection();
attendees.add("ReneeAJones@armyspy.com", "Renee A. Jones", MapiRecipientType.MAPI_TO);
attendees.add("SzllsyLiza@dayrep.com", "Szollosy Liza", MapiRecipientType.MAPI_TO);
MapiCalendar meeting = new MapiCalendar("Meeting Room 3 at Office Headquarters", "Meeting", "Please confirm your availability.", startDate,
endDate, "CharlieKhan@dayrep.com", attendees);
PersonalStorage pst = PersonalStorage.create(dataDir + "MapiCalendarToPST_out.pst", FileFormatVersion.Unicode);
FolderInfo calendarFolder = pst.createPredefinedFolder("Calendar", StandardIpmFolder.Appointments);
calendarFolder.addMapiMessageItem(appointment);
calendarFolder.addMapiMessageItem(meeting);

Salvar Itens de Calendário do Outlook PST em Disco no formato ICS

Este artigo mostra como acessar itens de calendário de um arquivo PST do Outlook e salvar o calendário em disco no formato ICS. Ele usa as classes PersonalStorage e MapiCalendar para obter as informações do calendário.

Abaixo estão os passos para salvar os itens do calendário:

  1. Carregue o arquivo PST na classe PersonalStorage.
  2. Navegue até a pasta Calendário.
  3. Obtenha o conteúdo da pasta Calendário para obter a coleção de mensagens.
  4. Percorra a coleção de mensagens.
  5. Chame o método PersonalStorage.extractMessage() para obter as informações de contato na classe MapiCalendar.
  6. Chame o método MapiCalendar.save() para salvar o item do calendário em disco no formato ICS.

O programa abaixo carrega um arquivo PST do disco e salva todos os itens de calendário no formato ICS. Os arquivos ICS podem ser usados em qualquer outro programa que pode carregar o arquivo de calendário ICS padrão. Se você abrir qualquer arquivo ICS no Microsoft Outlook, ele parecerá com o da captura de tela abaixo.

todo:image_alt_text
Figura: Item de calendário salvo com Aspose.Email
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Load the Outlook PST file
PersonalStorage pst = PersonalStorage.fromFile(dataDir + "Outlook.pst");
// Get the Calendar folder
FolderInfo folderInfo = pst.getRootFolder().getSubFolder("Calendar");
// Loop through all the calendar items in this folder
MessageInfoCollection messageInfoCollection = folderInfo.getContents();
for (MessageInfo messageInfo : messageInfoCollection) {
// Get the calendar information
MapiCalendar calendar = (MapiCalendar) pst.extractMessage(messageInfo).toMapiMessageItem();
// Display some contents on screen
System.out.println("Name: " + calendar.getSubject());
// Save to disk in ICS format
calendar.save("Calendar: " + calendar.getSubject() + ".ics", AppointmentSaveFormat.Ics);
}

Extrair Itens de Calendário de um Arquivo PST

A classe MapiCalendar representa um item de calendário no formato MAPI do Microsoft Outlook. Extraia uma mensagem de um arquivo PST e converta-a em um item de mensagem MAPI. O seguinte exemplo de código extrai um item de calendário de um arquivo PST e o converte em um objeto MapiCalendar para manipulação ou processamento adicional:

MapiCalendar cal = (MapiCalendar) pst.extractMessage(messageInfo).toMapiMessageItem();

Salvar Itens de Calendário no formato ICS com Timestamp Original

Use o exemplo de código acima para extrair um item de calendário de um arquivo PST e, em seguida, especifique opções adicionais para salvá-lo como ICS com timestamp original usando o método setKeepOriginalDateTimeStamp da classe MapiCalendarIcsSaveOptions:

MapiCalendar cal = (MapiCalendar) pst.extractMessage(messageInfo).toMapiMessageItem();

if (cal != null) {
    MapiCalendarIcsSaveOptions so = new MapiCalendarIcsSaveOptions();
    so.setKeepOriginalDateTimeStamp(true);
    cal.save("cal.ics", so);
}

Modificar/Deletar Ocorrências de Recorrências

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
Date startDate = addHours(new Date(), 12);
MapiCalendarEventRecurrence recurrence = new MapiCalendarEventRecurrence();
recurrence.setRecurrencePattern(new MapiCalendarDailyRecurrencePattern());
MapiCalendarRecurrencePattern pattern = recurrence.getRecurrencePattern();
pattern.setPatternType(MapiCalendarRecurrencePatternType.Day);
pattern.setPeriod(1);
pattern.setEndType(MapiCalendarRecurrenceEndType.NeverEnd);
Date exceptionDate = addDays(startDate, 1);
// adding one exception
MapiCalendarExceptionInfo exceptionInfo = new MapiCalendarExceptionInfo();
exceptionInfo.setLocation("London");
exceptionInfo.setSubject("Subj");
exceptionInfo.setOriginalStartDate(exceptionDate);
exceptionInfo.setStartDateTime(exceptionDate);
exceptionInfo.setEndDateTime(addHours(exceptionDate, 5));
pattern.getExceptions().addItem(exceptionInfo);
pattern.getModifiedInstanceDates().addItem(exceptionDate);
// every modified instance also has to have an entry in the DeletedInstanceDates field with the original instance date.
pattern.getDeletedInstanceDates().addItem(exceptionDate);
// adding one deleted instance
pattern.getDeletedInstanceDates().addItem(addHours(exceptionDate, 2));
MapiRecipientCollection recColl = new MapiRecipientCollection();
recColl.add("recepient@gmail.com", "R1", MapiRecipientType.MAPI_TO);
MapiCalendar newCal = new MapiCalendar(
"This is Location",
"This is Summary",
"This is recurrence test",
startDate,
addHours(startDate, 3),
"organizer@domain.com",
recColl);
newCal.setRecurrence(recurrence);
ByteArrayOutputStream memory = new ByteArrayOutputStream();
try {
PersonalStorage pst = PersonalStorage.create(memory, FileFormatVersion.Unicode);
FolderInfo calendarFolder = pst.createPredefinedFolder("Calendar", StandardIpmFolder.Appointments);
calendarFolder.addMapiMessageItem(newCal);
}
finally {
memory.close();
}