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

Навигация

[0] Главная страница сообщений

Перейти к полной версии