ทำงานกับรายการปฏิทินบน Exchange Server

การส่งคำขอประชุม

บทความนี้แสดงวิธีส่งคำขอประชุมไปยังผู้รับหลายคนโดยใช้ Exchange Web Services และ Aspose.Email.

  1. สร้างคำขอประชุมโดยใช้คลาส Appointment และตั้งค่าที่ตั้ง, เวลา, และผู้เข้าร่วม.
  2. สร้างอินสแตนซ์ของคลาส MailMessage และตั้งค่านัดหมายโดยใช้เมธอด MailMessage.addAlternateView().
  3. เชื่อมต่อกับ 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. บทความนี้ให้ตัวอย่างโค้ดอย่างละเอียดเกี่ยวกับการทำงานกับรายการปฏิทิน. ตัวอย่างโค้ดต่อไปนี้แสดงวิธี:

  1. สร้างนัดหมาย.
  2. อัปเดตนัดหมาย.
  3. ลบ/ยกเลิกนัดหมาย.
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());
    }
}