עבודה עם פריטי לוח שנה ב-Exchange Server

שליחת בקשות פגישה

מאמר זה מציג איך לשלוח בקשת פגישה למספר מקבלים באמצעות 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). ה-IEWClients 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. זה עשוי לקחת זמן אם יש כמות גדולה של פגישות על השרת. ה-API מספק מתודות עודפות של listAppointments מתודה המספקת תמיכת פייג’ינג לפעולה. ניתן להשתמש בה במגוון שילובים עם תכונת השאילתא. המתודות העודפות הבאות זמינות למיצוע פגישות מ-Exchange Server עם תמיכת Paging.

  • 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

ה-API של Aspose.Email מאפשר ליצור תיקיית לוח שנה משנית ב-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 מספק אפשרות לשתף לוחות שנה על ידי שליחת הזמנות לוח שנה למשתמשים אחרים הרשומים באותו שרת 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());
    }
}