Работа с папками и ярлыками

Для создания организованной визуальной структуры в платформе Docsvision предусмотрены специализированные объекты — Папки, которые реализуются при помощи специальной системной карточки — Карточки папок. Карточка папок хранит иерархическое дерево папок, каждая из которых имеет ряд собственных свойств (название, иконка и т.д.), а также ряд дочерних элементов — подпапок и ярлыков.

Карточка папок

Разработчик может взаимодействовать с данными карточки папок непосредственно через объект CardData по тем же принципам, как с любой другой карточкой системы. Однако, для упрощения этой задачи в объектной модели предусмотрен ряд специализированных объектов, лучше отражающих семантику: Folder, Shortcut. Ключевым объектом этой модели является сама карточка папок — объект FolderCard.

Все объекты расположены в специальном пространстве имён для работы с системными карточками — DocsVision.Platform.ObjectManager.SystemCards.

Как и все системные карточки, этот объект может быть получен через стандартный интерфейс методами 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 Создание ярлыка.

Первый параметр — идентификатор папки, в которой создаётся ярлык.

Второй параметр — идентификатор карточки, на которую создаётся ярлык.

Третий параметр — признак создания "сильного ярлыка".