Диплом_DOC (1222512), страница 7
Текст из файла (страница 7)
FilePreviewViewController *previewController = (FilePreviewViewController *)[FilePreviewViewController interactionControllerWithURL:fileURL];
[previewController setDelegate:self];
[previewController presentPreviewAnimated:YES];
}
else{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(documentPreviewManagerStartedDownloading:) name:kDocumentPreviewManagerWillStartDownloadNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(documentPreviewManagerProcessDownloading:) name:kDocumentPreviewManagerProgressNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(documentPreviewManagerCompletedDownloading:) name:kDocumentPreviewManagerDocumentDownloadCompletedNotification object:nil];
[docPrevManager downloadDocument:selectedDoc session:self.alfrescoSession goingToPreview:YES];
}
}
}
3.1.5 Модуль работы с сайтами
Разработанное приложение поддерживает совместную проектную работу пользователей с помощью механизма сайтов (виртуальных площадок проектов). Данный модуль содержит набор классов, необходимый для работы с сервисом сайтов. Он включает в себя следующие классы:
-
модель:
-
AlfrescoSiteService;
-
контроллеры:
-
SiteListViewController;
-
SiteDocumentLibraryViewController;
-
SiteMembersViewController;
-
SiteMemberInfoViewController.
AlfrescoSiteService – класс, входящий в состав Alfresco iOS SDK. Публичные методы данного класса предоставляют интерфейс для работы с сервисом сайтов. Код, приведенный ниже, демонстрирует работу с классом.
[self.siteService retrieveAllSitesWithListingContext:[[AlfrescoListingContext alloc] initWithSortProperty:@"isMember" sortAscending:YES] completionBlock:^(AlfrescoPagingResult *result,NSError *error){
if ([self.refreshControl isRefreshing]) {
[self.refreshControl endRefreshing];
}
if (error == nil) {
self.sites = [result.objects mutableCopy];
[self sortSites];
[self.tableView reloadData];
}
else{
NSLog(@"%@",error.description);
}
}];
В результате выполнения данного метода производится асинхронный запрос на сервер. Ответ, содержащий список сайтов сервера, доступных пользователю, используется для отображения в таблице.
Отрывок кода, приведенный выше, относится к реализации класса SiteListViewController, который отвечает за отображение пользователю списка сайтов. Так же он обеспечивает функции присоединения к сайту. Ниже представлена реализация метода, посылающего запрос на присоединение к сайту.
- (void)sendJoinRequest:(NSNotification *)notification
{
if (self.selectedSite) {
[self.siteService joinSite:self.selectedSite completionBlock:^(AlfrescoSite *site,NSError *error){
if (site) {
[self updateTable];
}
else{
NSLog(@"%@",error.description);
}
}];
}
[[NSNotificationCenter defaultCenter] removeObserver:self name:kSendSiteJoinRequest object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:kCancelObservingJoinRequests object:nil];
}
SiteDocumentLibraryViewController обеспечивает работу пользователя с библиотекой документов конкретного сайта. Задачи, которые решает данный контроллер, во многом схожи с задачами класса RepoViewController, так как работа с бибилиотекой документов сайта производится аналогично работе с хранилищем сервера. Но кроме этих функций контроллер поддерживает возможность просмотра списка участников сайта и возможность покинуть сайт.
SiteMembersViewController – контроллер, управляющий представлением отображения пользователю списка участников сайта. Поддерживает возможность вызова представления, контролируемого классом SiteMemberInfoViewController, отвечающего за проедоставление контактной информации о конкретном участнике.
3.1.6 Модуль работы с бизнес-процессами
В данном модуле содержится логика работы с бизнес-процессами. Это один из самых объемных модулей системы, содержащий следующие классы:
-
модель:
-
AlfrescoWorkflowService;
-
контроллеры:
-
WorkflowViewController;
-
WorkflowTaskViewController;
-
WorkflowProcessViewController;
-
WorkflowProcessTypeSelectionViewController;
-
WorkflowCreationViewController;
-
FolderSelectionViewController;
-
AttachmentSelectionViewController.
Для взаимодействия с сервисом бизнес-процессов используется класс AlfrescoWorkflowService, предоставляемый Alfresco iOS SDK. Открытый интерфейс этого класса обеспечивает полный набор функций для работы с бизнес-процессами. Ниже приведен отрывок кода, демонстрирующий работу с классом AlfrescoWorkflowService.
[self.workflowService retrieveProcessesWithListingContext:listingContext completionBlock:^(AlfrescoPagingResult *result,NSError *error){
[self.refreshControl endRefreshing];
if (error == nil) {
[self.myProcesses removeAllObjects];
NSArray *array = result.objects;
for (AlfrescoWorkflowProcess *process in array){
if (([process.initiatorUsername isEqualToString:self.alfrescoSession.personIdentifier])&&(![process.processDefinitionKey isEqualToString:@"activitiInvitationModerated"])) {
[self.myProcesses addObject:process];
[self.tableView reloadData];
}
}
}
else{
NSLog(@"%@",error.description);
}
}];
В процессе работы с приложением пользователь имеет возможность просматривать список текущих задач и бизнес-процессов, созданных им. Управление этим представлением производится классом WorkflowViewController. Это центральный контроллер модуля, он организует работу остальных контроллеров и отвечает за их своевременный вызов. Так, пользователь может выбрать задачу или бизнес-процесс из списка и перейти в окно просмотра деталей. Этот механизм реализован в методе, приведенном ниже. Реализация класса приведена в приложении Б.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
if (self.currentState == StateInvolvedProcesses) {
AlfrescoWorkflowTask *selectedTask = [self.myTasks objectAtIndex:indexPath.row];
WorkflowTaskViewController *taskController = [[WorkflowTaskViewController alloc] initWithNibName:NSStringFromClass([WorkflowTaskViewController class]) bundle:[NSBundle mainBundle] alfrescoSession:self.alfrescoSession workflowTask:selectedTask];
if ([Functions isIPad]) {
UINavigationController *navC = [[UINavigationController alloc] initWithRootViewController:taskController];
[self showDetailViewController:navC sender:nil];
}else{
[self.navigationController pushViewController:taskController animated:YES];
}}
else{
AlfrescoWorkflowProcess *process = [self.myProcesses objectAtIndex:indexPath.row];
WorkflowProcessViewController *processController = [[WorkflowProcessViewController alloc] initWithNibName:NSStringFromClass([WorkflowProcessViewController class]) bundle:[NSBundle mainBundle] alfrescoSession:self.alfrescoSession workflowProcess:process];
if ([Functions isIPad]) {
UINavigationController *navC = [[UINavigationController alloc] initWithRootViewController:processController];
[self showDetailViewController:navC sender:nil];
}else{
[self.navigationController pushViewController:processController animated:YES];
}}}
Контроллер WorkflowTaskViewController управляет представлением просмотра деталей задачи. Он реализует функции просмотра файлов, прикрепленных к задаче, перенаправление задачи и ее завершение. WorkflowProcessViewController управляет представлением просмотра деталей бизнес-процесса, поддерживает функции отмены бизнес-процесса, просмотра прикрепленных документов и задач, входящих в рамки данного процесса.
С точки зрения реализации, одной из самых сложных функций приложения является создание бизнес-процессов. В данном модуле создано несколько классов, обеспечивающих этот функционал. WorkflowProcessTypeSelectionViewCo-
ntroller – простой контроллер для выбора типа создаваемого бизнес-процесса. WorkflowCreationViewController – объемный и сложный в реализации класс, отвечающий за процесс ввода необходимой информации, сложность его реализации заключается в динамически изменяющемся наборе требуемых полей, в зависимости от типа создаваемого процесса. AttachmentSelectionViewController – класс, управляющий представлением выбора прикрепляемых документов.
3.1.7 Модуль работы с локальными файлами.
Данный модуль ориентирован на работу с файлами, хранящимися в памяти устройства пользователя. Он состоит их двух классов: LocalFilesViewController и LocalFilesManager.
LocalFilesManager, используя файловый менеджер, управляет локальными файлами. Он поддерживает функции сохранения и удаления документов. Публичный интерфейс класса представлен на рисунке 3.21.
Рисунок 3.21 – Публичный интерфейс класса LocalFilesManager
Контроллер управляет представлением для работы с локальными файлами.
3.1.8 Модуль уведомлений
Для интерактивного взаимодействия с пользователем в приложении реализована система уведомлений. В данном модуле инкапсулированы классы, управляющие процессом их отображения и реакции приложения на действия пользователя. В состав модуля входят следующие классы:
-
CreateNodeAlertController;
-
CreateFolderAlertController;
-
ErrorLoggingAlertController;
-
UploadPhotoAlertController;
-
DownloadFileAlertController;
-
JoinSiteAlertController;
-
LeaveSiteAlertController;
-
LocalFileNameErrorAlertController;
-
TaskReassignAlertController;
-
DeleteWorkflowProcessAlertController;
-
PrioritySelectionAlertController;
-
TaskStatusAlertController;
-
LocalFileNameAlertController.
CreateNodeAlertController управляет выбором типа создаваемого узла, его интерфейс представлен на рисунке 3.22.
Рисунок 3.22 – Интерфейс CreateNodeAlertController
CreateFolderAlertController служит для ввода имени создаваемой папки. Интерфейс приведен на рисунке 3.23.
Рисунок 3.23 – Интерфейс CreateFolderAlertController
Класс ErrorLoggingAlertController используется для отображения простых уведомлений, такие как ошибки подключения или ошибки в именах создаваемых узлов.
Контроллеры LeaveSiteAlertController, TaskReassignAlertController и DeleteWorkflowProcessAlertController служат для уточнения намерения пользователя выполнить критические операции, такие как перенаправление задачи, удаление бизнес-процесса и уход с сайта. Интерфейс одного из этих контроллеров приведен на рисунке 3.24.
Рисунок 3.24 – Интерфейс DeleteWorkflowProcessAlertController
Контроллер PrioritySelectionAlertController используется для выбора уровня приоритета бизнес-процесса при его создании. TaskStatusAlertController отвечает за выбор статуса текущей задачи, его интерфейс приведен на рисунке 3.25.
Рисунок 3.25 – Интерфейс TaskStatusAlertController
При попытке сохранить локальную копию файла, LocalFileNameErrorAlertController уведомляет пользоваеля о наличии локального файла с таким именем и предлагает заменить его или выбрать другое имя. LocalFileNameAlertController используется для ввода имени сохраняемого файла при открытии приложением сторонних файлов.
3.1.9 Модуль работы с пользователями
Данный модуль включает в себя следующие классы:
-
модель:
-
AlfrescoPersonService;
-
AvatarManager;
-
контроллеры:
-
PersonSearchViewController.
AlfrescoPersonService – класс для работы с сервисом персон. Позволяет запрашивать данные о конкретном пользователе. AvatarManager используется для управления аватарами пользователей.
Сервисы Alfresco не поддерживают возможности получить полный список пользователей, но поддерживают поиск среди пользователей системы по ключевым словам. Поэтому в приложении реализован контроллер PersonSearchViewController для управления представлением поиска персон.
3.1.10 Модуль вспомогательных классов
В последний вспомогательный модуль объединены классы, не относящиеся к конкретному модулю, но используемые в приложении. В этот модуль входят следующие классы:
-
Functions;
-
ColorManager;
-
Constants;
-
WelcomeViewController;
-
SettingsViewController;
-
PlaceholderViewController;
-
AppDelegate.
Класс Functions содержит набор методов и описаний функций, часто применяемых при разработке приложения. Это функции перевода размера файла в удобочитаемый для пользователя вид, расчета разницы между текущей датой и передаваемой для заполнения графического интерфейса, методы определения типа устройства, на котором запущено приложение, определения валидности имени файла или папки. Интерфейс данного класса приведен на рисунке 3.26.















