ทำงานกับรายการปฏิทินบน Exchange Server
การส่งคำขอประชุม
บทความนี้แสดงวิธีส่งคำขอประชุมไปยังผู้รับหลายคนโดยใช้ Exchange Web Services และ Aspose.Email.
- สร้างคำขอประชุมโดยใช้คลาส Appointment และตั้งค่าที่ตั้ง, เวลา, และผู้เข้าร่วม.
- สร้างอินสแตนซ์ของคลาส MailMessage และตั้งค่านัดหมายโดยใช้เมธอด MailMessage.addAlternateView().
- เชื่อมต่อกับ Exchange Server และส่งคำขอประชุมโดยใช้เมธอด send(MailMessage).
นี้ EWSClient คลาสนี้สามารถใช้เชื่อมต่อกับ Exchange Server ที่รองรับ 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. The 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 Server พร้อมการรองรับการแบ่งหน้า.
- 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();
}
การเพิ่มเหตุการณ์ในโฟลเดอร์ปฏิทินรองบน Exchange Server
Aspose.Email API ช่วยให้คุณสร้างโฟลเดอร์ปฏิทินรองบน Exchange Server โดยใช้ 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 server ให้ความสามารถในการแชร์ปฏิทินโดยการส่งคำเชิญปฏิทินไปยังผู้ใช้คนอื่นที่ลงทะเบียนบนเซิร์ฟเวอร์ Exchange เดียวกัน. API ของ Aspose.Email ให้ความสามารถเดียวกันโดยอนุญาตให้แชร์ปฏิทินผ่าน EWS API.
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());
}
}