Работа с папками и ярлыками
Для создания организованной визуальной структуры в платформе Docsvision предусмотрены специализированные объекты — Папки, которые реализуются при помощи специальной системной карточки — Карточки папок. Карточка папок хранит иерархическое дерево папок, каждая из которых имеет ряд собственных свойств (название, иконка и т.д.), а также ряд дочерних элементов — подпапок и ярлыков.
Карточка папок
Разработчик может взаимодействовать с данными карточки папок непосредственно через объект CardData
по тем же принципам, как с любой другой карточкой системы. Однако, для упрощения этой задачи в объектной модели предусмотрен ряд специализированных объектов, лучше отражающих семантику: Folder
, Shortcut
. Ключевым объектом этой модели является сама карточка папок — объект FolderCard
.
Все объекты расположены в специальном пространстве имён для работы с системными карточками — |
Как и все системные карточки, этот объект может быть получен через стандартный интерфейс методами CardManager.GetCard
или CardManager.GetDictionary
.
Так как карточка папок является справочником, то её идентификатор всегда известен и неизменен — у справочников он всегда соответствует идентификатору типа карточки. |
const string FOLDER_CARD_TYPE = "DA86FABF-4DD7-4A86-B6FF-C58C24D12DE2"; (1)
FolderCard folderCard = (FolderCard)userSession.CardManager.GetDictionary(new Guid(FOLDER_CARD_TYPE));
1 | Получение карточки папки. |
Папка
Папка содержит некоторое количество собственных свойств (название, иконка и т.д.), а также ряд дочерних элементов, к числу которых относятся:
-
Подпапки — дочерние папки.
-
Ярлыки, лежащие в папке.
-
Ограничения на типы карточек, которые могут быть созданы в папке.
-
Ограничения на представления, которые могут быть применены.
-
Ограничения на шаблоны экспорта.
-
Обычный — отображается содержимое в виде списка карточек.
-
URL — отображается страница.
-
Карточка — в правой панели отображается интерфейс карточки.
Из объектной модели доступен переключатель режима работы папки Folder.CurrentStyle
и идентификатор карточки папки Folder.PropCardID
. Также можно выполнить соответствующую настройку из Windows-клиента.
При создании карточки папки надо учитывать, что, когда пользователь открывает папку, она отображается не модально и скрывается, как только пользователь переходит на другую папку. У карточки нет возможности отменить закрытие (ей не приходит вызов CardControl.CardClosing
), поэтому в её интерфейсе не должно быть средств редактирования чего-либо, что может остаться несохранённым к моменту перехода на другую папку. Лучше всего использовать интерфейс карточки для отображения чего-либо, а всё редактирование вынести на отдельные формы, по закрытии которых будет производиться сохранение данных.
В примере проверяется наличие у папки подпапки с названием "завершённые". Если папка с заданным именем отсутствует, она будет создана.
Folder folder = folderCard.GetFolder(new Guid("00000000-0000-0000-0000-000000000000"));
string folderName = "завершённые"; (1)
if (!folder.HasSubfolders || folder.Folders.Count(m=>m.Name.Equals(folderName)) = 0)
{
folder.Folders.AddNew(folderName); (2)
}
1 | Получение папки с идентификатором 00000000-0000-0000-0000-000000000000 . |
2 | Если папка не имеет подпапок, либо не содержит подпапки с именем "завершённые", такая папка будет создана. |
Ярлык
Физически ярлык — это просто строка карточки папок, которая хранит в себе ссылку на карточку.
Как и ссылка, ярлыки бывают двух видов — слабые и сильные. Слабый ярлык держит слабую ссылку на карточку и отображается с overlay-иконкой, аналогичной ссылке в Windows. При удалении такого ярлыка удаляется только сам ярлык.
Сильный ярлык держит сильную ссылку на карточку, и отображается обычной иконкой карточки. Для пользователя сильный ярлык полностью соответствует нахождению карточки в этой папке, поэтому правомерно говорить о том, что "карточка лежит в папке". При удалении ярлыка удаляется сама карточка, если на неё нет других сильных ссылок. Если программно нужно удалить карточку, на которую могут быть ярлыки, то надо воспользоваться методом FolderCard.DeleteCard
, который удаляет карточку с учетом существующих ярлыков.
Для каждой карточки можно создать только один сильный ярлык. В случае повторного вызова метода создания сильного ярлыка для той же карточки — метод вернет ошибку. |
По аналогии с письмами Outlook ярлык на карточку обладает признаком прочитанности. Непрочитанные ярлыки отображаются в Windows-клиенте жирным шрифтом. Когда пользователь открывает карточку, он устанавливает этот признак в "прочитано". Этот признак можно выставить программно, если необходимо сигнализировать пользователю о том, что ему необходимо обратить внимание на новый ярлык.
Кроме этого, ярлык может содержать также дополнительные атрибуты, например, режим открытия карточки Shortcut.ModeId
. Таким образом, можно создать на одну карточку несколько ярлыков с разными режимами открытия карточки.
В объектной модели для работы с ярлыками предназначен объект Shortcut
.
В примере, для заданной карточки удаляются все ярлыки, кроме "сильного":
ShortcutCollection shortcutCollection = folderCard.GetShortcuts(new Guid("00000000-0000-0000-0000-000000000000")); (1)
foreach (DocsVision.Platform.ObjectManager.SystemCards.Shortcut shortcut in shortcutCollection)
{
if (!shortcut.IsHardLink) folderCard.DeleteShortcut(shortcut.Id, true); (2)
}
1 | Получение всех ярлыков на карточку 00000000-0000-0000-0000-000000000000 . |
2 | Если ярлык не "сильный", то удалить. |
Чтобы создать в папке ярлык на существующую карточку, используйте метод CreateShortcut карточки папок:
FolderCard folderCard = (FolderCard)userSession.CardManager.GetDictionary(new Guid("DA86FABF-4DD7-4A86-B6FF-C58C24D12DE2")); (1)
folderCard.CreateShortcut(new Guid("FB9A01EC-3412-42B2-8555-8016674D4DE9"), new Guid("A65C892C-339F-E511-9417-90E6BA57B9F8"), false); (2)
1 | Получение карточки папок |
2 | Создание ярлыка.
Первый параметр — идентификатор папки, в которой создаётся ярлык. Второй параметр — идентификатор карточки, на которую создаётся ярлык. Третий параметр — признак создания "сильного ярлыка". |