Praca z zadaniami na serwerze Exchange
Praca z zadaniami
Aspose.Email obsługuje przetwarzanie zadań na Exchange przy użyciu ExchangeTask klasa. Różne właściwości udostępniane przez ExchangeTask, jak Subject, Status, Data terminu, oraz Priorytet, może być użyta do skonfigurowania zadania na Exchange. The EWSClient klasa udostępnia funkcje takie jak createTask, updateTask, oraz deleteTask które są używane do przetwarzania zadań na Exchange. Ten artykuł pokazuje, jak:
- Utwórz nowe zadanie.
- Ustaw strefę czasową zadania.
- Zaktualizuj zadanie.
- Usuń zadanie.
- Wyślij żądanie zadania
- Zapisz zadanie na dysku
Utworzenie nowego zadania
Poniższy fragment kodu pokazuje, jak utworzyć nowe zadanie.
// 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);
Określanie strefy czasowej
Ten IEWSClient interfejs i ExchangeTask zapewniają właściwość TimeZoneId do ustawiania informacji o strefie czasowej przy tworzeniu zadania. Poniższy fragment kodu pokazuje, jak określić strefę czasową.
client.setTimezoneId("Central Europe Standard Time");
Aktualizacja zadania
Poniższe fragmenty kodu pokazują, jak zaktualizować zadanie na serwerze 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);
}
Usuwanie zadania
Poniższy fragment kodu pokazuje, jak usunąć zadanie na serwerze 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());
}
}
Wysyłanie żądania zadania
Usługa Aspose.Email Exchange umożliwia wysyłanie żądań zadań podobnie jak Outlook. Poniższy fragment kodu pokazuje, jak wczytać wiadomość żądania zadania z dysku i wysłać ją przy użyciu 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);
Zapisywanie zadania na dysku
Aspose.Email umożliwia również zapisywanie zadań Exchange na dysku w formacie Outlook MSG. Poniższy fragment kodu pokazuje, jak zapisać zadanie na dysku.
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);
Wylistowywanie zadań z serwera Exchange
IEWSClient udostępnia listTasks metoda, którą można użyć do pobierania zadań z usługi Exchange Web Service. Ma kilka przeciążeń, które umożliwiają pobranie listy zadań z określonego folderu lub przy użyciu określonych kryteriów wyszukiwania. Poniższy przykład kodu ilustruje pobieranie wszystkich lub wybranych zadań z folderu 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());
}
Filtrowanie zadań z serwera Exchange
Aspose.Email umożliwia pobieranie konkretnych zadań z serwera zamiast pobierania wszystkich zadań. API może być użyte do pobierania zadań według ich statusu, takiego jak Completed, Deferred, In Progress, Not started lub Waiting on others. ExchangeQueryBuilder klasa może być użyta do określenia pożądanego kryterium przy użyciu właściwości Status. Umożliwia także określenie wielu warunków do pobierania wybranych zadań z serwera Exchange. Zostało to przedstawione w poniższym przykładzie kodu.
// 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);