العمل مع المهام على خادم Exchange
العمل مع المهام
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
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
توفر Aspose.Email القدرة على استرجاع مهام معينة من الخادم بدلاً من استرجاع جميع المهام. يمكن استخدام API لاسترجاع المهام حسب حالة المهمة مثل مكتملة، مؤجلة، قيد التنفيذ، غير بدأت أو بانتظار الآخرين. الـ 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);