ADN Club > Vault API
Как определить список соответствий папок сервера с папками в хранилище?
(1/1)
Пашин Евгений:
Добрый день, коллеги!
Ищу ответ на вопрос: как определить все соответствия папок на сервере и папок в хранилище?
Поясню:
1. В Revit-е есть вкладка Vault.
2. С помощью этой вкладки открываю проект центральной модели, которая имеет соответствие с папкой в хранилище.
3. Как определить папку, откуда файл центральной модели открылся - я знаю.
4. Как определить папку, соответствующая ей в хранилище - ВОПРОС ИЗ ВОПРОСОВ!!!
Дмитрий Емельянов:
Добрый день, Евгений!
Провербьте, пожалуйста, следующие инструменты Vault в Revit:
* Настройка сопоставлений
* Привязка файлов из Vault
Пашин Евгений:
--- Цитата: Дмитрий Емельянов от 24-10-2017, 13:19:24 ---Добрый день, Евгений!Провербьте, пожалуйста, следующие инструменты Vault в Revit:Настройка сопоставленийПривязка файлов из Vault
--- Конец цитаты ---
Дмитрий, добрый день. Тут проблем нет. Эти статьи я уже просматривал.
Пашин Евгений:
Добрый день, коллеги!
Извиняюсь за запоздалый ответ. Итак, в самом Vault SDK нет ничего, что могло бы помочь с решением данной проблемой. К сожалению, ни форумы, ни Autodesk Consulting не смогли дать ответ.
Поэтому я решил это по-другому. Взял Fiddler от Telerik + VapiTrace именно для Vault. Просмотрел все обращения к серверу. И увидел очень интересную штуку, которая привела меня к решению. Это всего-навсего одна текстовая команда (KnowledgeVaultService.GetVaultOption("RevitVaultFolderMapping")).
--- Код - vb.net [Выбрать] --- Public Function Get_Required_Vault_Folder(ByVal RevitCentralPath As String) As String ' Параметр для хранения строк будущего xml-файла Dim myXML As New List(Of String) ' Параметр для соединения с Vault из Revit Dim conn As VDF.Vault.Currency.Connections.Connection = Connectivity.Application.VaultBase.ConnectionManager.Instance.Connection ' Параметр для определения связанных папок между Revit и Vault Dim GVO As String = conn.WebServiceManager.KnowledgeVaultService.GetVaultOption("RevitVaultFolderMapping") ' Добавляем текст связанных папок между Revit и Vault myXML.Add(GVO) ' Определение папки на сервере для центральной модели проекта Dim cmFolder As String = IO.Path.GetDirectoryName(RevitCentralPath) ' Параметр для хранения соответствующей папки в хранилище Vault Dim vltFolder As String = "" ' Сохранение xml-файла Dim xmlFile As String = Environ("TEMP") & "\RevitVaultFolderMapping.xml" IO.File.WriteAllLines(xmlFile, myXML) ' Читаем получившийся xml-файл Dim xdoc As XDocument = XDocument.Load(xmlFile) ' Перебираем все элементы xml-файла внутри элемента "MappingItems" For Each xmlItem As XElement In xdoc.Element("MappingItems").Elements ' Если аттрибут "PhysicalPath" = пути к файлу проекта на сервере, то получаем его папку в хранилище Vault If xmlItem.Attribute("PhysicalPath").Value = cmFolder Then vltFolder = xmlItem.Attribute("VaultPath").Value End If Next ' Возвращаем папку в Vault Return vltFolder End Function
То же самое, но на C#.
--- Код - C# [Выбрать] ---public string Get_Required_Vault_Folder(string RevitCentralPath){ List<string> myXML = new List<string>; VDF.Vault.Currency.Connections.Connection conn = Connectivity.Application.VaultBase.ConnectionManager.Instance.Connection; string GVO = conn.WebServiceManager.KnowledgeVaultService.GetVaultOption("RevitVaultFolderMapping"); myXML.Add(GVO); string cmFolder = IO.Path.GetDirectoryName(RevitCentralPath); string vltFolder = ""; string xmlFile = Environ("TEMP") + "\\RevitVaultFolderMapping.xml"; IO.File.WriteAllLines(xmlFile, myXML); XDocument xdoc = XDocument.Load(xmlFile); foreach (XElement xmlItem in xdoc.Element("MappingItems").Elements) { if (xmlItem.Attribute("PhysicalPath").Value == cmFolder) { vltFolder = xmlItem.Attribute("VaultPath").Value; } } return vltFolder;}
Вопрос закрыт.
Для тех, кто изучает Vault API настоятельно рекомендую обзавестись Fiddler-ом и надстройкой VapiTrace для слежения за сервером Vault! Сможете на раз-два определять последовательность действий и сервисы, которые в этом участвуют.
Навигация
Перейти к полной версии