ทำงานกับงานบน Exchange Server

ทำงานกับงาน

Aspose.Email รองรับการประมวลผลงานบน Exchange โดยใช้ ExchangeTask class. คุณสมบัติต่าง ๆ ที่เปิดเผยโดย ExchangeTask, เช่น Subject, สถานะ, วันครบกำหนด, และ ระดับความสำคัญ, สามารถใช้เพื่อกำหนดค่าการทำงานบน Exchange. The 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 สำหรับตั้งค่าข้อมูลโซนเวลาเมื่อสร้างงาน. โค้ดตัวอย่างต่อไปนี้แสดงวิธีระบุโซนเวลา.

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