Exchange Server のタスクの操作
タスクの操作
Aspose.Email は Exchange 上でタスク処理をサポートしており、使用するのは ExchangeTask クラス。異なるプロパティが公開されています ExchangeTask、例えば Subject, 状態, 期限日、および 優先度、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 プロパティを提供します。以下のコードスニペットは、タイムゾーンを指定する方法を示しています。
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 はタスクのステータス(完了、延期、進行中、未開始、他者待ち)でタスクを取得できます。 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);