کار با موارد تقویم در سرور Exchange

ارسال درخواست‌های جلسه

این مقاله نشان می‌دهد چگونه یک درخواست جلسه را به چندین گیرنده با استفاده از Exchange Web Services و Aspose.Email ارسال کنیم.

  1. یک درخواست جلسه با استفاده از کلاس Appointment ایجاد کنید و مکان، زمان و شرکت‌کنندگان را تنظیم کنید.
  2. یک نمونه از کلاس MailMessage ایجاد کنید و تقویم را با استفاده از متد MailMessage.addAlternateView() تنظیم کنید.
  3. به سرور Exchange متصل شوید و درخواست جلسه را با استفاده از متد send(MailMessage) ارسال کنید.

این 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 را فراهم می‌کنند. این مقاله یک نمونه کد دقیق برای کار با موارد تقویم ارائه می‌دهد. قطعه کد زیر نشان می‌دهد چگونه:

  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 پشتیبانی می‌کند. 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 متدهای overloaded زیر را ارائه می‌دهد. listAppointments متدی که پشتیبانی از صفحه‌بندی را به عملیات می‌دهد. این می‌تواند در ترکیب‌های مختلف با ویژگی جستجو نیز استفاده شود. متدهای overloaded زیر برای لیست کردن تقویم‌ها از سرور 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();
        }

افزودن رویداد به پوشهٔ تقویم ثانویه در سرور Exchange

API Aspose.Email به شما امکان می‌دهد یک پوشهٔ تقویم ثانویه را در سرور Exchange با استفاده از IEWSClient. سپس تقویم‌ها می‌توانند از تقویم ثانویه با استفاده از createAppointment, updateAppointment و cancelAppointment متدها. متدها و ویژگی‌های API زیر در نمونه‌های کد ارائه شده برای نمایش عملکرد این ویژگی استفاده می‌شوند. لطفاً توجه داشته باشید که این ویژگی از Aspose.Email برای 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());
    }
}