Làm việc với Nhiệm vụ trên máy chủ Exchange

Làm việc với các tác vụ

Aspose.Email hỗ trợ xử lý tác vụ trên Exchange bằng cách sử dụng ExchangeTask lớp. Các thuộc tính khác nhau được lộ ra bởi ExchangeTask, giống như Tiêu đề, Trạng thái, Ngày đến hạn, và Ưu tiên, có thể được sử dụng để cấu hình nhiệm vụ trên Exchange. The EWSClient lớp công khai các hàm như createTask, updateTask, và deleteTask được sử dụng để xử lý nhiệm vụ trên Exchange. Bài viết này cho biết cách:

  • Tạo một nhiệm vụ mới.
  • Đặt múi giờ cho nhiệm vụ.
  • Cập nhật một nhiệm vụ.
  • Xóa một nhiệm vụ.
  • Gửi Yêu cầu Nhiệm vụ
  • Lưu Nhiệm vụ vào Đĩa

Tạo Nhiệm vụ Mới

Đoạn mã sau đây cho bạn thấy cách tạo một nhiệm vụ mới.

// 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);

Chỉ định Múi giờ

Cái IEWSClient giao diện và ExchangeTask cung cấp thuộc tính TimeZoneId để đặt thông tin múi giờ khi tạo nhiệm vụ. Đoạn mã sau đây cho bạn thấy cách chỉ định múi giờ.

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

Cập nhật Nhiệm vụ

Các đoạn mã sau đây cho thấy cách cập nhật một nhiệm vụ trên máy chủ 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);
}

Xóa Nhiệm vụ

Đoạn mã sau đây cho bạn thấy cách xóa một nhiệm vụ trên máy chủ 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());
    }
}

Gửi Yêu cầu Nhiệm vụ

Dịch vụ Aspose.Email Exchange cung cấp khả năng gửi yêu cầu nhiệm vụ tương tự Outlook. Đoạn mã sau đây cho bạn thấy cách tải tin nhắn yêu cầu nhiệm vụ từ đĩa và gửi nó bằng cách sử dụng 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);

Lưu Nhiệm vụ vào Đĩa

Aspose.Email cũng cho phép lưu Nhiệm vụ Exchange vào đĩa ở định dạng Outlook MSG. Đoạn mã sau đây cho bạn thấy cách lưu một nhiệm vụ vào đĩa.

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);

Liệt kê Nhiệm vụ từ máy chủ Exchange

IEWSClient cung cấp listTasks phương thức có thể được sử dụng để lấy các nhiệm vụ từ Exchange Web Service. Nó có một số overload cho phép truy xuất danh sách nhiệm vụ từ một thư mục cụ thể hoặc bằng một số tiêu chí tìm kiếm. Mẫu mã dưới đây minh họa việc lấy toàn bộ hoặc các nhiệm vụ cụ thể từ thư mục 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());
}

Lọc Nhiệm vụ từ máy chủ Exchange

Aspose.Email cung cấp khả năng truy xuất các nhiệm vụ cụ thể từ máy chủ thay vì truy xuất toàn bộ nhiệm vụ. API có thể được sử dụng để lấy nhiệm vụ theo trạng thái như Completed, Deferred, In Progress, Not started hoặc Waiting on others. The ExchangeQueryBuilder lớp có thể được sử dụng để chỉ định tiêu chí mong muốn bằng thuộc tính Status. Nó cũng cho phép chỉ định nhiều điều kiện để truy xuất các nhiệm vụ mong muốn từ máy chủ Exchange. Điều này được minh họa bằng mẫu mã sau.

// 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);