Добрый день, коллеги!
Извиняюсь за запоздалый ответ. Итак, в самом Vault SDK нет ничего, что могло бы помочь с решением данной проблемой. К сожалению, ни форумы, ни Autodesk Consulting не смогли дать ответ.
Поэтому я решил это по-другому. Взял Fiddler от Telerik + VapiTrace именно для Vault. Просмотрел все обращения к серверу. И увидел очень интересную штуку, которая привела меня к решению. Это всего-навсего одна текстовая команда (KnowledgeVaultService.GetVaultOption("
RevitVaultFolderMapping")).
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#.
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! Сможете на раз-два определять последовательность действий и сервисы, которые в этом участвуют.