Как корректно получить GetWorksharingCentralModelPath()???

Автор Тема: Как корректно получить GetWorksharingCentralModelPath()???  (Прочитано 3353 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Коллеги, добрый день. Ломаю голову: почему на моём компьютере GetWorksharingCentralModelPath() отрабатывает корректно! А на другом компьютере выдаёт ошибку.

Autodesk.Revit.Exceptions.FileNotFoundException: The filePath to be opened doesn't exist.
   в Autodesk.Revit.ApplicationServices.Application.OpenDocumentFile(ModelPath modelPath, OpenOptions openOptions)


Код - vb.net [Выбрать]
  1.         Dim options As New SaveAsOptions()
  2.         Dim wssao As New WorksharingSaveAsOptions()
  3.         ' Сохранение локальной версии проекта
  4.         wssao.SaveAsCentral = False
  5.         options.SetWorksharingOptions(wssao)
  6.         ' Cохранение проекта
  7.         myCD.Application.ActiveUIDocument.Document.SaveAs(savingFilePath.Replace(".rvt", "_saved.rvt"), options)
  8.  
  9.         Dim myModelPath As ModelPath = Nothing
  10.         Try
  11.             myModelPath = myCD.Application.ActiveUIDocument.Document.GetWorksharingCentralModelPath()
  12.         Catch ex As Exception
  13.             myModelPath = Nothing
  14.         End Try
  15.  
  16.         'myCD.Application.ActiveUIDocument.Document.SaveAs(savingFilePath) - простое сохранение проекта!
  17.         ' 4. Четвёртый этап - открытие пустого проекта, чтобы сделать неактивным текущий проект
  18.         myCD.Application.OpenAndActivateDocument(RFA)
  19.         ' 5. Пятый этап - закрытие неактивного проекта
  20.         Dim App As Autodesk.Revit.UI.UIApplication = myCD.Application()
  21.         Dim UIDoc As UIDocument = App.ActiveUIDocument
  22.         Dim Doc As Document = App.ActiveUIDocument.Document
  23.         ' Получение списка открытых документов
  24.         Dim myDocSet As DocumentSet = Doc.Application.Documents
  25.         For Each mydocset_Single As Document In myDocSet
  26.             If mydocset_Single.PathName = savingFilePath.Replace(".rvt", "_saved.rvt") Then
  27.                 Try
  28.                     mydocset_Single.Close(False)
  29.                     ' MsgBox("Файл закрыт!")
  30.                 Catch ex As Exception
  31.                 End Try
  32.             End If
  33.         Next
  34.         ' 6. Шестой этап - открытие сохраненного проекта в режиме отключения от файла хранилища
  35.         Dim openOptions As New OpenOptions()
  36.         openOptions.DetachFromCentralOption = DetachFromCentralOption.DetachAndDiscardWorksets
  37.         Dim appRVT As Autodesk.Revit.ApplicationServices.Application = App.Application
  38.  
  39.         'Process.Start(savingFilePath.Replace(".rvt", "_saved.rvt"))
  40.  
  41.         Dim openedDoc As Document = appRVT.OpenDocumentFile(myModelPath, openOptions) '.OpenAndActivateDocument(myModelPath, openOptions, True) ' Здесь сбой!!!



1. Открываем проект из вкладки Vault в Revit-е.
2. Изменяем проект и жмём кнопку для публикации проекта в Vault.
3. Для начала файл нужно где-то сохранить на компьютере.
4. Затем открыть сохранённую версию с отрывом от файла хранилища. - На данном этапе на других компьютерах вываливается ошибка, что файла нет... Но это просто фантастика. На моём компьютере всё работает корректно.
5. Лишь только потом сохранить уже конечный вариант проекта.
6. Отправить его в Vault!

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Евгений, извини за поздний ответ, был в отпуске. Если все еще актуально, то можно попробовать выяснить причину.
Ты пишешь в коде, что у тебя ошибка на 41 строке, при попытке открытия проекта. Ошибка говорит о том, что файл не найден. Собственно первое что нужно сделать, это выяснить, что у тебя хранится в переменной myModelPath перед открытием.
Но, взглянув на код выше, можно почти наверняка сказать, что там null или Nothing в VB, так как у тебя есть блок try..catch в строках 10-14. И в catch у тебя идет присвоение пустого значение для пути и в дальнейшем это никак не проверяется.
Это одна из главных ошибок в программировании - при возникновении ошибки мы должны ее корректно обработать, а не игнорировать. В данном случае, если мы не смогли получить путь, то и выполнять нижеследующий код не имеет никакого смысла.

Пока все что тебе нужно - это в блоке catch в строке 13 вывести сообщение исключения. Дальше от него уже будем отталкиваться и искать причину. Возможно ее и искать не придется, в сообщении и так все будет написано.

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Евгений, извини за поздний ответ, был в отпуске.

Виктор, ничего страшного, даже извиняться не стоит :). Я попробую и отпишусь, но увы не ранее следующей недели. Увяз с Vault-ом и Revit-ом: есть трудности с их взаимодействием.

Отмечено как Решение Пашин Евгений 03-08-2017, 10:33:04

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
 Виктор Чекалин, я нашёл немного времени для этой задачи и решил её... Только не через GetWorksharingCentralModelPath(), а через ModelPathUtils.ConvertUserVisiblePathToModelPath. Теперь работает у всех!!!

Код - vb.net [Выбрать]
  1. Dim openedFilePath As String = myCD.Application.ActiveUIDocument.Document.PathName
  2. Dim CurrentAccount As String = myCD.Application.Application.Username
  3. Dim savingFilePath As String = IO.Path.GetFileName(openedFilePath)
  4. savingFilePath = savingFilePath.Replace("_" & CurrentAccount, "") ' Если проект замапен с хранилищем Vault, то это ВАЖНО!!!
  5. Dim myModelPath As ModelPath = ModelPathUtils.ConvertUserVisiblePathToModelPath(savingFilePath.Replace(".rvt", "_saved.rvt"))
  6. ' ... здесь у нас какие-то действия
  7. Dim openOptions As New OpenOptions()
  8. openOptions.DetachFromCentralOption = DetachFromCentralOption.DetachAndDiscardWorksets
  9. ' ... здесь у нас какие-то действия, после которых открываем проект и отрываем его от файла хранилища!
  10. Dim openedDoc As UIDocument = App.OpenAndActivateDocument(myModelPath, openOptions, True)

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Отлично. Но все же было бы интересено увидеть что там за ошибка была при получении GetWorksharingCentralModelPath()

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Отлично. Но все же было бы интересно увидеть что там за ошибка была при получении GetWorksharingCentralModelPath()

:) Что-то как-то не хочется возвращать это в предыдущее состояние :) Извини, поторопился. Ошибка была связана с не существующей ModelPath!