עבודה עם משימות ב-Exchange Server

עבודה עם משימות

Aspose.Email תומך בעיבוד משימות ב-Exchange באמצעות ExchangeTask class. מאפיינים שונים נחשפים על ידי ExchangeTask, כמו נושא, סטטוס, תאריך יעד, ו- עדיפות, ניתן להשתמש כדי להגדיר את המשימה ב-Exchange. ה EWSClient המחלקה חושפת פונקציות כגון createTask, updateTask, ו- deleteTask הן משמשות לעיבוד משימות ב-Exchange. מאמר זה מציג כיצד:

  • יצירת משימה חדשה.
  • הגדרת אזור הזמן של המשימה.
  • עדכון משימה.
  • מחיקת משימה.
  • שליחת בקשת משימה
  • שמירת משימה לדיסק

יצירת משימה חדשה

קטע הקוד הבא מראה כיצד ליצור משימה חדשה.

// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Create Exchange task object
ExchangeTask task = new ExchangeTask();

// Set task subject and status to In progress
task.setSubject("New-Test");
task.setStatus(ExchangeTaskStatus.InProgress);
client.createTask(client.getMailboxInfo().getTasksUri(), task);

ציון אזור זמן

ה IEWSClient ממשק ו ExchangeTask מספקים את התכונה TimeZoneId להגדרת מידע על אזור זמן בעת יצירת משימה. קטע הקוד הבא מראה כיצד לציין Timezone.

client.setTimezoneId("Central Europe Standard Time");

עדכון משימה

קטעי הקוד הבאים מראים איך לעדכן משימה בשרת Exchange.

// Create instance of ExchangeClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Get all tasks info collection from exchange
ExchangeMessageInfoCollection tasks = client.listMessages(client.getMailboxInfo().getTasksUri());

// Parse all the tasks info in the list
for (ExchangeMessageInfo info : (Iterable<ExchangeMessageInfo>) tasks) {
    // Fetch task from exchange using current task info
    ExchangeTask task = client.fetchTask(info.getUniqueUri());

    // Update the task status to NotStarted
    task.setStatus(ExchangeTaskStatus.NotStarted);

    // Set the task due date
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
    task.setDueDate(sdf.parse("26/02/2013 00:00:00"));

    // Set task priority
    task.setPriority(MailPriority.Low.getValue());

    // Update task on exchange
    client.updateTask(task);
}

מחיקת משימה

קטע הקוד הבא מראה כיצד למחוק משימה בשרת Exchange.

// Create instance of ExchangeClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Get all tasks info collection from exchange
ExchangeMessageInfoCollection tasks = client.listMessages(client.getMailboxInfo().getTasksUri());

// Parse all the tasks info in the list
for (ExchangeMessageInfo info : (Iterable<ExchangeMessageInfo>) tasks) {
    // Fetch task from exchange using current task info
    ExchangeTask task = client.fetchTask(info.getUniqueUri());

    // Check if the current task fulfills the search criteria
    if (task.getSubject().equals("test")) {
        // Delete task from exchange
        client.deleteItem(task.getUniqueUri(), DeletionOptions.getDeletePermanently());
    }
}

שליחת בקשת משימה

שירות Aspose.Email Exchange מספק אפשרות לשלוח בקשות משימה בדומה ל-Outlook. קטע הקוד הבא מראה כיצד לטעון הודעת בקשת משימה מהדיסק ולשלוח אותה באמצעות ה IEWSClient.

// Create instance of ExchangeClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

MsgLoadOptions options = new MsgLoadOptions();
options.setPreserveTnefAttachments(true);

// load task from .msg file
MailMessage eml = MailMessage.load(dataDir + "task.msg", options);
eml.setFrom(MailAddress.to_MailAddress("firstname.lastname@domain.com"));
eml.getTo().clear();
eml.getTo().addMailAddress(new MailAddress("firstname.lastname@domain.com"));
client.send(eml);

שמירת משימה לדיסק

Aspose.Email גם מאפשר לשמור משימות Exchange לדיסק בפורמט Outlook MSG. קטע הקוד הבא מראה כיצד לשמור משימה לדיסק.

ExchangeTask task = new ExchangeTask();
task.setSubject("TASK-ID - " + UUID.randomUUID());
task.setStatus(ExchangeTaskStatus.InProgress);

Calendar cal = Calendar.getInstance();
task.setStartDate(cal.getTime());
cal.add(Calendar.DATE, 3);
task.setDueDate(cal.getTime());
task.save(dstEmail);

