Робота з елементами календаря на сервері Exchange
Надсилання запитів на зустріч
У цій статті показано, як надіслати запит на зустріч кільком одержувачам, використовуючи Exchange Web Services та Aspose.Email.
- Створіть запит на зустріч за допомогою класу Appointment і вкажіть місце, час та учасників.
- Створіть екземпляр класу MailMessage і встановіть зустріч, використовуючи метод MailMessage.addAlternateView().
- Підключіться до сервера Exchange та надішліть запит на зустріч, використовуючи метод send(MailMessage).
The EWSClient клас можна використовувати для підключення до серверів Exchange з підтримкою Exchange Web Services (EWS). Для цього сервер повинен бути Exchange Server 2007 або новішим. Наступний фрагмент коду показує, як використовувати EWS для надсилання запитів на зустріч.
try {
// Create instance of IEWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
Calendar c = Calendar.getInstance();
c.add(Calendar.HOUR_OF_DAY, 1);
Date startTime = c.getTime();
c.add(Calendar.MINUTE, 90);
Date endTime = c.getTime();
// Create the meeting request
Appointment app = new Appointment("meeting request", startTime, endTime, MailAddress.to_MailAddress("administrator@test.com"),
MailAddressCollection.to_MailAddressCollection("bob@test.com"));
app.setSummary("meeting request summary");
app.setDescription("description");
c = Calendar.getInstance();
c.add(Calendar.DATE, 5);
RecurrencePattern pattern = new DailyRecurrencePattern(c.getTime());
app.setRecurrence(pattern);
// Create the message and set the meeting request
MailMessage msg = new MailMessage();
msg.setFrom(MailAddress.to_MailAddress("administrator@test.com"));
msg.setTo(MailAddressCollection.to_MailAddressCollection("bob@test.com"));
msg.isBodyHtml(true);
msg.setHtmlBody("<h3>HTML Heading</h3><p>Email Message detail</p>");
msg.setSubject("meeting request");
msg.addAlternateView(app.requestApointment(0));
// send the appointment
client.send(msg);
System.out.println("Appointment request sent");
} catch (java.lang.RuntimeException ex) {
System.out.println(ex.getMessage());
}
Робота з елементами календаря за допомогою EWS
Aspose.Email забезпечує можливість додавати, оновлювати та скасовувати зустрічі за допомогою клієнта Exchange Web Service (EWS). IEWSClients createAppointment, updateAppointment, та cancelAppointment методи дозволяють маніпулювати елементами календаря за допомогою EWS. У цій статті наведено детальний приклад роботи з елементами календаря. Наступний приклад коду показує, як:
- Створити подію.
- Оновити зустріч.
- Видалити/скасувати зустріч.
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "your.username", "your.Password");
Calendar c = Calendar.getInstance();
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
Date startTime = c.getTime();
c.add(Calendar.HOUR_OF_DAY, 1);
Date endTime = c.getTime();
String timeZone = "America/New_York";
Appointment app = new Appointment("Room 112", startTime, endTime, MailAddress.to_MailAddress("organizeraspose-email.test3@domain.com"),
MailAddressCollection.to_MailAddressCollection("attendee@gmail.com"));
app.setTimeZone(timeZone);
app.setSummary("NETWORKNET-34136" + UUID.randomUUID().toString());
app.setDescription("NETWORKNET-34136 Exchange 2007/EWS: Provide support for Add/Update/Delete calendar items");
String uid = client.createAppointment(app);
Appointment fetchedAppointment1 = client.fetchAppointment(uid);
app.setLocation("Room 115");
app.setSummary("New summary for " + app.getSummary());
app.setDescription("New Description");
client.updateAppointment(app);
Appointment[] appointments1 = client.listAppointments();
System.out.println("Total Appointments: " + appointments1.length);
Appointment fetchedAppointment2 = client.fetchAppointment(uid);
System.out.println("Summary: " + fetchedAppointment2.getSummary());
System.out.println("Location: " + fetchedAppointment2.getLocation());
System.out.println("Description: " + fetchedAppointment2.getDescription());
client.cancelAppointment(app);
Appointment[] appointments2 = client.listAppointments();
System.out.println("Total Appointments: " + appointments2.length);
Повернення повторюваних елементів календаря у вказаному діапазоні дат
Aspose.Email EWSClient підтримує повернення повторюваних елементів календаря у діапазоні, визначеному StartDate і EndDate. AppointmentQueryBuilder.setCalendarView(Date startDate, Date endDate, int maxEntriesReturned) метод, якщо вказано CalendarView, повертає список окремих елементів календаря та випадків повторюваних елементів у діапазоні, визначеному StartDate і EndDate. Параметр maxEntriesReturned описує максимальну кількість результатів (значення <= 0 – усі результати).
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getAppointment().setCalendarView(startDate, endDate, -1);
Appointment[] appointments = client.listAppointments(builder.getQuery());
Виведення зустрічей з підтримкою пагінації
Метод ListAppointments, який надає IEWSClient API отримує повний список зустрічей з сервера Exchange. Це може зайняти час, якщо на сервері Exchange багато зустрічей. API надає перевантажені методи listAppointments метод, який забезпечує підтримку пагінації операції. Це також можна використовувати у різних комбінаціях з функцією запитів. Доступні такі перевантажені методи для отримання списку зустрічей з підтримкою пагінації з сервера Exchange.
- AppointmentCollection IEWSClient.listAppointments(int itemsPerPage).
- AppointmentCollection IEWSClient.listAppointments(String folderUri, int itemsPerPage).
- AppointmentCollection IEWSClient.listAppointments(MailQuery query, int itemsPerPage).
- AppointmentCollection IEWSClient.listAppointments(String folderUri, MailQuery query, int itemsPerPage).
- AppointmentCollection IEWSClient.listAppointments(int itemsPerPage, int itemOffset).
- AppointmentCollection IEWSClient.listAppointments(String folderUri, int itemsPerPage, int itemOffset).
- AppointmentCollection IEWSClient.listAppointments(MailQuery query, int itemsPerPage, int itemOffset).
- AppointmentCollection IEWSClient.listAppointments(String folderUri, MailQuery query, int itemsPerPage, int itemOffset).
Наступний фрагмент коду показує, як вивести список зустрічей з підтримкою пагінації.
IEWSClient client = EWSClient.getEWSClient("exchange.domain.com", "username", "password");
try {
try {
Appointment[] appts = client.listAppointments();
System.out.println(appts.length);
Calendar c = Calendar.getInstance();
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
int appNumber = 10;
Map<String, Appointment> appointmentsDict = new HashMap<String, Appointment>();
for (int i = 0; i < appNumber; i++) {
c.set(Calendar.HOUR_OF_DAY, i + 1);
Date startTime = c.getTime();
c.set(Calendar.HOUR_OF_DAY, i + 2);
Date endTime = c.getTime();
String timeZone = "America/New_York";
Appointment appointment = new Appointment("Room 112", startTime, endTime, MailAddress.to_MailAddress("from@domain.com"),
MailAddressCollection.to_MailAddressCollection("to@domain.com"));
appointment.setTimeZone(timeZone);
appointment.setSummary("NETWORKNET-35157_3 - " + UUID.randomUUID().toString());
appointment.setDescription("EMAILNET-35157 Move paging parameters to separate class");
String uid = client.createAppointment(appointment);
appointmentsDict.put(uid, appointment);
}
AppointmentCollection totalAppointmentCol = AppointmentCollection.to_AppointmentCollection(client.listAppointments());
///// LISTING APPOINTMENTS WITH PAGING SUPPORT ///////
int itemsPerPage = 2;
List<AppointmentPageInfo> pages = new ArrayList<AppointmentPageInfo>();
AppointmentPageInfo pagedAppointmentCol = client.listAppointmentsByPage(itemsPerPage);
System.out.println(pagedAppointmentCol.getItems().size());
pages.add(pagedAppointmentCol);
while (!pagedAppointmentCol.getLastPage()) {
pagedAppointmentCol = client.listAppointmentsByPage(itemsPerPage, pagedAppointmentCol.getPageOffset() + 1);
pages.add(pagedAppointmentCol);
}
int retrievedItems = 0;
// foreach to while statements conversion
for (AppointmentPageInfo folderCol : pages) {
retrievedItems += folderCol.getItems().size();
}
} finally {
}
} finally {
client.dispose();
}
Додавання події до вторинної папки Calendar на сервері Exchange
API Aspose.Email дозволяє створити вторинну папку Calendar на сервері Exchange за допомогою IEWSClient. Потім зустрічі можна додавати, оновлювати або скасовувати у вторинному календарі за допомогою createAppointment, updateAppointment і cancelAppointment методи. Нижче у прикладах коду використані наведені API‑методи та властивості, щоб продемонструвати функціональність цієї можливості. Зауважте, що ця можливість підтримується Aspose.Email for Java, починаючи з версії 6.5.0.
- Метод IEWSClient.cancelAppointment(Appointment, String).
- Метод IEWSClient.cancelAppointment(String, String).
- Метод IEWSClient.createAppointment(Appointment, String).
- Метод IEWSClient.createFolder(String, String, ExchangeFolderPermissionCollection, String).
- Метод IEWSClient.fetchAppointment(String, String).
- Метод IEWSClient.updateAppointment(Appointment, String).
- Властивість IEWSClient.CurrentCalendarFolderUri.
Наступний фрагмент коду показує, як додати подію до вторинної папки календаря на сервері Exchange.
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "your.username", "your.Password");
try {
try {
// Create an appointmenta that will be added to secondary calendar folder
Calendar c = Calendar.getInstance();
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
Date startTime = c.getTime();
c.add(Calendar.HOUR_OF_DAY, 1);
Date endTime = c.getTime();
String timeZone = "America/New_York";
Appointment[] listAppointments;
Appointment appointment = new Appointment("Room 121", startTime, endTime, MailAddress.to_MailAddress("from@domain.com"),
MailAddressCollection.to_MailAddressCollection("attendee@domain.com"));
appointment.setTimeZone(timeZone);
appointment.setSummary("EMAILNET-35198 - " + UUID.randomUUID().toString());
appointment.setDescription("EMAILNET-35198 Ability to add event to Secondary Calendar of Office 365");
// Verify that the new folder has been created
ExchangeFolderInfoCollection calendarSubFolders = client.listSubFolders(client.getMailboxInfo().getCalendarUri());
String getfolderName;
String setFolderName = "New Calendar";
boolean alreadyExits = false;
// Verify that the new folder has been created already exits or not
for (int i = 0; i < calendarSubFolders.size(); i++) {
getfolderName = calendarSubFolders.get_Item(i).getDisplayName();
if (getfolderName.equals(setFolderName)) {
alreadyExits = true;
}
}
if (alreadyExits) {
System.out.println("Folder Already Exists");
} else {
// Create new calendar folder
client.createFolder(client.getMailboxInfo().getCalendarUri(), setFolderName, null, "IPF.Appointment");
System.out.println(calendarSubFolders.size());
// Get the created folder URI
String newCalendarFolderUri = calendarSubFolders.get_Item(0).getUri();
// appointment api with calendar folder uri
// Create
client.createAppointment(appointment, newCalendarFolderUri);
appointment.setLocation("Room 122");
// update
client.updateAppointment(appointment, newCalendarFolderUri);
// list
listAppointments = client.listAppointments(newCalendarFolderUri);
// list default calendar folder
listAppointments = client.listAppointments(client.getMailboxInfo().getCalendarUri());
// Cancel
client.cancelAppointment(appointment, newCalendarFolderUri);
listAppointments = client.listAppointments(newCalendarFolderUri);
// appointment api with context current calendar folder uri
client.setCurrentCalendarFolderUri(newCalendarFolderUri);
// Create
client.createAppointment(appointment);
appointment.setLocation("Room 122");
// update
client.updateAppointment(appointment);
// list
listAppointments = client.listAppointments();
// list default calendar folder
listAppointments = client.listAppointments(client.getMailboxInfo().getCalendarUri());
// Cancel
client.cancelAppointment(appointment);
listAppointments = client.listAppointments();
}
} finally {
}
} finally {
client.dispose();
}
Запрошення до спільного календаря
Сервер Microsoft Exchange надає можливість ділитися календарями, надсилаючи запрошення іншим користувачам, зареєстрованим на тому ж сервері Exchange. API Aspose.Email забезпечує таку ж можливість, дозволяючи ділитися календарем за допомогою API EWS.
final IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
try {
// delegate calendar access permission
ExchangeDelegateUser delegateUser = new ExchangeDelegateUser("sharingfrom@domain.com", ExchangeDelegateFolderPermissionLevel.NotSpecified);
delegateUser.getFolderPermissions().setCalendarFolderPermissionLevel(ExchangeDelegateFolderPermissionLevel.Reviewer);
client.delegateAccess(delegateUser, "sharingfrom@domain.com");
// Create invitation
MapiMessage mapiMessage = client.createCalendarSharingInvitationMessage("sharingfrom@domain.com");
MailConversionOptions options = new MailConversionOptions();
options.setConvertAsTnef(true);
MailMessage mail = mapiMessage.toMailMessage(options);
client.send(mail);
} finally {
client.dispose();
}
Отримання інформації про розширені атрибути елементів календаря
IEWSClient client = EWSClient.getEWSClient("https://exchange.office365.com/Exchange.asmx", "username", "password");
java.util.List<String> uriList = java.util.Arrays.asList(client.listItems(client.getMailboxInfo().getCalendarUri()));
// Define the Extended Attribute Property Descriptor for searching purpose
// In this case, we have a K1 Long named property for Calendar item
UUID uuid = UUID.fromString("00020329-0000-0000-C000-000000000046");
PropertyDescriptor propertyDescriptor = new PidNamePropertyDescriptor("K1", PropertyDataType.Integer32, uuid);
java.util.List<PropertyDescriptor> propertyDescriptors = java.util.Arrays.asList(new PropertyDescriptor[] { propertyDescriptor });
IGenericList<MapiCalendar> mapiCalendarList = client.fetchMapiCalendar(uriList, propertyDescriptors);
for (MapiCalendar cal : mapiCalendarList) {
for (MapiNamedProperty namedProperty : (Iterable<MapiNamedProperty>) cal.getNamedProperties().getValues()) {
System.out.println(namedProperty.getNameId() + " = " + namedProperty.getInt32());
}
}