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