רשימת משימות מ-Exchange Server

IEWSClient מספקת את listTasks מתודה שניתן להשתמש בה לאחזור משימות מ-Exchange Web Service. יש לה מספר גרסאות עודפות שניתן להשתמש בהן כדי לקבל את רשימת המשימות מתיקייה ספציפית או בעזרת קריטריוני חיפוש. דוגמת הקוד למטה מציגה קבלת כל המשימות או משימות ספציפיות מתיקיית Tasks.

IEWSClient client = EWSClient.getEWSClient(mailboxUri, credentials);

// Listing Tasks from Server
client.setTimezoneId("Central Europe Standard Time");
TaskCollection taskCollection = client.listTasks(client.getMailboxInfo().getTasksUri());

// print retrieved tasks' details
int iTasksCount = taskCollection.size();
for (int i = 0; i < iTasksCount; i++) {
    ExchangeTask task = (ExchangeTask) taskCollection.get_Item(i);
    System.out.println(task.getSubject());
    System.out.println(task.getStartDate());
    System.out.println(task.getDueDate());
}

// Listing Tasks from server based on Query - Completed and In-Progress
Integer[] selectedStatuses = new Integer[] { ExchangeTaskStatus.Completed, ExchangeTaskStatus.InProgress };
ExchangeQueryBuilder queryBuilder = new ExchangeQueryBuilder();
queryBuilder.getTaskStatus().in(Arrays.asList(selectedStatuses));
MailQuery query = queryBuilder.getQuery();

taskCollection = client.listTasks(client.getMailboxInfo().getTasksUri(), query);

// print retrieved tasks' details
iTasksCount = taskCollection.size();
for (int i = 0; i < iTasksCount; i++) {
    ExchangeTask task = (ExchangeTask) taskCollection.get_Item(i);
    System.out.println(task.getSubject());
    System.out.println(task.getStartDate());
    System.out.println(task.getDueDate());
}

סינון משימות מ-Exchange Server

Aspose.Email מספק אפשרות לקבל משימות ספציפיות מהשרת במקום לקבל את כל המשימות מהשרת. ה-API ניתן לשימוש לקבלת משימות לפי הסטטוס שלהן כגון Completed, Deferred, In Progress, Not started או Waiting on others. ה ExchangeQueryBuilder המחלקה יכולה לשמש לציון הקריטריון הרצוי באמצעות תכונת Status. היא גם מאפשרת לציין תנאים מרובים לקבלת משימות רצויות מ-Exchange Server. זאת מוצגת בדוגמת הקוד הבאה.

// Create instance of ExchangeClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Set timezone for tasks
client.setTimezoneId("Central Europe Standard Time");

// We use these status values for specifying in queries
Integer[] values = new Integer[] { ExchangeTaskStatus.Completed, ExchangeTaskStatus.Deferred, ExchangeTaskStatus.InProgress, ExchangeTaskStatus.NotStarted,
        ExchangeTaskStatus.WaitingOnOthers };

messageInfoCol = client.listMessages(client.getMailboxInfo().getTasksUri());

// Now retrieve the tasks with specific statuses
for (int status : values) {
    queryBuilder = new ExchangeQueryBuilder();
    queryBuilder.getTaskStatus().equals(status);
    query = queryBuilder.getQuery();
    messageInfoCol = client.listMessages(client.getMailboxInfo().getTasksUri(), query);
    fetchedTask = client.fetchTask(messageInfoCol.get_Item(0).getUniqueUri());
}

// retrieve all other than specified
for (int status : values) {
    queryBuilder = new ExchangeQueryBuilder();
    queryBuilder.getTaskStatus().notEquals((int) status);
    query = queryBuilder.getQuery();
    messageInfoCol = client.listMessages(client.getMailboxInfo().getTasksUri(), query);
}

// specifying multiple criterion
Integer[] selectedStatuses = new Integer[] { ExchangeTaskStatus.Completed, ExchangeTaskStatus.InProgress };

queryBuilder = new ExchangeQueryBuilder();
queryBuilder.getTaskStatus().in(Arrays.asList(selectedStatuses));
query = queryBuilder.getQuery();
messageInfoCol = client.listMessages(client.getMailboxInfo().getTasksUri(), query);

// list all those which are not in our specified statuses
queryBuilder = new ExchangeQueryBuilder();
queryBuilder.getTaskStatus().notIn(Arrays.asList(selectedStatuses));
query = queryBuilder.getQuery();
messageInfoCol = client.listMessages(client.getMailboxInfo().getTasksUri(), query);