Travailler avec les tâches sur le serveur Exchange
Travailler avec les tâches
Aspose.Email prend en charge le traitement des tâches sur Exchange à l’aide du ExchangeTask classe. Différentes propriétés exposées par ExchangeTask, comme Subject, Statut, Date d’échéance, et Priorité, peut être utilisée pour configurer la tâche sur Exchange. Le EWSClient la classe expose des fonctions telles que createTask, updateTask, et deleteTask qui sont utilisées pour traiter les tâches sur Exchange. Cet article montre comment :
- Créer une nouvelle tâche.
- Définir le fuseau horaire d’une tâche.
- Mettre à jour une tâche.
- Supprimer une tâche.
- Envoyer la demande de tâche
- Enregistrer la tâche sur le disque
Créer une nouvelle tâche
Le fragment de code suivant vous montre comment créer une nouvelle tâche.
// 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);
Spécifier le fuseau horaire
Le IEWSClient interface et ExchangeTask fournissent la propriété TimeZoneId pour définir les informations de fuseau horaire lors de la création d’une tâche. Le fragment de code suivant vous montre comment spécifier le fuseau horaire.
client.setTimezoneId("Central Europe Standard Time");
Mettre à jour la tâche
Les fragments de code suivants montrent comment mettre à jour une tâche sur un serveur 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);
}
Supprimer la tâche
Le fragment de code suivant vous montre comment supprimer une tâche sur un serveur 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());
}
}
Envoi de demande de tâche
Le service Aspose.Email Exchange offre la capacité d’envoyer des demandes de tâches similaires à Outlook. Le fragment de code suivant vous montre comment charger un message de demande de tâche depuis le disque et l’envoyer en utilisant le 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);
Enregistrement de la tâche sur le disque
Aspose.Email permet également d’enregistrer les tâches Exchange sur disque au format Outlook MSG. Le fragment de code suivant vous montre comment enregistrer une tâche sur le disque.
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);
Lister les tâches du serveur Exchange
IEWSClient fournit le listTasks méthode pouvant être utilisée pour extraire les tâches d’un Exchange Web Service. Elle possède plusieurs surcharges permettant de récupérer la liste des tâches d’un dossier spécifique ou en utilisant certains critères de recherche. L’exemple de code ci‑dessus illustre l’obtention de toutes les tâches ou de tâches spécifiques du dossier 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());
}
Filtrer les tâches depuis le serveur Exchange
Aspose.Email offre la capacité de récupérer des tâches spécifiques du serveur au lieu de récupérer toutes les tâches du serveur. L’API peut être utilisée pour récupérer les tâches par statut tel que Terminé, Différé, En cours, Non commencé ou En attente d’autres. Le ExchangeQueryBuilder la classe peut être utilisée pour spécifier le critère souhaité en utilisant la propriété Status. Elle permet également de spécifier plusieurs conditions pour récupérer les tâches souhaitées du serveur Exchange. Ceci est illustré par l’exemple de code suivant.
// 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);