Exchange Sunucusunda Takvim Öğeleriyle Çalışma
Toplantı İsteklerini Gönderme
Bu makale, Exchange Web Services ve Aspose.Email kullanarak bir toplantı isteğini birden çok alıcıya nasıl göndereceğinizi gösterir.
- Appointment sınıfını kullanarak bir toplantı isteği oluşturun ve konum, zaman ve katılımcıları ayarlayın.
- MailMessage sınıfının bir örneğini oluşturun ve MailMessage.addAlternateView() metodunu kullanarak randevuyu ayarlayın.
- Exchange Server’a bağlanın ve send(MailMessage) metodunu kullanarak toplantı isteğini gönderin.
Bu EWSClient sınıf, Exchange Web Services (EWS) desteğiyle Exchange Server’lara bağlanmak için kullanılabilir. Bunun çalışması için sunucunun Exchange Server 2007 ya da daha yeni bir sürüm olması gerekir. Aşağıdaki kod parçacığı, toplantı isteklerini göndermek için EWS’nin nasıl kullanılacağını gösterir.
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 Kullanarak Takvim Öğeleriyle Çalışma
Aspose.Email, Exchange Web Service (EWS) istemcisi kullanarak randevu ekleme, güncelleme ve iptal etme yeteneği sunar. IEWSClients createAppointment, updateAppointment, ve cancelAppointment metodlar, EWS kullanarak takvim öğelerini manipüle etmeye izin verir. Bu makale, Takvim öğeleriyle çalışmaya yönelik ayrıntılı bir kod örneği sunar. Aşağıdaki kod örneği şunları gösterir:
- Randevu oluştur.
- Bir randevuyu güncelle.
- Bir randevu sil/iptal et.
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);
Belirtilen Tarih Aralığındaki Yinelenen Takvim Öğelerini Döndür
Aspose.Email EWSClient, StartDate ve EndDate ile belirtilen aralıkta yinelenen takvim öğelerinin döndürülmesini destekler. AppointmentQueryBuilder.setCalendarView(Date startDate, Date endDate, int maxEntriesReturned) metod, CalendarView belirtilirse, StartDate ve EndDate ile belirlenen aralıkta tek takvim öğeleri ve yinelenen takvim öğelerinin ortaya çıkışlarını içeren bir liste döndürür. maxEntriesReturned parametresi, maksimum sonuç sayısını tanımlar. (Tüm sonuçlar için Değer <= 0).
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getAppointment().setCalendarView(startDate, endDate, -1);
Appointment[] appointments = client.listAppointments(builder.getQuery());
Sayfalama Desteğiyle Randevu Listeleme
Tarafından sunulan ListAppointments metod IEWSClient API, Exchange sunucusundan randevuların tam listesini alır. Exchange Server’da çok sayıda randevu varsa bu zaman alabilir. API, aşağıdakilerin aşırı yüklenmiş metodlarını sunar listAppointments işleme sayfalama desteği sağlayan metod. Bu, sorgulama özelliğiyle farklı kombinasyonlarda da kullanılabilir. Exchange Server’dan sayfalama desteğiyle randevuları listelemek için aşağıdaki aşırı yüklenmiş metodlar mevcuttur.
- 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).
Aşağıdaki kod parçacığı, sayfalama desteğiyle randevuları nasıl listeleyeceğinizi gösterir.
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();
}
Exchange Server’da İkincil Takvim Klasörüne Etkinlik Ekleme
Aspose.Email API, Exchange Server’da ikincil bir Takvim klasörü oluşturmanıza olanak tanır IEWSClient. Randevular daha sonra ikincil takvimden eklenebilir, güncellenebilir veya iptal edilebilir. createAppointment, updateAppointment ve cancelAppointment metodlar. Aşağıdaki kod örneklerinde bu özelliğin işlevselliğini göstermek için aşağıdaki API metodları ve özellikleri kullanılmıştır. Lütfen bu özelliğin Aspose.Email for Java 6.5.0 ve üzeri sürümlerinde desteklendiğini unutmayın.
- Metod IEWSClient.cancelAppointment(Appointment, String).
- Metod IEWSClient.cancelAppointment(String, String).
- Metod IEWSClient.createAppointment(Appointment, String).
- Metod IEWSClient.createFolder(String, String, ExchangeFolderPermissionCollection, String).
- Metod IEWSClient.fetchAppointment(String, String).
- Metod IEWSClient.updateAppointment(Appointment, String).
- Özellik IEWSClient.CurrentCalendarFolderUri.
Aşağıdaki kod parçacığı, exchange sunucusundaki ikincil takvim klasörüne bir etkinlik nasıl eklenir gösterir.
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();
}
Takvim Davetini Paylaşma
Microsoft Exchange sunucusu, aynı Exchange sunucusuna kayıtlı diğer kullanıcılara takvim davetleri göndererek takvimleri paylaşma olanağı sunar. Aspose.Email API, takvimi EWS API’si aracılığıyla paylaşma imkanı sağlayarak aynı yeteneği sunar.
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();
}
Takvim Öğelerinden Genişletilmiş Özellik Bilgilerini Getirme
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());
}
}