ADN Open CIS
Сообщество программистов Autodesk в СНГ

29/10/2013

Хранение пользовательских конфигураций вкладок в Vault

В ряде случаев возникает необходимость централизованного хранения конфигурации пользовательских настроек вкладок. Стандартный способ – это работа через Vault Option. Основная проблема в том, что пользовательские вкладки регистрируются до подключения Vault Explorer к Vault. Так как быть с настройкой пользовательских вкладок или команд, если невозможно прочитать Vault Option?

Решение довольно простое – достаточно вывести уведомление о необходимости перезапуска Vault Explorer. Этот метод работает для пользовательских команд, вкладок и обработчиков пользовательских объектов.

Так, например, Vault Web View имеет дело с двумя копиями конфигурационных настроек. Одна хранится локально в виде XML-файла в том же каталоге, что и DLL расширения. Другая копия представлена в виде данных, которые расположены в Vault Option. Когда Vault Web View настраивает вкладки, он производит эту операцию на основании локального файла настроек.

Код на C#:

Код - C#: [Выделить]
  1. public IEnumerable<DetailPaneTab> DetailTabs()
  2. {
  3.     // читаем и десериализуем локальный файл настроек в m_settings
  4.  
  5.     List<DetailPaneTab> tabs = new List<DetailPaneTab>();
  6.     foreach (TabSettings tabSettings in m_settings.Tabs)
  7.     {
  8.        // настраиваем вкладки на основании настроек
  9.         ...
  10.     }
  11.  
  12.     return tabs;
  13. }

Позже, когда пользователь регистрируется в Vault, расширение читает Vault Option и сравнивает его с локальным файлом настроек. Если они совпадают, то расширение произвело правильную настройку. Если они не совпадают, то файл локальной настройки обновляется, и пользователю будет предложено перезагрузить Vault Explorer.

Код на C#:

Код - C#: [Выделить]
  1. public void OnLogOn(IApplication application)
  2. {
  3.     Util.DoAction(delegate
  4.     {
  5.         CheckSettings(application.Connection);
  6.     });
  7. }
  8. private void CheckSettings(Connection conn)
  9. {
  10.     // читаем Vault Option
  11.     string xmlValue = conn.WebServiceManager.KnowledgeVaultService.GetVaultOption(
  12. SETTINGS_VAULT_OPTION);
  13.  
  14.     if (xmlValue == null)
  15.         return;
  16.  
  17.     // нормализуем данные
  18.     // пробелы в данных могут быть изменены во время сохранения в Vault Option
  19.     Settings tmp = Settings.Load(xmlValue);
  20.     xmlValue = tmp.Save();
  21.  
  22.     string settingsPath = System.IO.Path.Combine(Util.GetAssemblyPath(), SETTINGS_FILE);
  23.     string xmlValue2 = null;
  24.  
  25.     // читаем локальные настройки
  26.     if (System.IO.File.Exists(settingsPath))
  27.     {
  28.         xmlValue2 = System.IO.File.ReadAllText(settingsPath);
  29.     }
  30.  
  31.     // сравниваем текстовые значения
  32.     if (xmlValue != xmlValue2)
  33.     {
  34.         MessageBox.Show(
  35.                "Настройки Web View были обновлены." + 
  36.                "\nДля того чтобы увидеть корректные вкладки Web View," + 
  37.                "\nвам рекомендуется перезапустить Vault explorer.");
  38.         System.IO.File.WriteAllText(settingsPath, xmlValue);
  39.     }
  40. }

 


Источник: http://justonesandzeros.typepad.com/blog/2013/09/storing-custom-tab-configurations-in-vault.html

 

Обсуждение: http://adn-cis.org/forum/index.php?topic=295

Опубликовано 29.10.2013
Отредактировано 29.10.2013 в 19:03:23