کار با وظایف در سرور Exchange

کار با وظایف

Aspose.Email از پردازش کارها روی Exchange با استفاده از ExchangeTask کلاس. ویژگی‌های مختلفی که توسط آن ارائه می‌شوند 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

IEWSClient ارائه می‌دهد listTasks متدی که می‌تواند وظایف را از یک Exchange Web Service بازیابی کند. این متد چند overload دارد که می‌توان برای دریافت فهرست وظایف از یک پوشه خاص یا با استفاده از برخی معیارهای جستجو استفاده کرد. نمونه کد زیر بدست آوردن همه یا وظایف خاص از پوشه 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

Aspose.Email امکان بازیابی وظایف خاص از سرور را به جای دریافت تمام وظایف فراهم می‌کند. API می‌تواند وظایف را بر اساس وضعیت وظیفه مانند Completed، Deferred، In Progress، Not started یا Waiting on others بازیابی کند.  ExchangeQueryBuilder کلاس می‌تواند برای تعیین معیار دلخواه با استفاده از ویژگی Status استفاده شود. همچنین امکان تعیین چندین شرط برای دریافت وظایف دلخواه از سرور Exchange را می‌دهد. این در نمونه کد زیر نشان داده شده است.

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